3. 等价类划分与边界结合:协作关系
3.1 概念解释
等价类划分法 和 边界值分析法 是黑盒测试中最基础、最常用的两种设计技术。前者擅长将无限的输入空间压缩为有限的等价类集合,后者则聚焦于等价类边缘的敏感区域。两者并非替代关系,而是互补协作——等价类划分负责“划分领地”,边界值分析负责“守卫边界”。
核心协作模型:
等价类划分决定“测哪些区域”,边界值分析决定“在区域边界上怎么测”。先划类,后取边,缺一不可。
| 维度 | 等价类划分法 | 边界值分析法 |
|---|---|---|
| 关注点 | 输入数据的类别(有效/无效) | 类别边界上的具体数值 |
| 覆盖粒度 | 每个等价类至少覆盖一次 | 边界及其邻域内精确取值 |
| 缺陷发现能力 | 类间逻辑错误、拒绝/接受误判 | 边界偏移、比较符号错误、 临界值处理遗漏 |
| 用例数量 | 较少(每个类 1 条) | 较多(每个边界 2~3 条) |
| 协作角色 | 划定测试范围 | 精准探测边界缺陷 |
3.2 协作关系原理
两种方法在测试设计流程中形成明确的 前后衔接 关系:
- 先划分等价类:根据需求规格,将输入域划分为若干有效等价类和无效等价类。
- 再提取边界:从每个等价类中找出其边界值(最大值、最小值、临界点)。
- 联合生成用例:为每个边界值设计测试用例,同时保留每个等价类的典型中间值作为补充。
经验法则:
在实际项目中,约 70% 的缺陷集中在等价类边界附近。仅做等价类划分而不做边界值分析,会遗漏大量“差一位”的缺陷;仅做边界值分析而不做等价类划分,则容易陷入局部数值而漏掉大类逻辑错误。
3.3 类比:小区快递柜取件
把测试输入域想象成一个 小区快递柜:
- 等价类划分 相当于按楼层分组:1 层住户、2 层住户……各为一个等价类。每个楼层内任何一户的取件流程高度相似,只需测试一户代表即可。
- 边界值分析 相当于重点检查每层楼的 第一个和最后一个柜门(比如 101 室、199 室),因为柜门编号最容易贴错、系统最容易在边界处配置遗漏。
- 只按楼层测试(等价类)可能漏掉“101 室柜门打不开”的缺陷;只检查边界柜门(边界值)则可能忽略“整个 3 层系统都没录入”的大类错误。
两者协作,既确保大类正确,又守住边界不出偏差。
3.4 协作关系图解
3.5 常见误区
| 误区 | 错误理解 | 正确做法 |
|---|---|---|
| 替代论 | “边界值分析能覆盖等价类,不需要单独划分” | 边界值只覆盖边缘,无法发现类内部逻辑缺失;必须先用等价类划定范围。 |
| 合并论 | “把两种方法强行合并为一种步骤” | 保持先后分工:先划分,后取边界,用例分开设计再合并。 |
| 边界遗漏 | “只测试每个等价类的中间值就够了” | 中间值只能代表类内典型情况,边界值必须独立补充测试。 |
| 无效类忽视 | “无效等价类不需要做边界值分析” | 无效类的边界同样容易出错(如输入 -1、0、最大+1 等),必须同等对待。 |
典型错误案例:
某电商系统促销活动要求“满 200 减 30”。测试人员仅用等价类划分选取了 150 元、250 元、350 元三个值,没有对边界 199、200、201 做边界值分析,导致线上“满 199.9 元未触发优惠”的缺陷漏测,造成资损。
3.6 练习题
题目: 一个登录模块对密码长度要求为 8~20 个字符(包含 8 和 20)。请按等价类划分 + 边界值分析的协作方法,列出完整的测试用例设计思路。
- 步骤一:等价类划分
- 有效等价类:8 ≤ 长度 ≤ 20
- 无效等价类:长度 < 8,长度 > 20
- 步骤二:边界值提取
- 有效边界:长度 = 8(最小值),长度 = 20(最大值)
- 无效边界:长度 = 7(小于最小值),长度 = 21(大于最大值)
- 补充边界邻域:长度 = 9(最小值+1),长度 = 19(最大值-1)
- 步骤三:联合生成用例
| 用例编号 | 密码长度 | 所属类别 | 预期结果 |
|---|---|---|---|
| TC-01 | 7 | 无效边界(下邻域) | 拒绝 |
| TC-02 | 8 | 有效边界(最小值) | 接受 |
| TC-03 | 9 | 有效边界内(min+1) | 接受 |
| TC-04 | 19 | 有效边界内(max-1) | 接受 |
| TC-05 | 20 | 有效边界(最大值) | 接受 |
| TC-06 | 21 | 无效边界(上邻域) | 拒绝 |
| TC-07 | 12 | 有效等价类中间值 | 接受 |
协作效果:
TC-07 来自等价类中间值(覆盖大类),TC-01~TC-06 来自边界值分析(覆盖边界)。两者合并共 7 条用例,即可同时捕获“大类逻辑错误”和“边界偏移缺陷”。
3.7 应用边界
等价类划分与边界值分析协作方法并非万能,在实际项目中有明确的应用边界:
- 适用场景:输入数据有明确的数值范围、枚举集合、字符串长度约束或有序序列;需求规格中包含“最小值/最大值/上限/下限”等边界关键词。
- 不适用场景:输入为无结构自由文本、图像/音频等非数值数据、或需求边界模糊未定义时,该方法效果有限,需结合场景法或随机测试。
- 协作局限:该方法无法发现“业务逻辑链式传递错误”(如 A 条件影响 B 结果但 B 又反馈给 A 的环路缺陷),此时需要引入判定表或因果图。
- 组合爆炸提示:当存在多个输入参数时,对每个参数独立做等价类+边界值,用例数会快速膨胀。此时应先用等价类划分做参数筛选(只保留关键参数),再对筛选后的参数做边界值分析。
// 伪代码:协作策略选择逻辑
if 输入域有明确边界:
使用 等价类划分 + 边界值分析
elif 输入依赖多条件组合:
使用 判定表 或 因果图
elif 输入为连续流/时间序列:
使用 场景法 + 正交实验
else:
使用 探索性测试 补充
工程建议:
在测试计划中为每个功能模块标注“是否启用边界协作分析”。对于金融、医疗、航天等高可靠性领域,强制要求等价类划分与边界值分析联合覆盖率达到 100%;对于内部工具或低风险页面,可放宽为仅做等价类划分,但需在报告中注明。