第四章 测试工程
4.3.2 黑盒测试
? 黑箱测试(又称为功能测试)是
把程序或系统看成一个黑盒子,
完全 不考虑 其内部结构和处理过
程。
4.3.2 黑盒测试
? 主要是测试各个程序或功能模块
之间的接口,检查系统功能是否
能按照设计书的规定正常执行,
是否能接收正确的输入数据产生
正确的输出结果。
? 主要适用于系统测试等 后期的 测
试阶段
4.3.2 黑盒测试 -系统模型
输入的测试数

I1
导致反常的输

系统
输出的测试结

O1
暴露缺陷的输

4.3.2 黑盒测试 -主要方法
? 同值分割
同值分割又称为等价划分,它的
含义是针对输入条件,将所有可
能的输入数据( 有效的 和 无效的 )
分为若干等价类,对每一个等价
类只取一组数据作为测试数据,
使得选取的测试数据具有代表性。
4.3.2 黑盒测试 -主要方法
如何划分等价类?
? 有效等价类 (合理等价类 )
? 无效等价类 (不合理等价类 )
4.3.2 黑盒测试 -主要方法
启发式规则,
? 如果规定了输入数据的范围则
可划分一个有效的等价类(输
入数据在次范围),两个无效
的等价类(输入数据小于最小
值或大于最大值);
4.3.2 黑盒测试 -主要方法
例 输入值是学生成绩,范围是 0~ 100
0 100
有效
等价类
1≤ 成绩 ≤ 100
无效等价类
成绩 >100
无效等价类
成绩 <0

4.3.2 黑盒测试 -主要方法
? 如果规定了输入数据的个数,也
可以按以上方法划分出一个有效
的等价类,两个无效的等价类;
4.3.2 黑盒测试 -主要方法
? 如果规定了输入数据的一组值,
且程序对不同输入值做不同处理,
则每个输入值有一个有效的等价
类(允许的输入值)和一个无效
的等价类(任一个不允许的输入
值);
4.3.2 黑盒测试 -主要方法
例:输入条件说明学历可为,专科
,本科, 硕士, 博士 四种之一,
则分别取这四种这四个值作为 四
个有效等价类, 另外把四种学历
之外的任何学历作为无效等价类

4.3.2 黑盒测试 -主要方法
? 如果规定了输入数据必须遵循
的规则,则可以划分出一个有
效的等价类(符合规则)和若
干个无效等价类(从各种不同
角度违反规则);
4.3.2 黑盒测试 -主要方法
? 如果规定了输入数据为整形,则
可以划分出三个有效类(正整数、
零和负整数)和一个无效类(非
整数)
4.3.2 黑盒测试 -主要方法
? 如果程序的处理对象是表格,则
应该使用空表,以及含一项或多
项的表。
4.3.2 黑盒测试 -主要方法
注:
( 1)以上列出的启发式规则只是
测试时可能遇到的情况中的很小
一部分。为了正确划分等价类,
一是要注意积累经验,二是要正
确分析被测程序的功能。
4.3.2 黑盒测试 -主要方法
( 2)在划分无效的等价类时还必
须考虑到编译程序的检错功能,
一般说来,不需要设计测试数据
用来暴露编译程序肯定能发现的
错误。
4.3.2 黑盒测试 -主要方法
( 3)上面列出的启发式规则虽然
都是针对输入数据说的,但是其
中绝大部分也同样适用于输出数
据。
4.3.2 黑盒测试 -主要方法
用等价类划分法设计测试用例步骤
(1)形成等价类表, 每一等价类规定一个唯一
的编号;
(2)设计一测试用例, 使其尽可能多地覆盖尚
未覆盖的有效等价类, 重复这一步骤, 直到
所有有效等价类均被测试用例所覆盖;
(3)设计一新测试用例, 使其只覆盖一个无效
等价类, 重复这一步骤直到所有无效等价类
均被覆盖;
注,应该使每个测试方案只覆盖一个无效的等
价类 。
4.3.2 黑盒测试 -主要方法
例,某报表处理系统要求用户输入处理
报表的日期,日期限制在 2001年 1月至
2005年 12月,即系统只能对该段期间
内的报表进行处理,如日期不在此范
围内,则显示输入错误信息。系统日
期规定由年、月的 6位数字字符组成
前四位代表年,后两位代表月。
如何用等价类划分法设计测试用例,
来测试程序的日期检查功能?
4.3.2 黑盒测试 -主要方法
第一步:等价类划分
输入等价类 有效等价类 无效等价类
报表日期的
类型及长度
6位数字字符 (1)
有非数字字符 (4)
少于 6个数字字符 (5)
多于 6个数字字符 (6)
年份范围 在 2001~ 2005之间 (2) 小于 2001 (7)大于 2005 (8)
月份范围 在 1~ 12之间 (3)
,报表日期”输入条件的等价类表
小于 1 (9)
大于 12 (10)
4.3.2 黑盒测试 -主要方法
第二步
为有效等价类设计测试用例
对表中编号为 1,2,3的 3个有效等价类
用一个测试用例覆盖:
测试数据 期望结果 覆盖范围
200105 等价类 (1)(2)(3)输入有效
4.3.2 黑盒测试 -主要方法
第三步:为每一个无效等价类设至少设计一个
测试用例
测试数据 期望结果 覆盖范围
001MAY 等价类 (4)输入无效
20015 等价类 (5)输入无效
2001005 等价类 (6)输入无效
200005 等价类 (7)输入无效
200805 等价类 (8)输入无效
200100 等价类 (9)输入无效
200113 等价类 (10)输入无效
测试数据不能有
重复
4.3.2 黑盒测试 -主要方法
例,对招干考试系统“输入学生成绩”
子模块设计测试用例
招干考试分三个专业,准考证号第一位
为专业代号,如, 1-行政专业,
2-法律专业,
3-财经专业,
行政专业准考证号码为,110001~ 111215
法律专业准考证号码为,210001~ 212006
财经专业准考证号码为,310001~ 314015
4.3.2 黑盒测试 -主要方法
例,准考证号码的等价类划分
有效等价类,
(1) 110001 ~ 111215
(2) 210001 ~ 212006
(3) 310001 ~ 314015
无效等价类,
(4) - ? ~ 110000
(5) 111216 ~ 210000
(6) 212007 ~ 31000
(7) 314016 ~ + ?
4.3.2 黑盒测试 -主要方法
? 界限分割(边界分析)
选取刚好等于、稍小于和稍大于
等价类边界值的数据作为测试数
据,而不是选取每个等价类内的
典型值或任意值作为测试数据。
注,通常设计测试方案时总是联合
使用等价划分和边界分析两种
技术
输入
条件
报表日
期的类
型及长

1个数字字符
5个数字字符
7个数字字符
有 1个非数字字符
全部是非数字字符
6个数字字符
显示出错
显示出错
显示出错
显示出错
显示出错
输入有效
日期
范围
月份
范围
“报表日期, 边界值分析法测试用例
测试用例说明 测试数据 期望结果 选取理由
5
20015
2001005
2001.5
MAY---
200105
月份为 1月
月份为 12月
月份 <1
月份 >12
200101
200112
200100
200113
200101
200512
200100
200513
输入有效
输入有效
显示出错
显示出错
输入有效
输入有效
显示出错
显示出错
在有效范围
边界上选取
数据
仅有 1个合法字符
比有效长度少 1
比有效长度多 1
只有 1个非法字符
6个非法字符
类型及长度均有效
最小日期
最大日期
刚好小于最小日期
刚好大于最大日期
最小月份
最大月份
刚好小于最小月份
刚好大于最大月份
4.3.2 黑盒测试 -主要方法
? 原因结果标识
主要标识出输入数据(原因)和
输出数据(结果)之间的关系,
调查其有效组合的测试分支。
4.3.2 黑盒测试 -主要方法
? 因果图法 借助图形来设计测试用例,适合于
被测程序具有多种输入条件,程序的输出又
依赖于输入条件的各种组合的情况。
? 利用因果图导出测试用例的步骤:
? 列出原因(输入条件)和结果(输出条件);
? 标识出原因和结果之间的关系(一一对应、
选择关系,并列关系、否定关系),画出
因果图;
? 把因果图转化成判定表;
? 对判定表的每一列写成一个测试用例。
4.3.2 测试方法 —— 黑箱测试
? 因果图法实例
某电力公司有 A,B,C,D四类收费标准,
并规定:
居民用电 <100度 /月 按 A类收费
≥ 100度 /月 按 B类收费
动力用电 <10000度 /月,非高峰,B类收费
≥ 10000度 /月,非高峰,C类收费
<10000度 /月,高峰,C类收费
≥ 10000度 /月,高峰,D类收费
因果图法实例
? 列出原因和结果
原因,1—— 居民用电
2—— 动力用电
3—— <100度 /月 3—— ≥100 度 /月
4—— 非高峰 4—— 高峰
5—— <10000度 /月 5—— ≥10000 度 /

结果,A—— 按 A类收费
B—— 按 B类收费
C—— 按 C类收费
D—— 按 D类收费
~
~
~
? 用因果图表明输入和输出间的逻辑关系
因果图法实例
1 I1
2 B∨

4
A
C3
5

D
I4
I3I2
∨∧ ∧


并列关系
选择关系
否定关系
中间结点
因果图法实例
?把因果图转换为判定表
组合条件
条件
(原因 )
动作
(结果 )
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表示条件成立
或动作出现
0表示条件不成立或
动作不出现
因果图法实例
?把判定表的每一列写成一个测试
用例
1列 居民电,90度 /月 A
2列 居民电,110度 /月 B
3列 动力电,非高峰,8000度 /月 B
4列 动力电,非高峰,1.2万度 /月 C
5列 动力电,高峰,0.9万度 /月 C
6列 动力电,高峰,1.1万度 /月 D
条件 测试用例 预期结果
组合 (输入数据 ) (输出动作 )
因果图法
? 表示约束条件的符号,
? 为了表示原因与原因之间,结果
与结果之间可能存在的约束条件,
在因果图中可以附加一些表示约
束条件的符号。
因果图法
因果图法
? 利用因果图生成测试用例的基本步骤,
? (1) 分析软件规格说明描述中,哪些是
原因 (即输入条件或输入条件的等价
类 ),哪些是结果 (即输出条件 ),并给每
个原因和结果赋予一个标识符,
? (2) 分析软件规格说明描述中的语义,
找出原因与结果之间,原因与原因之
间对应的关系, 根据这些关系,画出因
果图,
因果图法
? (3) 由于语法或环境限制,有些原
因与原因之间,原因与结果之间的
组合情况不不可能出现, 为表明
这些特殊情况,在因果图上用一
些记号表明约束或限制条件,
? (4) 把因果图转换为判定表,
? (5) 把判定表的每一列拿出来作
为依据,设计测试用例,
因果图法实例
? 有一个处理单价为 5角钱的饮料的自
动售货机软件测试用例的设计。其规
格说明如下:
若投入 5角钱或 1元钱的硬币,押下
〖 橙汁 〗 或 〖 啤酒 〗 的按钮,则相应
的饮料就送出来。若售货机没有零钱
找,则一个显示 〖 零钱找完 〗 的红灯
亮,这时再投入 1元硬币并押下按钮
后,饮料不送出来而且 1元硬币也退
出来;若有零钱找,则显示 〖 零钱找
完 〗 的红灯灭,在送出饮料的同时退
还 5角硬币。,
因果图法实例
? (1) 分析这一段说明,列出原因和结果
? 原因,
1,售货机有零钱找
2,投入 1元硬币
3,投入 5角硬币
4,押下橙汁按钮
5,押下啤酒按钮
? 建立中间结点,表示处理中间状态
11,投入 1元硬币且押下饮料按钮
12,押下 〖 橙汁 〗 或 〖 啤酒 〗 的按钮
13,应当找 5角零钱并且售货机有零钱找
14,钱已付清
因果图法实例
? 结果:
21,售货机 〖 零钱找完 〗 灯亮
22,退还 1元硬币
23,退还 5角硬币
24,送出橙汁饮料
25,送出啤酒饮料
因果图法实例
? (2) 画出因果图。所有原因结点
列在左边,所有结果结点列在右
边。
? (3) 由于 2 与 3, 4 与 5 不能同时
发发生,分别加上约束条件 E。
? (4) 因果图
? (5) 转换成判定表
4.3.2 黑盒测试 -主要方法
? 错误推测
基本思想是列举出程序中可能的
错误和容易发生错误的特殊情况,
并且根据它们选择测试方案。 错
误推测方法是 根据经验来设计测
试用例的方法。
例如,数据测试中的 缺省值、空
白、空值、零值、无
4.3.2 黑盒测试方法
?黑盒测试策略
? 首先用 边界值分析法 设计测试用例
? 必要时用 等价分类法 补充测试用例
? 必要时再用 错误推测法 补充测试用

? 如果在程序的说明中含有输入条件
的组合,宜在一开始就采用 因果法,
然后再按上述步骤进行
黑盒测试与白盒测试的比较
测试方法 说明 特点 适用测试时 期
白箱测试
参照程序内部结
构设计各个测试
分支
可以参照程序的
功能、逻辑设计
测试
·测试覆盖率高
·组合各个测试分
支设计程序整体
的测试分支
·单元测试
·组合测试
(组件内的
组合测试)
黑箱测试
不参照程序内部
结构,从设计书、
接口着手设计测
试的输入
适合接口测试
·可以从用户的观
点设计测试流程
·可以发现设计的
不一致性问题
组合测试
(子系统内
的组合测试)
·系统测试
·运行测试
4.3 自顶向下测试和自底向上测试
? 在组合测试中采用 渐增式测试策略,即 从一
个模块开始,测一次添加一个模块,边组装
边测试,以发现与接口相联系的问题。
渐增式
测试
深度优先
广度优先自顶向下结合
自底向上结合
4.3 自顶向下测试和自底向上测试
?整体模块
模块 A
C
E F
H
B
D
G
4.3 自顶向下测试和自底向上测试
?自顶向下测试 的推进方法
模块 A
( B ) ( C )
模块 A
B C
( D ) ( E ) ( F )
模块 A
B C
D E F
( H )( G )
模块 A
B C
D E F
HG
主模块
虚拟模块
4.3 自顶向下测试和自底向上测试
?自顶向下测试 的推进方法
模块测试
结合顺序
深度优先,A,B,E,C,D,F
广度优先,A,B,C,D,E,F
A
DB
E
C
F
4.3 自顶向下测试和自底向上测试
?自底向上测试 的推进方法
测试引导
D
测试引导
G
测试引导
DG
G
B
测试引导
E
测试引导
H
测试引导
测试引导
F
H
C
E F
H
4.3 自顶向下测试和自底向上测试
?自底向上测试 的推进方法
模块 A
C
E F
H
B
D
G
自顶向下测试与自底向上测试方法的比较
组合测试方法 测试推进方法 优点 缺点
自底向上测试
· 要准备替代上
层模块的测试驱
动模块。
能够并行测试作
业,同时对多个
模块进行测试。
· 测试作业较分
散,往往在测试
的后期才能发现
系统的重要缺陷。
自顶向下测试
· 要准备替代下
层模块的测试支
撑模块。
· 能够在早期检
测出接口界面的
错误等重大缺陷 。
· 可对上层模块
进行反复测试,
提高其可靠性。
仅由部分人员担
任测试,测试期
间较长。
测试驱动模块
模块 D
模块 A
测试支撑
模块
自顶向下测试和自底向上测试
? 混合集成测试方法
? 一般对软件结构的上层模块使用自顶向
下推进的方法;
? 对下层模块或关键模块使用自底向上结
合的方法;
? 关键模块是指有输入 /输出功能的模块和
有重要功能或含有新算法的模块 。