黑盒测试方法论-等价类
📅 2026/8/2 6:13:08
👁️ 阅读次数
📝 编程学习
文章目录
- 一. 什么是等价类
- 二. 等价类的分类
- 三. 等价类的使用场景
- 四. 等价类划分原则
- 五. 等价类设计步骤
- 六. 实战示例:两位整数加法计算器
- 1. 需求分析
- 2. 等价类划分表
- 3. 测试用例设计
- 3.1 用例结构
- 3.2 多元素输入的注意事项
- 3.3 测试用例成品示例
- 3.4 简单的测试用例示例
- 七. 输入域等价类划分思路总结
- 八. 优缺点分析
一. 什么是等价类
等价类划分法是黑盒测试中最经典、最广泛使用的设计方法之一。它不关注程序的内部代码结构,而是完全基于输入规格说明来设计测试用例。
- 其核心思想是:将所有可能的输入数据划分为若干个互不重叠的子集(即"等价类"),然后从每个子集中选取少量具有代表性的数据作为测试用例。由于同一等价类中的数据对程序的处理逻辑是"等价"的,因此只需测试其中一个代表值,即可覆盖整个子集的测试效果。
一句话概括:等价类划分法 = 合理分类 + 代表值选取,用有限的用例覆盖无限的输入空间。
二. 等价类的分类
| 符合需求文档规定的、合理的输入数据集合 | 验证程序在正常输入下能否正确运行 | |
| 不符合需求文档规定的、不合理的输入数据集合 | 验证程序对异常输入的容错与提示能力 |
三. 等价类的使用场景
在测试资源(时间、人力)有限的情况下,等价类划分法能够以少量有代表性的数据获得较高的测试覆盖率,尤其适用于:
- 输入域范围大、数据量多的场景
- 需要快速建立基础测试用例集的项目初期
- 作为其他测试方法(如边界值分析)的前置步骤
四. 等价类划分原则
| 序号 | ||
|---|---|---|
| 1 | 规定了输入的取值范围或个数 | 1 个有效 + 2 个无效(超出上界 / 低于下界) |
| 2 | 规定了输入必须遵循的集合或规则 | 1 个有效 + 1 个无效 |
| 3 | 输入条件为布尔值 | 1 个有效(True)+ 1 个无效(False) |
| 4 | 输入为一组数据,且每个值做不同处理 | 若干个有效 + 1 个无效 |
| 5 | 输入条件规定了必须遵循的某些规则 | 1 个有效 + 若干个无效(每条规则对应一个无效) |
| 6 | 某些输入条件不存在无效情况 | 仅划分有效等价类即可 |
五. 等价类设计步骤
Step 1 ➜ 划分等价类:穷举所有可能的输入分类 Step 2 ➜ 确定有效等价类:依据需求文档中的合法条件 Step 3 ➜ 确定无效等价类:取条件的反面 + 特殊异常情况 Step 4 ➜ 选取测试数据:从每个等价类中挑选代表性数据 Step 5 ➜ 编写测试用例:组合数据,明确预期结果六. 实战示例:两位整数加法计算器
1. 需求分析
计算器要求输入两位整数(即 -99 ~ 99),对两个输入框的数值进行加法运算。如果要一个一个测试,那数据量得非常大,这样效率太低了。那为了解决这个问题,可以采用等价类划分的方法。
2. 等价类划分表
确定这个输入框的所有可能的输入集合,在这里就应该是键盘上所有可能的输入。
把键盘上所有的输入分成若干子集:
在确立了等价类之后,可按下表的形式列出所有划分出的等价类表
| 超出范围的整数(如 120、-111) | ||
| 小数(如 30.12) | ||
| 字母(如 ab) | ||
| 汉字(如 十二) | ||
| 特殊字符(如 $ %) | ||
| 空输入 |
3. 测试用例设计
3.1 用例结构
| 用例编号 | 唯一标识,便于追踪与管理 |
| 所属等价类 | 标注该用例覆盖的有效/无效等价类 |
| 输入框 1 数据 | 第一个操作数的测试值 |
| 输入框 2 数据 | 第二个操作数的测试值 |
| 预期结果 | 系统应返回的正确输出或提示信息 |
3.2 多元素输入的注意事项
用例的最终计算结果依赖于两个输入框的值,属于多元素协同输入的场景。在设计用例时,必须遵循以下原则:
单一变量原则:当某条用例用于覆盖某个元素的无效等价类时,用例中涉及的其余元素必须保持有效。
示例
- 若要验证输入框 1 的无效输入 → 输入框 2 填入合法值,且按钮操作正常。
- 若要验证输入框 2 的无效输入 → 输入框 1 填入合法值,且按钮操作正常。
为什么这样做?
- 如果一条用例中同时存在多个无效输入,当系统报错时,测试人员将无法判断错误究竟由哪个输入引起。保持"一次只引入一个变量",可以精准定位缺陷来源,提高测试效率与缺陷报告的可追溯性。
| 要点 | 内容 |
|---|---|
| 用例粒度 | 初期保持精简,聚焦核心字段 |
| 覆盖策略 | 有效用例验证功能正确性,无效用例验证容错能力 |
| 关键原则 | 覆盖无效等价类时,其余元素一律保持有效(单一变量) |
| 目的 | 确保每条用例的错误归因清晰、可定位 |
3.3 测试用例成品示例
| 用例编号 | 所属等价类 | 输入框 1 | 输入框 2 | 预期结果 |
|---|---|---|---|---|
| 1 | 有效 | 50 | 40 | 90 |
| 2 | 输入框 1 无效 | 120 | 30 | 错误提示 |
| 3 | 输入框 1 无效 | -111 | 30 | 错误提示 |
| 4 | 输入框 1 无效 | 30.12 | 20 | 错误提示 |
| 5 | 输入框 1 无效 | ab | 10 | 错误提示 |
| 6 | 输入框 1 无效 | 十二 | 39 | 错误提示 |
| 7 | 输入框 1 无效 | $ % | 87 | 错误提示 |
| 8 | 输入框 1 无效 | 空 | 91 | 错误提示 |
| 9 | 输入框 2 无效 | 35 | 120 | 错误提示 |
| 10 | 输入框 2 无效 | 59 | -123 | 错误提示 |
| 11 | 输入框 2 无效 | 24 | 30.12 | 错误提示 |
| 12 | 输入框 2 无效 | 12 | ab | 错误提示 |
| 13 | 输入框 2 无效 | 76 | 十二 | 错误提示 |
| 14 | 输入框 2 无效 | 83 | $ % | 错误提示 |
| 15 | 输入框 2 无效 | 95 | 空 | 错误提示 |
3.4 简单的测试用例示例
七. 输入域等价类划分思路总结
在设计等价类时,可从以下 6 个维度 全面审视输入域:
| 维度 | 关注点 |
|---|---|
| ① 长度 | 最大/最小长度、超长/过短 |
| ② 类型 | 数字、字母、汉字、特殊字符等 |
| ③ 组成规则 | 格式约束(如手机号、邮箱格式) |
| ④ 是否为空 | 必填项留空 |
| ⑤ 是否重复 | 重复提交、重复数据 |
| ⑥ 是否去除空格 | 前后空格、中间空格的处理 |
八. 优缺点分析
| 说明 | |
|---|---|
| ✅ 优点 | 思路清晰、易于理解;覆盖了单个输入域所有可能的取值情况;避免了盲目或随机选取数据导致的测试不完整 |
| ❌ 缺点 | 产生的用例数量较多;未对边界值/特殊点做针对性考虑;可能产生冗余或无效的测试用例 |
| 💡 建议 | 实际工作中应结合边界值分析法、判定表、场景法等方法进行补充,形成完整的测试用例集 |
编程学习
技术分享
实战经验