等价类划分是一种黑盒测试用例设计方法:把输入或输出条件按“处理逻辑相同、预期结果一致”分成若干集合,每个集合就是一个等价类,再从每个等价类中选取代表性数据构成用例。有效等价类验证合法输入,无效等价类验证异常处理;划分时遵循完备、互斥、可判定三条基本要求,并结合边界值分析补齐临界点。
要点总览(TL;DR)
- 等价类划分是按处理逻辑与预期结果把输入域拆成若干集合,每个集合取一个代表值构成用例,用有限用例覆盖大量输入组合。
- 有效等价类验证合法输入能否被正确处理,无效等价类验证异常输入是否被正确拦截和提示,两类都要覆盖。
- 划分遵循完备性、互斥性、可判定性三条标准;无效等价类一次只取一个值,避免多个错误叠加导致无法定位。
- 等价类划分常与边界值分析配对使用:先划分等价类保证类别覆盖,再对连续区间补充临界点及其两侧取值。
- 划分结果建议用登记表记录类编号、条件描述、代表值、预期结果和对应用例,再录入用例管理工具承接评审与执行。
等价类划分的直接答案
等价类划分(Equivalence Partitioning)指按处理逻辑与预期结果,把被测对象的输入域或输出域拆成若干子集,每个子集内部的数据在程序看来“表现一致”,因此只需从中挑一个代表值参与测试。这里的等价类,指预期表现一致的一组输入数据。这个方法的直接目的,是用有限条用例覆盖近乎无限的输入组合。
划分结果分为两类,验证目标不同:
| 类别 | 含义 | 验证目标 | 典型取值 |
|---|---|---|---|
| 有效等价类 | 符合需求规格、程序应当正常受理的输入集合 | 合法输入能否被正确处理,结果是否符合预期 | 范围内的整数、符合格式的字符串、已定义的枚举项 |
| 无效等价类 | 不符合规格、程序应当拒绝或提示的输入集合 | 异常输入是否被正确拦截、提示是否准确、系统是否保持稳定 | 越界值、格式错误、空值、非法字符、未定义选项 |
两类缺一不可。只测有效等价类,等于只验证“顺利路径”,异常分支的提示文案、错误码、数据回滚都无从检验;只测无效等价类,则正常业务逻辑是否跑通没有证据。一个可复述的判断标准是:对同一个输入条件,有效等价类通常至少一个,无效等价类可能多个,每个类都要有代表值。
等价类划分的边界:它管什么、不管什么
等价类划分适用于存在明确输入域或输出域的测试项,前提是这些条件能够被描述、被拆分,并且每类的预期结果可以写清楚。它不负责临界点附近的精细行为,也不负责多条件交叉与流程顺序,这些分别由相邻方法承担。
| 范围判断 | 具体内容 | 说明 |
|---|---|---|
| 属于 | 数值范围(如年龄 18–60) | 按区间内外拆分有效与无效类 |
| 属于 | 字符串格式(如手机号、邮箱、编码规则) | 按格式合法、格式非法、长度异常拆分 |
| 属于 | 枚举选项、下拉框、单选项 | 每个合法选项为一个有效类,未定义值为无效类 |
| 属于 | 必填与选填字段 | 空值、仅空格、正常填写分别成类 |
| 属于 | 状态组合中可独立判断的输入条件 | 条件之间无耦合时可分别划分 |
| 不属于 | 临界值及其两侧的精确行为 | 交由边界值分析处理 |
| 不属于 | 多条件交叉与规则冲突 | 交由判定表处理 |
| 不属于 | 操作顺序、状态迁移、跨页面流程 | 交由场景法处理 |
| 不属于 | 性能、安全、兼容性等非功能测试 | 属于其他测试类型的方法范畴 |
| 不属于 | 跨项目用例复用与用例库治理 | 属于测试用例库与资产复用主题 |
方法本身与工具无关,纸笔、表格、用例管理平台都能承载划分结果。工具解决的是登记、检索与执行跟踪,不改变划分规则。划分完成后如何把结果沉淀为可评审、可执行的用例,才进入工具协作的环节。
等价类怎么划分:步骤、规则与判定标准
划分可以按五步推进,每一步都有明确产物,便于复核。
- 明确输入条件。从需求规格或接口文档中逐条摘出输入项与约束,包括类型、范围、格式、必填性、依赖关系。产物是一份输入条件清单。
- 按规则与约束拆分。对每个输入条件,依据取值范围、取值个数、布尔与枚举、格式规则、必填与选填、合法与非法组合等依据,拆出若干子集。
- 标注有效与无效。为每个子集打上有效或无效标记,并写明该类的判定条件,例如“大于 60 的整数”。
- 编号并说明覆盖条件。给每个类一个唯一编号,写明它覆盖的输入情形,便于后续追溯需求条目。
- 选取代表值。从每个类中挑一个最具代表性的数据,配上预期结果,形成用例草稿。
一个划分是否合格,用三条标准检验:
- 完备性:所有可能的输入都能被某个类接住,不存在“无处安放”的取值。发现遗漏说明拆分不完整。
- 互斥性:一个具体输入只能落入一个类,不能同时属于两个类。重叠会导致用例重复、预期结果冲突。
- 可判定性:能说清该类的预期结果,包括正常返回、错误提示或拦截行为。说不清预期结果的类,说明需求本身还有歧义,应先澄清需求。
无效等价类取值有一条操作纪律:一次只取一个无效值。若同时输入两个错误条件,程序可能只报出其中一个,另一个是否被正确处理无法判断,缺陷定位也会变难。
划分结果建议用登记表固化,字段如下:
| 字段 | 填写内容 | 作用 |
|---|---|---|
| 类编号 | 如 EC-01、EC-02 | 唯一标识,便于引用与追溯 |
| 输入条件 | 对应的需求条目或字段名 | 建立与需求的对应关系 |
| 类类型 | 有效 / 无效 | 区分验证目标 |
| 条件描述 | 如“18 至 60 的整数” | 说明该类的判定边界 |
| 代表值 | 如 30 | 实际用于执行的数据 |
| 预期结果 | 如“保存成功,显示年龄 30” | 判定通过与否的依据 |
| 对应用例 | 用例编号 | 连接设计与执行 |
等价类划分与边界值分析、判定表的区别
这几种方法回答的问题不同:等价类划分回答“取哪一类数据”,边界值分析回答“临界点及其两侧取什么值”,判定表回答“多个条件组合时走哪条规则”,场景法回答“操作按什么顺序发生”。
| 方法 | 关注点 | 典型适用场景 | 输出物 |
|---|---|---|---|
| 等价类划分 | 输入域的类别覆盖 | 单条件或可独立拆分的输入项 | 等价类登记表与代表值用例 |
| 边界值分析 | 临界点及其两侧取值 | 有序或连续区间,如数值范围、长度限制 | 边界取值用例 |
| 判定表 | 多条件组合与规则冲突 | 折扣规则、权限矩阵、审批条件 | 条件与动作的规则表 |
| 场景法 | 操作流程与状态迁移 | 下单、支付、审批流转 | 基本流与备选流用例 |
组合顺序建议是:先划分等价类,确定每类取一个代表值;对有序或连续区间,再补充临界点及其两侧取值;当多个条件相互影响、结果由组合决定时,转用判定表;当测试对象是流程而非单个输入时,改用场景法。等价类划分与边界值分析常配对使用,前者保证类别覆盖,后者保证临界精度。
具体例子与常见误解
以“用户年龄输入,允许 18 至 60 周岁整数”为例,划分结果如下:
| 类编号 | 类类型 | 条件描述 | 代表值 | 预期结果 |
|---|---|---|---|---|
| EC-01 | 有效 | 18 至 60 的整数 | 30 | 保存成功,年龄显示为 30 |
| EC-02 | 无效 | 小于 18 的整数 | 10 | 提示年龄不符合要求,拒绝保存 |
| EC-03 | 无效 | 大于 60 的整数 | 70 | 提示年龄不符合要求,拒绝保存 |
| EC-04 | 无效 | 非整数(小数) | 25.5 | 提示请输入整数 |
| EC-05 | 无效 | 非数字字符 | abc | 提示格式错误 |
| EC-06 | 无效 | 空值 | (留空) | 提示年龄为必填项 |
执行时,EC-02 至 EC-06 各自单独提交一次,不与其他错误条件叠加。若把“10”和“abc”同时输入,系统只报一个错误,另一个分支是否被正确处理就失去了证据。这个例子还提示:18 和 60 本身属于有效类,但它们紧邻无效类,临界行为需要边界值分析补充 17、18、60、61 等取值,才能发现“大于等于写成大于”这类缺陷。
实践中高频出现的误解有四条:
- 把等价类划分当成随机抽样。随机抽样不保证同类内预期结果一致,也不保证类别覆盖;等价类划分要求同类数据在处理逻辑上表现相同,代表值是可解释的选择。
- 只划有效等价类。忽略异常输入,等于放弃对错误提示、拦截逻辑和系统稳定性的验证,上线后异常路径的问题往往最先暴露。
- 划分完就结束。等价类解决类别覆盖,临界点附近的缺陷仍会漏测,需要与边界值分析配合。
- 等价类越多越好。类拆得过细,用例数量和维护成本同步上升,收益递减。划分粒度以“预期结果是否真的不同”为准,预期结果相同的子集应合并。
划分结果最终要落成可执行、可评审的用例。ONES 支持编写测试用例并组织用例库,用例属性可自定义以适配不同业务场景,用例模块支持树状结构与拖拽排序,便于按输入条件或功能模块归类;用例可与产品需求、研发任务关联,用例库中的属性支持筛选,方便按等价类编号或覆盖条件快速定位。划分表登记完成后,把每个类的代表值与预期结果录入为用例,关联到对应需求,评审与执行就有了统一的承接载体。方法本身与工具无关,工具承担的是登记、检索与跟踪的管理动作。
常见问题
等价类划分和边界值分析应该先用哪个?
建议先做等价类划分,再做边界值分析。等价类划分确定每个输入条件有哪些类别、每类取哪个代表值;边界值分析在此基础上,对有序或连续区间补充临界点及其两侧的取值。两者关注点不同:前者保证类别覆盖,后者保证临界精度。如果先做边界值分析,容易只盯着数值边界,漏掉格式、空值、枚举等非连续类别的划分。
无效等价类为什么一次只能取一个值?
程序对多个错误条件同时出现时,通常只报出最先触发的一个错误,其余错误分支是否被正确处理无法观察。一次只提交一个无效值,可以让每个异常分支都有独立的执行证据,缺陷定位也更直接。如果业务上确实存在多个错误同时出现的场景,可以单独设计组合用例,但应与单无效值用例分开记录。
等价类划分做到什么粒度算合适?
以“预期结果是否真的不同”作为判断标准。如果两个子集的预期结果完全一致,应合并为一个等价类;如果预期结果不同,例如一个提示“格式错误”、另一个提示“超出范围”,就应拆成不同的类。类拆得过细会推高用例数量和维护成本,收益递减;拆得过粗则可能漏掉不同的异常处理分支。划分完成后用完备性和互斥性检查一遍,能帮助校准粒度。
划分结果怎么落到测试用例管理工具里?
划分表登记完成后,把每个类的代表值和预期结果录入为一条用例,用例标题或自定义属性中带上类编号,便于追溯。ONES 支持编写测试用例并组织用例库,用例属性可自定义以适配不同业务场景,用例模块支持树状结构与拖拽排序,便于按输入条件或功能模块归类;用例可与产品需求、研发任务关联,用例库中的属性支持筛选,方便按等价类编号或覆盖条件快速定位。工具承担的是登记、检索与执行跟踪,划分规则本身不变。
输出域也能做等价类划分吗?
可以。当输出结果存在多种可分类的形态时,例如订单状态分为待支付、已支付、已取消、已退款,可以按输出域划分等价类,再反推哪些输入组合会触发每种输出。输出域划分常用于输入条件不易枚举、但输出结果定义清晰的场景。它与输入域划分的规则一致:完备、互斥、可判定,每类取代表值并写明预期结果。
