第四章 软件测试
4.1 测试的目的与地位
4.2 测试的方法与技术
4.3 白盒测试的测试用例设计
4.4 黑盒测试的测试用例设计
4.5 软件测试的步骤
1.测试是为了寻找错误而运行程序的过程。
2.一个好的测试用例是指很可能找到迄今为止尚未发现的错误的测试。
3.一个成功的测试是揭示了迄今为止尚未发现的错误的测试。
测试的目的与地位
4.1 测试的目的与地位软件生存期各阶段间需保持的正确性用户要求用户,
我要什么?
运行结果计算机,
程序运行得到的结果源程序程序员,
我要让计算机什么做?
设计说明书设计员,
我要让软件做什么?
需求说明书分析员,
我可以提供什么?
1
2 3
4
5理解正确性表达正确性理解正确性设计正确性表达正确性理解正确性编码正确性运行正确性输入正确性相符吗?
测试 (test) 调试 (debug)
以已知条件开始,
使用预先定义的程序,
有预知的结果以不可知内部条件开始,结果一般不可预见有计划 被动的由 独立的测试组,在不了解软件设计的条件下完成由 程序作者 进行发现错误 找出错误位置,排除测试与调试 (排错 )
4.2 测试的技术软件测试的策略和方法静态测试方法动态测试方法人工测试方法计算机辅助静态分析方法白盒测试方法黑盒测试方法静态测试,基本特征是在对软件进行分析、检查和审阅,不实际运行被测试的软件。
静态测试约可找出 30~ 70%的逻辑设计错误,
对需求规格说明书、软件设计说明书、源程序做检查和审阅,包括:
是否符合标准和规范;
通过结构分析、流图分析、符号执行指出软件缺陷 ;
动态测试,通过运行软件来检验软件的动态行为和运行结果的正确性动态测试的两个基本要素,
被测试程序
测试数据(测试用例)
动态测试方法
(1)选取定义域有效值,或定义域外无效值,
(2)对已选取值决定 预期的结果
(3)用选取值执行程序
(4)执行结果 与 (2)结果相比,
不吻和程序有错,
动态 黑盒测试 —闭着眼睛测试软件软件输入不深入代码细节的测试方法称为动态黑盒测试。
软件测试员充当客户来使用它。
输出动态 白盒测试 —带上 X光眼镜测试软件
3581322.293419985680302829734315
250*(1+0.015)*((1+0.015)^360-1)/0.015 250*(1+0.015)*((1+0.015)^360-1)/0.015
假如知道一个盒子包含一台计算机,而另一个盒子是人用纸笔计算,就会选择不同的测试用例了解软件的运作方式会影响测试手段黑盒测试与白盒测试比较黑盒测试是从用户观点,按规格说明书要求的输入数据与输出数据的对应关系设计测试用例,
是根据程序 外部特征 进行测试。
白盒测试是根据程序 内部逻辑结构 进行测试。
黑盒测试与白盒测试优缺点比较黑盒测试 白盒测试优点缺点性质
① 适用于各阶段测试
②从产品功能角度测试
③容易入手生成测试数据
① 可构成测试数据使特定程序部分得到测试
②有一定的充分性度量手段
③可或较多工具支持
① 某些代码得不到测试
②如果规格说明有误,
则无法发现
③不易进行充分性测试
① 不易生成测试数据 (通常 )
② 无法对未实现规格说明的部分进行测试
③工作量大,通常只用于单元测试,有应用局限是一种 确认 技术,回答
,我们在构造一个正确的系统吗?,
是一种 验证 技术,回答
,我们在正确地构造一个系统吗?,
黑盒测试与白盒测试能发现的错误
C BA
D
-只能用黑盒测试发现的错误A
-只能用白盒测试发现的错误
-两种方法都能发现的错误
-两种方法都不能发现的错误
BC
D
软件测试不可能发现程序中存在的所有错误
4.3白盒测试的测试用例设计逻辑覆盖法
(1)语句覆盖
(2)判定覆盖
(3)条件覆盖:
(4)判定 /条件覆盖
(5)条件组合覆盖
(6)路径覆盖使程序中每个语句至少执行一次使每个判定的真假分支都至少执行一次每个判定的每个条件至少执行一次覆盖每一个可能的路径例,PROCEDURE SAMPAL
(A,B,REAL; VAR X,REAL);
BEGIN
IF (A>1) AND (B=0)
THEN X:=X/A
IF (A=2) OR (X>1)
THEN X:=X+1
END;
开始
(A>1) AND (B=0)
(A=2) OR (X>1)
返回
X=X/A
X=X+1
F
F
T
T
a
b
d
c
e
语句覆盖 开始
(A>1) AND (B=0)
(A=2) OR (X>1)
返回
X=X/A
X=X+1
F
F
T
T
a
b
d
c
e
输入数据:
A=2,B=0,
X=4
语句覆盖是 最弱 的逻辑覆盖使程序中每个语句至少执行一次判定覆盖 开始
(A>1) AND (B=0)
(A=2) OR (X>1)
返回
X=X/A
X=X+1
F
F
T
T
a
b
d
c
e
使每个判定的真假分支都至少执行一次
A=3,B=0,X=3 可覆盖 c,d分支
A=2,B=1,X=1 可覆盖 b,e分支
(3)条件覆盖使每个判定的每个条件的可能取值至少执行一次第一判定表达式,
设 条件 A>1 取真 记为 T1
假 T1
条件 B=1 取真 记为 T2
假 T2
第二判定表达式,
设 条件 A=2 取真 记为 T3
假 T3
条件 X>1 取真 记为 T4
假 T4
条件覆盖 开始
(A>1) AND (B=0)
(A=2) OR (X>1)
返回
X=X/A
X=X+1
F
F
T
T
a
b
d
c
e
满足条件,T1,T1,
T2,T2
T3,T3
T4,T4
测试用例 通过 满足的 覆盖
A B X 路径 条件 分支
1 0 3 abe T1,T2,T3,T4 b,e
2 1 1 abe T1,T2,T3,T4 b,e
两个测试用例 覆盖了四个条件八种可能取值 。
未覆盖 c,d分支,不满足判定覆盖的要求,
条件覆盖不一定包含判定覆盖判定覆盖也不一定包含条件覆盖
(4)判定 /条件覆盖选取足够多的测试用例,使判断中的每个条件的所有可能取值至少执行一次,同时每个判断本身的所有可能判断结果至少执行一次,
判定 /条件覆盖 开始
(A>1) AND (B=0)
(A=2) OR (X>1)
返回
X=X/A
X=X+1
F
F
T
T
a
b
d
c
e
满足条件,T1,T1,
T2,T2
T3,T3
T4,T4
测试用例 通过 满足的 覆盖
A B X 路径 条件 分支
2 0 4 ace T1,T2,T3,T4 c,e
2 1 1 abd T1,T2,T3,T4 b,d
能同时满足判定、条件两种覆盖标准。
取值。
测试用例 通过 满足的 覆盖
A B X 路径 条件 分支
2 0 3 ace T1,T2,T3,T4 c,e
2 1 1 abe T1,T2,T3,T4 b,e
1 0 3 abe T1,T2,T3,T4 b,e
1 1 1 abd T1,T2,T3,T4 b,d
(5)条件组合覆盖所有可能的条件取值组合至少执行一次
A>1,B=0
A>1,B≠0
A≯ 1,B=0
A≯ 1,B≠0
A=2,X>1
A=2,X≯ 1
A≠2,X>1
A≠2,X≯ 1
测试用例 通过 满足的 覆盖
A B X 路径 条件 分支
2 0 4 ace T1,T2,T3,T4 c,e
2 1 1 abe T1,T2,T3,T4 b,e
1 0 2 abd T1,T2,T3,T4 b,d
1 1 1 abd T1,T2,T3,T4 b,d
(6)路径覆盖覆盖每一个可能的路径测试用例 通过 满足的 覆盖
A B X 路径 条件 分支
1 1 1 abd T1,T2,T3,T4 b,d
1 1 2 abe T1,T2,T3,T4 b,e
3 0 1 acd T1,T2,T3,T4 c,d
2 0 4 ace T1,T2,T3,T4 c,e
导出程序流程图的拓扑结构 -流图
1
2,3
6 4,5
7
10
6
11
a
节点边 R4
区域
1
2
3
4
5
87
3
9
11
程序流程图
8
9
R1
R2R3
设计测试用例,保证基本路径集中每条路径的执行。
4.4.1 等价类划分法把所有可能的输入数据 (有效的 和 无效的 )
划分成若干个等价的子集 (称为等价类 ),
使得每个子集中的一个典型值在测试中的作用与这一子集中所有其它值的作用相同,
可从每个子集中选取一组数据来测试程序
4.4 黑盒测试的测试用例设计如何划分等价类? 有效等价类 (合理等价类 )
无效等价类 (不合理等价类 )
例,某报表处理系统要求用户输入处理报表的日期,日期限制在 2001年 1
月至 2005年 12月,即系统只能对该段期间内的报表进行处理,如日期不在此范围内,则显示输入错误信息。
系统日期规定由年、月的 6位数字字符组成,前四位代表年,后两位代表月。
如何用等价类划分法设计测试用例,
来测试程序的日期检查功能?
用等价类划分法设计测试用例步骤:
(1)形成等价类表,每一等价类规定一个唯一的编号;
(2)设计一测试用例,使其尽可能多地覆盖尚未覆盖的有效等价类,
重复这一步骤,直到所有有效等价类均被测试用例所覆盖;
(3)设计一新测试用例,使其只覆盖一个无效等价类,重复这一步骤直到所有无效等价类均被覆盖;
第一步:等价类划分输入等价类 有效等价类 无效等价类报表日期的类型及长度 3位数字字符 (1)
有非数字字符 (4)
少于 6个数字字符 (5)
多于 6个数字字符 (6)
年份范围 在 2001~ 2005之间 (2) 小于 2001 (7)大于 2005 (8)
月份范围 在 1~ 12之间 (3)
“报表日期,输入条件的等价类表小于 1 (9)
大于 12 (10)
第二步,为有效等价类设计测试用例对表中编号为 1,2,3的 3个有效等价类用一个测试用例覆盖:
测试数据 期望结果 覆盖范围
200105 等价类 (1)(2)(3)输入有效第三步:为每一个无效等价类设至少计一个测试用例测试数据 期望结果 覆盖范围
001MAY 等价类 (4)输入无效
20015 等价类 (5)输入无效
2001005 等价类 (6)输入无效
200005 等价类 (7)输入无效
200805 等价类 (8)输入无效
200100 等价类 (9)输入无效
200113 等价类 (10)输入无效不能出现相同的测试用例本例的 10个等价类至少需要 8个测试用例作业,对招干考试系统“输入学生成绩”
子模块设计测试用例招干考试分三个专业,准考证号第一位为专业代号,如,1-行政专业,
2-法律专业,
3-财经专业,
行政专业准考证号码为,110001~ 111215
法律专业准考证号码为,210001~ 212006
财经专业准考证号码为,310001~ 314015
例,准考证号码的等价类划分有效等价类,
(1) 110001 ~ 111215
(2) 210001 ~ 212006
(3) 310001 ~ 314015
无效等价类,
(4) -? ~ 110000
(5) 111216 ~ 210000
(6) 212007 ~ 31000
(7) 314016 ~ +?
4.4.2 边界值分析法边界值分析法与等价类划分法区别
(1)边界值分析不是从某等价类中随便挑一个作为代表,而是使这个等价类的每个边界都要作为测试条件。
(2)边界值分析不仅考虑输入条件,
还要考虑输出空间产生的测试情况被测试子 域测试内点测试外点软件边界与悬崖很类似
4.4.3 因果图法因果图适合于描述对于多种输入条件的组合,相应产生多个动作的形式来设计测试用例。
因果图方法最终生成的是判定表。
因果图方法实例某电力公司有 A,B,C,D四类收费标准,
并规定:
居民用电 <100度 /月 按 A类收费
≥ 100度 /月按 B类收费动力用电 <10000度 /月,非高峰,B类收费
≥ 10000度 /月,非高峰,C类收费
<10000度 /月,高峰,C类收费
≥ 10000度 /月,高峰,D类收费把因果图转换为判定表组合条件条件
(原因 )
动作
(结果 )
A
B
C
1
2
3
1 2 3 4 5 6
1
0
1
1
0
0
0
1 1
0 0 0
1 1
0 0 0 0
1 0 0 0
0 1 1 0
4 1 0 1 0
5 0 0 1 1
D 0 0 0 1
1 0
0 1
0 0
0 0
测试用例
1:居民
2:动力
3:,100
4,〈 1000
5,高峰为判定表每一列设计一个测试用例,
1列 居民电,90度 /月 A
2列 居民电,110度 /月 B
3列 动力电,非高峰,8000度 /月 B
4列 动力电,非高峰,1.2万度 /月 C
5列 动力电,高峰,0.9万度 /月 C
6列 动力电,高峰,1.1万度 /月 D
条件 测试用例 预期结果组合 (输入数据 ) (输出动作 )
软件测试的过程被测模块 单元测试设计信息集成测试被测模块 单元测试被测模块 单元测试测试过的模块确认测试系统测试软件需求其它系统元素装配好的软件确认的软件可运行的软件
4.5 软件测试工作步骤
4.5.1 单元测试一,单元测试的内容主要对模块的 五个基本特性 进行评价模块错误处理模块接口局部数据结构重要的执行路径 边界条件二,单元测试的方法单元测试一般为编码步骤的附属部分,
模块不是独立的程序,自己不能运行,
要靠其它部分来调用和驱动,要为每个单元测试开发两个软件,
(1)驱动模块 (驱动程序 ):相当于主模块
(2)桩模块 (测试存根、连接程序 ),
代替所测模块调用的子模块单元测试的测试环境举例,
B
A
CD
E待测试模块单元测试的测试环境举例,
被测模块 B
驱动模块
(模拟模块 A)
桩模块 (测试存根 )
(模拟模块 E)
测试用例 测试结果许多模块不能用简单的软件进行充分的单元测试,此时,完全的测试可放到集成测试阶段再进行,
4.5.2 集成测试 (组装测试 )
集成测试需考虑的问题,
数据穿越接口可能丢失,
一模块可能破坏另一模块功能,
子功能组装可能未产生所要求的主功能,
全程数据结构可能出问题,
误差累积问题,
集成测试方法通常采用黑盒测试技术实施策略,
非渐增式测试
渐增式测试深度优先广度优先自顶向下结合自底向上结合一,非渐增式集成方式一次就把所有通过了单元测试的模块组合在一起进行全程序的测试,
缺点,发现错误难以诊断定位,
又称,莽撞测试,,
二,渐增式集成方式从一个模块开始,测一次添加一个模块,边组装边测试,以发现与接口相联系的问题 。
自顶向下结合方式举例,
A
DB
E
模块测试结合顺序
C
F
深度优先,A,B,E,C,D,F
广度优先,A,B,C,D,E,F
自顶向下结合方式举例,(深度优先 )
A
测试 A
S2S1 S3
A
加入 B
S2B S3
S4
A
加入 E
S2B S3
E
A
加入 C
CB S3
E
加入 D
CB D
E
加入 F
CB D
E
A A
FS5
自底向上结合方式举例,
A
CB D
FE
E
d1
C
d3
F
d4
B
d2
E
D
d5
F
自底向上结合方式举例,
Mc
D1
Ma Mb
D2 D3
簇 1
簇 2
簇 3
1,自顶向下 2,自底向上优点 可在测试早期 设计测试用例容易实现并验证系统主要功能不需驱动模块 不需桩模块缺点 需桩模块 只有到最后程序才能作为一个整体
3,混合集成测试方法
一般对软件结构的上层使用自顶向下结合的方法 ;
对下层使用自底向上结合的方法 ;
α 测试 (Alpha)
在开发者的场所由用户进行,在开发着关注和控制的环境下进行,
β 测试 (Beta)
最终用户在自己的场所进行,
4.5.3 确认测试 (有效性测试 )
(验收测试 )
4.5.4 系统测试软件只是计算机系统的一个元素,软件最终要与其他系统元素(如新硬件、信息等 )相结合,
进行各种集成测试和确认测试,
第五章 软件维护与软件再工程四类维护活动:
改正性维护
适应性维护
扩充与完善性维护(改进性)
预防性维护三类维护所占比例,
其它维护
5 %
适应性维 护
25%
改正性维 护
20%
扩充与完善性维护
50%
改正性维护占全部维护量的比率已从 80年代初的 20%大幅度下降,90年代初一些公司的产品差错率已接近于零软件再工程 (Software Reengineering)
是一类软件工程活动,是一个工程过程,
它将 逆向工程,重构 和 正向工程 组合起来,
将现存系统重新构造为新的形式。
再工程的基础是系统理解,包括对运行系统、源代码、设计、分析、文档等的全面理解。
它能够使我们:
增进对软件的理解;
提高软件自身的可维护性、复用性或演化性,
软件再工程技术再工程课题 相关技术重构文档重写、加注释、更新文档复用工程重新划分模块数据再工程业务过程再工程可维护性分析、业务量分析、经济分析理解软件改进软件获取、保存及扩充软件的知识分解逆向工程,恢复设计对象恢复程序理解知识库及变换浏览分析、度量逆向工程,恢复设计第六章 软件开发模型软件开发模型是软件开发全部过程、
活动和任务的结构框架。
它能直观表达软件开发全过程,明确规定要完成的主要活动、任务和开发策略。
软件开发模型也常称为:
软件过程模型软件生存期模型软件工程范型瀑布模型 (线形顺序模型 )
可行性研究与计划需求分析设计编 码运行维护测试定义阶段开发阶段维护阶段按照传统瀑布模型开发软件的特点
1.阶段间具有顺序性和依赖性。
2.推迟实现的观点。
3.每个阶段必须完成规定的文档 ;
每个阶段结束前完成文档审查,
及早改正错误。
原型模型 (快速成型模型)
建造 /修改原型用户测试运行原型听取用户意见原型范型采用原型模型的软件生存周期分析定义系统需求生成原型系统设计程序设计编码测试运 行和维护原型化含原型化的软件生存期螺旋模型 风险分析工程实施用户通信用户评估构造与发布计划产品维护项目产品增强项目新产品开发项目概念开发项目构件组装模型使用重用技术的软件工程模型
构件 (components):可重用的软件成份
可复用性 ( Reusability)
(可重用性)
可重用部件组装模型系统 A的软件构成系统 C的软件构成系统 B的软件构成可重用部 件可重用部 件软件生产线应用构件提取车间应用构件库构件生产车间构件库 组装车间领域
1
领域
2 应用系统
...
1
2
3
4
1基础构件,2功能构件3
接口构件,4用户界面构件小结
基本概念:软件工程、耦合、内聚、面向对象,对象、类、继承、封装、聚合、消息传递、多态性、
桩、构件,测试 (Alpha),β 测试 (Beta)
要点:
– 理解软件生存模型,各阶段任务、成果
– 理解软件设计原则
– 分析模型、设计模型
– 理解面向对象的主要特征
– 了解软件开发模型及特点
– 了解 UML有哪几种图,有何用?
– 掌握黑箱测试、白箱测试方法
– 了解维护类型