【软件工程】软件测试:黑盒测试(等价类/边界值/因果图)
考点频率:★★★★★(选择题必考,下午案例题高频)
难度:⭐⭐⭐
建议:重点掌握等价类划分和边界值分析的具体操作步骤,因果图法以理解概念为主
1️⃣ 什么是黑盒测试?
黑盒测试,又称功能测试或数据驱动测试,把程序看作一个不透明的“黑盒子”,测试人员不关心程序内部结构和代码逻辑,只根据需求规格说明书来检查程序是否按预期工作,输入数据后能否得到正确的输出结果。
类比:你买了一台自动售货机,你不需要知道它内部电路板上的芯片型号、控制程序怎么写的——你只需要按下“可乐”按钮,它出来一瓶可乐,这就是功能正确。
适用阶段:系统测试、验收测试(站在用户角度验证功能)。
2️⃣ 等价类划分法
2.1 核心思想
把输入数据划分成若干个等价类,从每个等价类中选取一个代表性数据作为测试用例。如果该数据能通过测试,则认为该类中的其他数据也能通过——因为它们在功能上等价。
为什么有效:对于同一类输入,程序的执行路径是相同的。只要测一类中的一个,就不需要测所有值,大大减少测试用例数。
2.2 等价类的分类
| 类型 | 定义 | 示例(输入条件:年龄 1~120) |
|---|---|---|
| 有效等价类 | 符合需求规格、应该被接受的输入 | 18、65、120(合理年龄) |
| 无效等价类 | 不符合需求规格、应该被拒绝的输入 | 0、-5、150(超出范围) |
2.3 划分步骤
| 步骤 | 操作 |
|---|---|
| 第1步 | 确定输入条件(需求中的每一个输入字段) |
| 第2步 | 为每个输入条件划分有效等价类和无效等价类 |
| 第3步 | 为每个等价类编号 |
| 第4步 | 从每个等价类中选取一个代表性数据,设计测试用例 |
划分规则:
- 输入条件规定了取值范围(如 1~100)→ 1个有效等价类(1~100)+ 2个无效等价类(<1、>100)
- 输入条件规定了值的集合(如 {红, 黄, 蓝})→ 1个有效等价类(任意一个)+ 1个无效等价类(集合外的值)
- 输入条件规定了布尔值(如是否同意协议)→ 1个有效等价类(true)+ 1个无效等价类(false)
2.4 示例
某系统要求“用户名长度为 3~10 个字符”:
| 等价类 | 类型 | 测试数据 |
|---|---|---|
| 3~10 个字符 | 有效 | “abc”(3个) |
| 小于3个字符(如1个) | 无效 | “a” |
| 大于10个字符(如11个) | 无效 | “abcdefghijk” |
| 空字符串 | 无效 | “” |
每个测试用例一次只能覆盖一个无效等价类,不能在一个用例中同时包含多个无效输入(否则无法确定是哪个输入导致程序拒绝)。
3️⃣ 边界值分析法
3.1 核心思想
边界是错误最容易发生的地方。程序在处理边界值(如循环边界、数组边界、数值范围边界)时,代码往往写得不严谨,容易产生Bug。边界值分析法就是专门去测试这些边界附近的值。
常见边界:
- 输入范围的最小值/最大值
- 数组的第一个/最后一个元素
- 循环的第一次/最后一次迭代
3.2 基本原则
对于取值范围为[min, max]的输入,需要测试的边界值包括:
| 类型 | 测试值 |
|---|---|
| 略小于最小值 | min - 1 |
| 最小值 | min |
| 略大于最小值 | min + 1 |
| 正常值 | (min + max) / 2 |
| 略小于最大值 | max - 1 |
| 最大值 | max |
| 略大于最大值 | max + 1 |
3.3 示例
输入条件:年龄 1~120
| 测试值 | 说明 | 预期结果 |
|---|---|---|
| 0 | 略小于最小值 | 拒绝 |
| 1 | 最小值 | 接受 |
| 2 | 略大于最小值 | 接受 |
| 60 | 正常值 | 接受 |
| 119 | 略小于最大值 | 接受 |
| 120 | 最大值 | 接受 |
| 121 | 略大于最大值 | 拒绝 |
记忆技巧:“上点、内点、离点”——上点是边界值本身(1和120),内点是范围内的任意值(60),离点是边界外紧挨的值(0和121)。
3.4 等价类 vs 边界值
| 对比项 | 等价类划分 | 边界值分析 |
|---|---|---|
| 关注点 | 输入数据的分类 | 输入数据的边界 |
| 测试值 | 每个类中选1个代表性值 | 边界附近的所有值 |
| 目标 | 减少测试用例数 | 发现边界处缺陷 |
两者通常结合使用:先用等价类划分选出代表性测试点,再对边界值进行补充测试,通常被称为“等价类+边界值”组合测试法。
4️⃣ 因果图法
4.1 核心思想
因果图法是一种用于测试多个输入条件组合的测试方法。当多个输入条件之间存在逻辑关系(如“如果A且B,则输出X;如果A或B,则输出Y”),仅靠等价类和边界值无法覆盖所有组合,需要用因果图来分析。
核心步骤:
| 步骤 | 操作 |
|---|---|
| 第1步 | 分析需求,列出所有输入条件(原因)和输出结果(结果) |
| 第2步 | 分析输入条件之间的关系(与、或、非)和约束 |
| 第3步 | 画出因果图 |
| 第4步 | 将因果图转化为判定表 |
| 第5步 | 根据判定表设计测试用例 |
4.2 因果图中的基本符号
| 符号 | 名称 | 含义 |
|---|---|---|
| 恒等 | c → e | 原因成立 → 结果成立 |
| 非 | c NOT e | 原因成立 → 结果不成立 |
| 与(AND) | c1 AND c2 → e | 两个原因都成立 → 结果成立 |
| 或(OR) | c1 OR c2 → e | 至少一个原因成立 → 结果成立 |
4.3 判定表(决策表)
判定表是因果图的输出,用于系统地列出所有条件组合及其对应的结果。
| 条件1 | 条件2 | 条件3 | 动作 |
|---|---|---|---|
| T | T | T | 结果A |
| T | T | F | 结果B |
| T | F | T | 结果A |
| … | … | … | … |
因果图法更侧重于需求分析阶段,用于梳理复杂的逻辑关系。软考中更常考的是因果图转判定表以及判定表的化简。
5️⃣ 三种黑盒测试方法对比
| 对比项 | 等价类划分 | 边界值分析 | 因果图法 |
|---|---|---|---|
| 关注点 | 输入数据的分类 | 输入数据的边界 | 输入条件的逻辑关系 |
| 适合场景 | 输入范围广泛、类型多样 | 输入有明确范围限制 | 多个输入条件相互依赖 |
| 测试用例数量 | 少(每类1个) | 中等(边界附近多个) | 多(组合数增长) |
| 能否单独使用 | ✅ 可以 | ✅ 通常与等价类结合 | ⚠️ 通常需要配合判定表 |
6️⃣ 经典例题
例题1:某系统要求用户年龄输入范围为 18~65 岁。根据边界值分析法,以下测试数据中,不需要测试的是( )。
A. 17
B. 18
C. 19
D. 66
解析:边界值测试应覆盖:min-1(17)、min(18)、min+1(19)、normal(如40)、max-1(64)、max(65)、max+1(66)。66在范围内?66 > 65,属于max+1,需要测试。实际上需要测试的是17、18、19、64、65、66。题干问“不需要测试的是”——选项D是66,需要测试;A是17,需要测试;B是18,需要测试。C是19,也属于边界附近需要测试。嗯,这道题可能不严谨。换个方式:如果题目问“应该优先测试哪些值”,答案是17、18、19、64、65、66。选C是边界值?不对。重新出题:
更典型的题:某系统输入条件为“1 ≤ X ≤ 100”,下列哪组数据是边界值测试应选的?
A. 0, 1, 2, 99, 100, 101
B. 1, 50, 100
C. 0, 50, 101
D. 1, 2, 99, 100
解析:边界值应选 min-1、min、min+1、max-1、max、max+1。对应 0、1、2、99、100、101。选A。
例题2:以下关于黑盒测试的叙述中,正确的是( )。
A. 黑盒测试需要了解程序的内部代码结构
B. 等价类划分法将输入数据划分为有效类和无效类
C. 边界值分析法只测试输入范围的最小值
D. 因果图法不需要考虑输入条件之间的关系
解析:A错误——黑盒测试不关注内部代码;C错误——边界值需测试边界附近多个值;D错误——因果图法正是关注输入条件之间的逻辑关系。B正确。选B。
7️⃣ 记忆口诀
黑盒测试看功能,等价边界因果图。
等价划分有效无,边界测试七点值。
因果分析看组合,画出因果转判定。
8️⃣ 小测验(评论区对答案)
某系统要求“密码长度必须为 6~12 个字符”。下列测试数据中,最符合边界值分析法要求的是( )。
A. “12345”, “123456”, “1234567”, “123456789012”, “1234567890123”
B. “123456”, “123456789012”
C. “12345”, “123456”
D. “123”, “123456”, “123456789012”, “1234567890123”
🔔本专栏日更,点击头像 → 专栏《软考中级高频考点》订阅,第一时间接收新内容
#软考中级 #软件设计师 #黑盒测试 #等价类 #边界值 #因果图 #软件工程
