第四章 测试工程
软件测试背景
? 软件是人编的 — 所以不完美
? 实例,
1994-1995,迪斯尼的狮子王系统不支持问题
Intel的 pentium处理器
1994年浮点除法缺陷
2000年 8月 28日,1.13MHZ处理器一个可能
导致运行程序被挂起的执行指令问题
1999年 12月 3日,美国航天局火星极地登陆飞
船失踪
1991年爱国者导弹防御系统系统时钟错误积
累造成跟踪系统失去精确度
千年虫,世界各地解决 2000年错误超过数亿美

软件测试背景
?软件产品最大的成本是检测软件
错误, 修正软件错误的成本 。
在整个软件开发中,测试工作量一
般占 30%~ 40%,甚至 ≥50%。 在
人命关天的软件 (如飞机控制, 核
反应堆等 )测试所花费的时间往往
是其它软件工程活动时间之和的
三到五倍 。
软件测试的基本原则
( 1)尽早地、不断地进行软件
测试。
( 2)设计测试用例时,要给出测
试的预期结果。
( 3)开发小组和测试小组分开。
( 4)要设计非法输入的测试用例。
软件测试的基本原则
( 5)在对程序修改之后要进行回
归测试。
( 6)程序中尚未发现的错误的数
量往往与在该段程序中已发现的
错误的数量成正比。
测试观点
?G.J.Myers, 软件测试技巧,
? 测试是为了寻找错误而运行程序
的过程;
? 一个好的测试用例在于能发现至
今未发现的错误;
? 一个成功的测试是发现了至今未
发现的错误的测试。
测试观点
? E.W.Dijkstra
? 测试能证明错误的存在,但不能证明错
误不存在。
? 测试的目的是发现程序中的错误, 是
为了证明程序有错, 而不是证明程序
无错 。
把证明程序无错当作测试目的不仅是
不正确的, 完全做不到的, 而且对做
好测试没有任何益处, 甚至是十分有害的 。
? 能够发现错误的测试是成功的测试,
否则是失败的测试 。
测试观点
?软件测试不等于程序测试
软件测试应贯穿于软件定义与开
发的整个期间;
据美国一家公司统计,查出的软
件错误中,属于 需求分析和软件
设计的错误 约占 64%,属于程序
编写的错误仅占 36%。程序编写
的许多错误是, 先天的, 。
4.1 测试工程概要
? 通过测试工程对软件的测试,验
证软件的有效性,发现并修补软
件系统的缺陷,以提高软件质量,
确保开发出用户满意的软件。
4.1 测试工程概要
? 测试是一个反复的过程
? 面向功能的系统和面向对象的系
统的测试方法是不一样的
4.1 测试工程概要
? 测试工程在软件生命周期过程中
处于下流工程的位置
? 测试工程的主要测试阶段:单元
测试、组合测试、系统测试、运
行测试。
开发工程与测试阶段
需求分析
概要设计
(外部设计 )
详细设计
(内部设计 )
程序设计
运行测试
系统测试
组合测试
单元测试




时间流
程序编制
开发工程与测试阶段
需求分析
概要设计
(外部设计 )
详细设计
(内部设计 )
程序设计
运行测试
系统测试
组合测试
单元测试




时间流
程序编制
对程序的每个模
块进行测试,检
验每个模块是否
完成各自的功能
开发工程与测试阶段
需求分析
概要设计
(外部设计 )
详细设计
(内部设计 )
程序设计
运行测试
系统测试
组合测试
单元测试




时间流
程序编制
把测试过的程序模块
组装起来进行功能测
试,检验设计阶段对
系统的各个功能模块
及接口的设计是否正

开发工程与测试阶段
需求分析
概要设计
(外部设计 )
详细设计
(内部设计 )
程序设计
运行测试
系统测试
组合测试
单元测试




时间流
程序编制
根据软件的需求定义和
设计检验软件的功能和
性能是否满足要求
开发工程与测试阶段
需求分析
概要设计
(外部设计 )
详细设计
(内部设计 )
程序设计
运行测试
系统测试
组合测试
单元测试




时间流
程序编制
把经过系统测试的软件系
统纳入用户的实际运行环
境中,将软件、硬件和实
际使用的数据等其他因素
综合起来进行全系统的运
行检验
4.2 各个测试阶段的作业内容及流程
? 单元测试
前提:已通过编译程序检查并且
改正所有语法错误。
依据:程序设计书
目的:检测确认程序模块的处理
逻辑是否正确,要求的功能是否
实现。
4.2 各个测试阶段的作业内容及流程
? 单元测试作业内容及流程
4.2 各个测试阶段的作业内容及流程
? 从哪几个方面进行单元测试?
( 1)程序的逻辑处理测试
( 2)程序的输入 /输出测试
( 3)边界条件测试
( 4)异常处理测试
4.2 各个测试阶段的作业内容及流程
? 组合测试
目的:将各个程序模块组装起来
进行程序之间的连接测试,确认
系统的各个功能模块及模块之间
的接口是否正确,是否实现详细
设计书的功能要求,详细设计是
否符合业务处理的要求。
注:组合测试不仅找出程序缺陷,
同时还要找出设计缺陷。
4.2 各个测试阶段的作业内容及流程
? 组合测试作业内容及流程
4.2 各个测试阶段的作业内容及流程
? 组合测试验证哪几方面的内容?
( 1)数据的输入、窗体之间的迁
移、表格的打印输出是否正确。
( 2)文件、数据库的处理是否合
理、正确。
( 3)功能模块之间的信息、数据
的传递、通信接口的处理等是否
正确。
4.2 各个测试阶段的作业内容及流程
( 4)功能模块之间接口发生的
异常处理是否正确,如与外部设
备的接口、嵌入软件等的接口发
生异常时的处理。
4.2 各个测试阶段的作业内容及流程
? 系统测试
目的:验证软件系统的功能和性
能及其他特性是否与用户期待的
要求一致。(即验证软件的可靠
性和有效性。)
依据:需求定义和概要设计书
4.2 各个测试阶段的作业内容及流程
系统测试作业内容及流程
4.2 各个测试阶段的作业内容及流程
? 运行测试
(又称应用测试或验收测试)
目的:由用户确定软件系统是否
满足需求定义的要求。
4.2 各个测试阶段的作业内容及流程
? 运行测试的主要作业内容及流程
4.3 测试方法
软件测试的
策略和方法
静态测
试方法
动态测
试方法
人工测试方法
计算机辅助静
态分析方法
白盒测试方法
黑盒测试方法
4.3 测试方法
? 从测试的手段分类,常用的测试
方法有白盒测试和黑盒测试;
? 从测试的推进方法分类,又有自
顶向下测试和自底向上测试。
4.3 测试方法
注:
选用少量最有效的测试数据,达
到尽可能完备的测试效果是设计
测试数据的关键。
4.3.1 白盒测试
? 前提是可以把程序看成装在一个
透明的白盒子里,也就是完全了
解程序的结构和处理过程。这种
方法按照程序内部的逻辑测试程
序,检验程序中的每条通路是否
都能按预定要求正确工作。白盒
测试又称为结构测试。
4.3.1 白盒测试 — 设计测试用例
? 具体实施:
语句覆盖、分支(判定)覆盖、
条件覆盖、判定 /条件覆盖、条件
组合覆盖
4.3.1 白盒测试 — 设计测试用例
1)语句覆盖
使程序中每个语句至少执行一次
4.3.1 白盒测试 — 设计测试用例
入 口
A > 1
A N D B = 0
X = X / A
A = 2
O R X > 1
X = X + 1
出 口
S
1
a
T 4
c
F
2
5
b
T 6
e
7
F
3
d
4.3.1 白盒测试 — 设计测试用例
只需设计一个测试用例,
输入数据,A=2,B=0,
X=4
即达到了语句覆盖 ;
语句覆盖是 最弱 的逻辑
覆盖
4.3.1 白盒测试 — 设计测试用例
入 口
A > 1
A N D B = 0
X = X / A
A = 2
O R X > 1
X = X + 1
出 口
S
1
a
T 4
c
F
2
5
b
T 6
e
7
F
3
d
A=2,B=0,
X=4
4.3.1 白盒测试 — 设计测试用例
(2)判定覆盖 (分支覆盖 )
使每个判定的真假分支都至
少执行一次
4.3.1 白盒测试 — 设计测试用例
入 口
A > 1
A N D B = 0
X = X / A
A = 2
O R X > 1
X = X + 1
出 口
S
1
a
T 4
c
F
2
5
b
T 6
e
7
F
3
d
4.3.1 白盒测试 — 设计测试用例
例,可设计两组测试用例,
? A=3,B=0, X=3 可覆盖 sacbd
? A=2,B=1, X=1 可覆盖 sabed
两组测试用例可覆盖所有判定的
真假分支
判定覆盖仍是 弱 的逻辑覆盖
4.3.1 白盒测试 — 设计测试用例
入 口
A > 1
A N D B = 0
X = X / A
A = 2
O R X > 1
X = X + 1
出 口
S
1
a
T 4
c
F
2
5
b
T 6
e
7
F
3
d
A=3,B=0, X=3 可
覆盖 sacbd
A=2,B=1, X=1 可
覆盖 sabed
4.3.1 白盒测试 — 设计测试用例
(3)条件覆盖
使判定表达式的每个条件都
取到各种可能的结果
4.3.1 白盒测试 — 设计测试用例
入 口
A > 1
A N D B = 0
X = X / A
A = 2
O R X > 1
X = X + 1
出 口
S
1
a
T 4
c
F
2
5
b
T 6
e
7
F
3
d
4.3.1 白盒测试 — 设计测试用例
? 例中有两个判定表达式,每个表
达式有两个条件,为了做到条件
覆盖,应该选取测试数据使得
在 a点有下述结果出现:
A>1,A<=1,B=0,B!=0
在 b点有下述各种结果出现:
A=2,A!=2,X>1,X<=1
4.3.1 白盒测试 — 设计测试用例
只要使用下面两组测试数据就可以
达到上述覆盖标准:
I.A=2,B=0,X=4 覆盖 sacbed
II.A=1,B=1,X=1 覆盖 sabd
4.3.1 白盒测试 — 设计测试用例
入 口
A > 1
A N D B = 0
X = X / A
A = 2
O R X > 1
X = X + 1
出 口
S
1
a
T 4
c
F
2
5
b
T 6
e
7
F
3
d
I.A=2,B=0,X=4 覆
盖 sacbed
II.A=1,B=1,X=1 覆
盖 sabd
4.3.1 白盒测试 — 设计测试用例
? 条件覆盖 通常 比判定覆盖强,因
为这使判定表达式中每个条件都
取到了两个不同结果,判定覆盖
却只关心整个表达式的值。上面
两组测试数据也同时满足判定覆
盖标准。但是,也可能有相反的
情况:虽然每个条件都取到了两
个不同的结果,判定表达式却始
终只取一个值。
4.3.1 白盒测试 — 设计测试用例
? 如:
I.A=2,B=0,X=1 覆盖
sacbed
II.A=1,B=1,X=2 覆盖
sabed
只满足条件覆盖标准,不满足判
定覆盖标准。
所以说条件覆盖与判定覆盖 没有
包含关系
4.3.1 白盒测试 — 设计测试用例
入 口
A > 1
A N D B = 0
X = X / A
A = 2
O R X > 1
X = X + 1
出 口
S
1
a
T 4
c
F
2
5
b
T 6
e
7
F
3
d
I.A=2,B=0,X=1 覆
盖 sacbed
II.A=1,B=1,X=2
覆盖 sabed
4.3.1 白盒测试 — 设计测试用例
( 4)判定 /条件覆盖
选取足够多的测试数据, 使得判
定表达式中的 每个条件 都取到各
种可能的值, 而且 每个判定表达
式 也都取到各种可能的结果 。
4.3.1 白盒测试 — 设计测试用例
入 口
A > 1
A N D B = 0
X = X / A
A = 2
O R X > 1
X = X + 1
出 口
S
1
a
T 4
c
F
2
5
b
T 6
e
7
F
3
d
I.A=2,B=0,X=4 覆
盖 sacbed
II.A=1,B=1,X=1 覆
盖 sabd
4.3.1 白盒测试 — 设计测试用例
(5)条件组合覆盖
所有可能的条件取值组合至
少执行一次
4.3.1 白盒测试 — 设计测试用例
所有可能的条件取值组合
? 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
4.3.1 白盒测试 — 设计测试用例
? 下面的四组测试数据可使上面列出的
八种条件组合每种至少出现一次:
I.A=2,B=0,X=4 针对 1,5两种组合,
覆盖 sacbed
II.A=2,B=1,X=1 针对 2,6两种组合,
覆盖 sabed
III.A=1,B=0,X=2 针对 3,7两种组合,
覆盖 sabed
IV.A=1,B=1,X=1 针对 4,8两种组合,
覆盖 sabd
4.3.1 白盒测试 — 设计测试用例
入 口
A > 1
A N D B = 0
X = X / A
A = 2
O R X > 1
X = X + 1
出 口
S
1
a
T 4
c
F
2
5
b
T 6
e
7
F
3
d
I.A=2,B=0,X=4
针对 1,5两种组合,
覆盖 sacbed
4.3.1 白盒测试 — 设计测试用例
入 口
A > 1
A N D B = 0
X = X / A
A = 2
O R X > 1
X = X + 1
出 口
S
1
a
T 4
c
F
2
5
b
T 6
e
7
F
3
d
II.A=2,B=1,X=1
针对 2,6两种组合,
覆盖 sabed
4.3.1 白盒测试 — 设计测试用例
入 口
A > 1
A N D B = 0
X = X / A
A = 2
O R X > 1
X = X + 1
出 口
S
1
a
T 4
c
F
2
5
b
T 6
e
7
F
3
d
III.A=1,B=0,X=2
针对 3,7两种组合,
覆盖 sabed
4.3.1 白盒测试 — 设计测试用例
入 口
A > 1
A N D B = 0
X = X / A
A = 2
O R X > 1
X = X + 1
出 口
S
1
a
T 4
c
F
2
5
b
T 6
e
7
F
3
d
IV.A=1,B=1,X=1
针对 4,8两种组合,
覆盖 sabd
4.3.1 白盒测试 — 设计测试用例
入 口
A > 1
A N D B = 0
X = X / A
A = 2
O R X > 1
X = X + 1
出 口
S
1
a
T 4
c
F
2
5
b
T 6
e
7
F
3
d
I.A=2,B=0,X=4
针对 1,5两种组合,
覆盖 sacbed
4.3.1 白盒测试 — 设计测试用例
入 口
A > 1
A N D B = 0
X = X / A
A = 2
O R X > 1
X = X + 1
出 口
S
1
a
T 4
c
F
2
5
b
T 6
e
7
F
3
d
I.A=2,B=0,X=4
针对 1,5两种组合,
覆盖 sacbed
4.3.1 白盒测试 — 设计测试用例
? 从对程序路径的覆盖程度分析,
提出下述一些主要的逻辑覆盖标
准:
( 6)点覆盖
程序流程图 ?程序图
4.3.1 白盒测试 — 设计测试用例
S
a
b
d
c
e
1
2
3
4
5
6
7
4.3.1 白盒测试 — 设计测试用例
? 在正常情况下程序图是连通的有
向图,图中每个节点相当于程序
流程图的一个框(一个或多个语
句)。满足点覆盖标准要求选取
足够多的测试数据,使得程序执
行路径至少经过程序图中每个节
点一次。显然,点覆盖标准和语
句覆盖标准是相同的。
4.3.1 白盒测试 — 设计测试用例
( 7)边覆盖
要求选取足够多的测试数据,使
得程序执行路径至少经过程序图
中每条边一次。
通常边覆盖和判定覆盖是一致的。
4.3.1 白盒测试 — 设计测试用例
( 8)路径覆盖
选取足够多测试数据,使程序的每条
可能路径都至少执行一次(如果程序
图中有环,则要求每个环至少经过一
次)。
在例子中,共有四条可能的执行路径,
1-2-3; 1-2-6-7; 1-4-5-3; 1-4-5-6-7。
因此,为了做到路径覆盖必须设计四
组测试数据。
4.3.1 白盒测试 — 设计测试用例
S
a
b
d
c
e
1
2
3
4
5
6
7
1-2-3; 1-2-6-7;
1-4-5-3; 1-4-5-6-
7。