第2章 黑盒测试方法

方法 核心思想 重点检查 适用场景 示例 等价类划分法 将输入划分为有效类和无效类 数据类别 输入范围较大 年龄1~100,选1、50、100测试 边界值分析法 测试边界附近的数据 临界点错误 范围输入 年龄1~100,测0、1、2、99、100、101 因果图法 分析输入条件组合关系 条件组合 复杂业务规则 用户名正确且密码正确才能登录 场景法 按业务流程设计测试 操作流程 系统功能测试 登录→借书→还书
| 元素 | 图形 | 含义 |
|---|---|---|
| 状态(State) | 圆圈 | 系统当前所处的状态 |
| 迁移(Transition) | 箭头 | 状态之间的转换 |
| 触发条件(Event) | 箭头上的文字 | 引起状态变化的事件 |
| 动作(Action) | 可附加在迁移上 | 状态转换时执行的操作 |
| 方法 | 关注点 | 特点 |
|---|---|---|
| 等价类划分 | 输入分类 | 减少测试用例 |
| 边界值分析 | 边界数据 | 找临界点错误 |
| 因果图法 | 条件组合 | 逻辑关系测试 |
| 判定表法 | 多条件决策 | 规则测试 |
| 场景法 | 业务流程 | 用户操作路径 |
| 状态迁移图法 | 状态转换 | 状态变化正确性 |
边界值分析法设计的测试用例发现程序错误的能力最强。
正交实验设计法(Orthogonal Experimental Design)是一种利用正交表,从大量组合中选择具有代表性的测试用例的方法。
它的目标是:
- 减少测试用例数量
- 覆盖尽可能多的因素组合
- 提高测试效率
名称 含义 因子(Factor) 影响结果的条件 水平(Level) 因子的取值 正交表 用于安排测试组合的表格
选项 分析 对错 A 正交实验设计法用于多因素、多水平测试 ✔ B 软件复杂、组合爆炸时适合使用正交实验法 ✔ C 每个因子及状态作用相同 ✘ D 正交表具有均匀分散、整齐可比特点 ✔
等价类划分法要求同时考虑:
- 有效等价类(符合需求的数据)
- 无效等价类(不符合需求的数据)
如果只测试有效等价类,很多异常情况和错误处理逻辑无法验证,因此 B 错误。
无效等价类
编号 范围 E2 小于18 E3 大于60 E4 非数字
决策表(Decision Table)通常由四部分组成:
组成部分 含义 条件桩(Condition Stub) 列出所有条件 条件项(Condition Entry) 各条件的具体取值 动作桩(Action Stub) 列出所有可能执行的动作 动作项(Action Entry) 在特定条件下应执行的动作
名称 作用 相当于 条件桩 条件名称 表头 条件项 条件取值 Y/N、T/F 动作桩 动作名称 表头 动作项 执行动作标记 X、√
第一步:找条件和动作
条件
C1:图书有库存?
C2:未超过借阅上限?
动作
A1:允许借书
A2:拒绝借书
条件桩 规则1 规则2 规则3 规则4 图书有库存(C1) Y Y N N 未超借阅上限(C2) Y N Y N 动作桩 允许借书(A1) X 拒绝借书(A2) X X X
用例 库存 超限 预期结果 TC1 有 否 借书成功 TC2 有 是 借书失败 TC3 无 否 借书失败 TC4 无 是 借书失败 与因果图法的关系
考试中经常出现:
因果图 → 决策表 → 测试用例流程:
原因(条件) ↓ 因果图 ↓ 决策表 ↓ 测试用例例如登录功能:
条件:
- 用户名正确
- 密码正确
- 验证码正确
动作:
- 登录成功
- 登录失败
3个条件共有:
23=82^3=823=8
种组合,可以先画因果图,再转成决策表,最后生成 8 个测试用例。
关系 符号 含义 恒等(Identity) I 原因为真,结果为真 非(NOT) NOT 原因为真,结果为假 或(OR) OR 多个原因满足一个即可 与(AND) AND 多个原因同时满足
约束 含义 唯一(E,Exclusive) 多个原因中最多一个成立 要求(R,Requires) 一个条件成立,另一个必须成立 包含(I,Inclusive) 至少一个成立 屏蔽(M,Mask) 一个条件成立时屏蔽另一个条件
符号 名称 含义 椭圆 开始/结束框(Terminal) 表示流程开始或结束 长方形 处理框(Process) 表示处理、执行操作 菱形 判断框(Decision) 表示条件判断 平行四边形 输入/输出框(Input/Output) 表示数据输入或输出 箭头 流向线 表示执行顺序






50、对于一个含有n个变量的程序, 采用基本边界值分析法测试程序会产生个测试用例。
2分
隐藏答案
参考答案: 4n+1
【答案解析】对于一个含有n个变量的程序,保留其中一个变量,让其余的变量取正常值,被保留的变量依次取min、min+、nom、max-、max值,对每个变量都重复进行。这样,对于一个有n个变量的程序,边界值分析测试程序会产生4n+1个测试。
白盒测试方法
| 覆盖类型 | 覆盖对象 | 要求 | 强度 |
|---|---|---|---|
| 语句覆盖 | 每条可执行语句 | 至少执行一次 | 最弱 |
| 判定覆盖(决策覆盖) | 每个判断结果 | True / False 各一次 | 较低 |
| 条件覆盖 | 每个原子条件 | True / False 各一次 | 中等 |
| 判定-条件覆盖 | 判定 + 条件同时满足 | 判定结果 + 每个条件真假都覆盖 | 较高 |
| 条件组合覆盖 | 所有条件组合 | 所有真假组合都覆盖 | 最强 |
| 覆盖类型 | 覆盖对象 | 要求 | 强度 | 特点 |
|---|---|---|---|---|
| 条件覆盖 | 每个"原子条件" | 每个条件取到 True/False | 中等 | 只关注条件真假,不保证整体判断结果 |
| 判定覆盖(决策覆盖) | 整个判断语句(if/else) | 每个判定结果至少执行一次 True 和 False | 较低(最常用) | 关注"分支是否走到",不关心内部条件组合 |
| 条件组合覆盖 | 所有条件组合 | 覆盖所有条件真假组合 | 很高 | 用例数量爆炸,最全面但成本高 |
| 路径覆盖 | 所有可能路径 | 覆盖程序所有执行路径 | 最高 | 最彻底,但复杂度极高,实际很难完全实现 |



知识点 内容 测试类型 白盒测试 依据 程序控制结构 工具 控制流图(Control Flow Graph) 节点(Node) 语句或语句块 边(Edge) 控制流转移 区域(Region) 边和节点围成的封闭区域 独立路径 至少包含一条新边的路径 圈复杂度V(G) 独立路径的数量 作用 确定最少测试用例数
判定-条件覆盖
因为它同时要求:
- 每个判定结果(True/False)出现
- 每个条件结果(True/False)出现
覆盖要求比单纯判定覆盖或条件覆盖更严格。
| 覆盖方式 | 强度 |
|---|---|
| 语句覆盖(Statement Coverage) | 最弱 |
| 判定覆盖(Decision Coverage) | ↑ |
| 条件覆盖(Condition Coverage) | ↑ |
| 判定-条件覆盖(Decision/Condition Coverage) | ↑ |
| 条件组合覆盖(Condition Combination Coverage) | 最强 |
相比条件覆盖、判定覆盖,判定-条件覆盖弥补了两者的不足之处,但是由于判定-条件覆盖没有考虑判定语句与条件判断的组合情况,其覆盖范围并没有比条件覆盖更全面
| 覆盖方式 | 要求 |
|---|---|
| 语句覆盖 | 每条语句执行一次 |
| 判定覆盖 | 每个判定结果T/F出现 |
| 条件覆盖 | 每个条件T/F出现 |
| 判定-条件覆盖 | 同时满足判定覆盖和条件覆盖 |
| 条件组合覆盖 | 所有条件组合都出现 |
判定-条件覆盖并不包含条件组合覆盖,因此其覆盖范围不一定比条件覆盖更全面,也不能保证发现所有组合逻辑错误。

前三组结果完全一样!
只有:
A=T
B=T
时才暴露错误。
而判定-条件覆盖允许不测这一组合。
因此:
程序存在错误,但判定-条件覆盖可能发现不了。
条件组合覆盖
↑
判定-条件覆盖
↗ ↖
判定覆盖 条件覆盖
↑
语句覆盖










、常见的目标代码插桩工具有______和DynamoRIO。
隐藏答案
**参考答案:**Pin