等价类划分要在研发团队落地,关键是把这项个人技巧变成可重复执行的团队动作:先列出被测对象与输入条件,再按有效/无效、单值/区间/集合划分等价类,为每个类指定代表值并补充边界值,随后转成可评审的用例条目,最后用覆盖情况和缺陷回溯检验划分质量。下面按操作步骤、角色分工、完整示例、完成检查和流程接入五个部分展开。
要点总览(TL;DR)
- 落地等价类划分按五步推进:列输入条件、划分有效/无效类、选代表值与边界值、映射为用例、自检后提交评审,每步都有明确完成标志。
- 测试人员主导划分与用例编写,产品提供业务规则,开发补充接口与技术约束,评审会核对覆盖与预期结果,四类交付物按条件编号保持可追溯。
- 无效类单独成用例,保证每条失败用例只对应一个原因;有效类可合并,但预期结果必须唯一可判定。
- 用输入条件全覆盖、无效类拆分、边界值覆盖、用例可执行、预期结果明确、可追溯六类检查项判断划分是否可用,并通过缺陷回溯修正划分。
- 把输入条件收集放进需求评审、覆盖核对放进用例评审、等价类表与用例的对应关系放进迭代维护,先从一个模块试点再推广。
落地等价类划分的核心步骤
等价类划分的产出物是一张等价类表加一组由它派生的用例。团队执行时按以下五步推进,每一步都明确输入、动作、输出和完成标志,避免划分停留在讨论层面。
| 步骤 | 输入 | 动作 | 输出 | 完成标志 |
|---|---|---|---|---|
| 1. 识别被测功能与输入条件 | 需求文档、接口说明、业务规则、历史缺陷 | 逐条列出影响功能行为的输入项,包括用户输入字段、接口参数、状态、配置项和前置条件 | 输入条件清单 | 清单中的每个输入条件都能对应到需求条目或业务规则 |
| 2. 划分等价类 | 输入条件清单 | 对每个输入条件区分有效类与无效类;按单值、区间、集合三种形态拆分,并标注类之间的互斥关系 | 等价类表(含类编号、类型、描述) | 每个输入条件至少有一个有效类,无效类按规则逐条拆开 |
| 3. 选取代表值与边界值 | 等价类表 | 为每个等价类选一个能代表整类的值;对区间类和有序集合类补充上边界、下边界及边界外侧的值 | 带代表值和边界值的等价类表 | 每个类都有代表值,每个区间类都有边界值 |
| 4. 映射为用例条目 | 带值的等价类表 | 按“一个无效类一条用例、有效类可合并”的原则编写用例,写明前置条件、操作步骤、输入数据和预期结果 | 用例集 | 每条用例可被他人独立执行,预期结果可观察、可判定 |
| 5. 自检与提交评审 | 等价类表、用例集 | 对照输入条件清单逐项核对覆盖情况,补齐遗漏后提交评审 | 评审通过的等价类表与用例集 | 每个输入条件都有对应等价类,每个类至少有一条用例 |
划分时有两个常见取舍需要提前约定。第一,无效类通常单独成用例,因为一条用例同时触发多个无效输入时,无法判断是哪个条件导致失败。第二,有效类可以在一条用例中组合多个输入,但组合后要确认预期结果仍然唯一、可判定。团队把这两条写进用例编写规范,能显著减少评审时的反复沟通。
完成标志中的“每个类至少一条用例”是最低要求。对于高风险输入条件,例如金额、权限、状态流转,可以在代表值之外增加边界值和异常组合,具体数量由风险等级决定,不必对所有字段平均用力。
角色分工与各环节交付物
等价类划分由测试人员主导,但输入条件的准确性依赖开发和产品。把职责和交接物定清楚,划分才不会变成测试单方面的推测。
| 角色 | 主要职责 | 交付物 | 交接时点 |
|---|---|---|---|
| 产品经理 | 提供业务规则、字段约束、状态定义和异常场景说明 | 需求条目中的规则说明、输入条件初稿 | 需求评审前 |
| 开发人员 | 补充技术侧输入条件,如接口参数类型、长度限制、默认值、并发与幂等约束 | 接口说明、技术约束补充项 | 需求评审或技术方案评审时 |
| 测试人员 | 汇总输入条件,完成等价类划分,选取代表值与边界值,编写用例 | 输入条件表、等价类表、用例集 | 用例评审前 |
| 评审参与者(产品、开发、测试负责人) | 核对业务规则理解是否一致、无效类是否遗漏、预期结果是否正确 | 评审记录与修改意见 | 用例评审会 |
交接物的形态建议统一:输入条件表按“条件编号—来源需求—约束描述”组织,等价类表按“条件编号—类编号—有效/无效—代表值—边界值”组织,用例集通过条件编号与等价类表建立可追溯关系。评审记录不必长篇,记录确认结论、遗留问题和责任人即可。
一个容易被忽略的分工点是:开发在实现阶段发现的隐含约束,例如后端对某字段做了额外截断,应当回写到输入条件表,由测试补充等价类。把这条回写动作纳入开发自测或提测说明,可以避免用例设计与实际实现脱节。
示例:一个输入字段的等价类划分与用例
以下为演示情景:某后台系统的“员工工号”输入字段,业务规则为必填、长度 6 至 10 位、仅允许字母和数字、首字符必须为字母、系统中不可重复。实际项目请按真实规则替换。
| 类编号 | 类型 | 类描述 | 代表值 | 边界值 |
|---|---|---|---|---|
| V1 | 有效 | 长度 6 至 10 位、字母数字组合、首字符为字母、未重复 | A12345 | 6 位:A12345;10 位:A123456789 |
| V2 | 有效 | 长度处于区间内部 | AB123456 | — |
| I1 | 无效 | 为空 | 空值 | — |
| I2 | 无效 | 长度小于 6 位 | A1234 | 5 位:A1234 |
| I3 | 无效 | 长度大于 10 位 | A1234567890 | 11 位:A1234567890 |
| I4 | 无效 | 含非字母数字字符 | A1234- | — |
| I5 | 无效 | 首字符非字母 | 1ABCDE | — |
| I6 | 无效 | 与已有工号重复 | 已存在的 A12345 | — |
由该表派生出的用例条目示例:
- 用例 T01(覆盖 V1、V2):输入 A12345 与 AB123456,预期保存成功,工号按输入原样展示。
- 用例 T02(覆盖 I1):工号留空提交,预期提示“工号不能为空”,不产生保存记录。
- 用例 T03(覆盖 I2):输入 A1234,预期提示长度不足,保存失败。
- 用例 T04(覆盖 I3):输入 A1234567890,预期提示长度超限,保存失败。
- 用例 T05(覆盖 I4):输入 A1234-,预期提示仅允许字母和数字,保存失败。
- 用例 T06(覆盖 I5):输入 1ABCDE,预期提示首字符必须为字母,保存失败。
- 用例 T07(覆盖 I6):输入系统中已存在的工号,预期提示工号重复,保存失败。
划分取舍的理由:长度约束按区间处理,因此保留 6 位和 10 位两个边界值,并各取一个越界值;字符类型约束按集合处理,合法集合与非法集合各取代表值;首字符规则是独立约束,单独成类,避免与长度类混在一条用例中导致失败原因不可区分;唯一性约束依赖数据状态,需要在前置条件中准备已存在数据,因此单独成用例。无效类全部单独执行,保证每条失败用例只对应一个原因。
完成检查:判断划分是否可用
划分是否到位,可以用下面这份清单逐项核对。全部通过再进入用例评审,未通过项记录责任人和补齐时间。
| 检查项 | 通过标准 |
|---|---|
| 输入条件全覆盖 | 需求中的每个输入字段、接口参数、状态和配置项都在输入条件表中有对应条目,无遗漏 |
| 等价类无遗漏 | 每个输入条件至少有一个有效类;无效类按规则逐条拆分,不存在“其他情况”这类笼统类 |
| 无效类单独成用例 | 每条无效类用例只触发一个无效条件,失败原因可唯一判定 |
| 边界值覆盖 | 区间类和有序集合类均覆盖上边界、下边界及边界外侧值 |
| 用例可执行 | 前置条件、操作步骤、输入数据完整,他人可独立执行 |
| 预期结果明确 | 每条用例的预期结果可观察、可判定,包含提示信息或数据状态 |
| 可追溯 | 用例能通过条件编号回溯到等价类表和需求条目 |
缺陷回溯是检验划分有效性的直接手段。迭代结束后,把线上和测试阶段发现的缺陷按输入条件归类:如果某类缺陷集中出现在已划分的等价类中,说明代表值选取或预期结果需要修正;如果缺陷落在未划分的条件上,说明输入条件清单有遗漏,应补充到等价类表并同步更新用例。这个动作每个迭代做一次,持续几轮后划分质量会明显稳定。
维护方式上,等价类表与用例保持编号对应,需求变更时先改等价类表再改用例,避免只改用例导致两者脱节。对于长期未发现缺陷的等价类,可以降低执行频率,但保留在表中作为覆盖依据。
把等价类划分接入团队日常流程
要让等价类划分持续执行,需要把它嵌入已有的三个节点,而不是额外增加一套独立流程。
需求评审阶段同步收集输入条件。测试人员在评审会上按字段和接口逐项确认约束,产品补充业务规则,开发补充技术限制,当场形成输入条件表初稿。这个动作把划分的前置信息在需求阶段就固定下来,减少后续返工。
用例评审阶段核对等价类覆盖。评审会按等价类表逐条检查:有效类和无效类是否齐全、边界值是否覆盖、无效类是否单独成用例、预期结果是否明确。评审结论记录为通过项和遗留项,遗留项指定责任人和完成时间。
迭代过程中维护等价类表与用例的对应关系。需求变更、缺陷回溯、开发补充的隐含约束,都先更新等价类表,再同步调整用例,保持编号可追溯。
这些动作需要工具承载设计与评审的状态。在 ONES 中,测试人员可以编写测试用例并组织用例库,用例支持树状结构组织与拖拽排序,便于按功能模块或输入条件分组管理;用例属性可自定义,团队可以增加“条件编号”“等价类编号”等字段,把等价类表与用例的对应关系直接落在用例属性上,并通过属性筛选快速定位某个输入条件下的全部用例。用例可与产品需求、研发任务关联,测试计划与迭代关联,使输入条件收集、用例设计、评审和迭代执行处在同一条流程中。对于已有 Excel 等价类表的团队,可以通过 Excel 批量导入用例并在线上维护,减少迁移成本;用例库和测试计划的权限可单独配置,便于区分设计、评审和执行角色。
接入时建议从一个迭代、一个功能模块开始试点:先跑通输入条件表、等价类表、用例集和评审记录四件交付物,再逐步推广到其他模块。试点阶段重点观察两件事:无效类是否被单独执行,缺陷回溯是否真的回写到了等价类表。这两件事稳定下来,等价类划分才算在团队中真正落地。
常见问题
需求文档写得不细,输入条件收集不齐怎么办?
把输入条件收集拆到两个场合完成:需求评审会上由测试按字段和接口逐项提问,产品补充业务规则,开发补充参数类型、长度、默认值等技术约束,当场形成初稿;提测阶段再核对一次,开发在实现中发现的隐含约束回写到输入条件表。两轮之后仍有不确定的条件,先按当前理解划分并在等价类表中标注待确认,不要留空。
等价类划分和边界值分析要分开做吗?
通常一起做。等价类划分确定哪些输入属于同一类、每类取什么代表值,边界值分析补充区间和有序集合的两端及边界外侧取值。操作上可以在同一张等价类表里增加边界值列,先完成类的划分,再对区间类和有序集合类补边界值,最后一起派生用例。这样表与用例的对应关系清晰,评审时也便于逐项核对。
有效类合并成一条用例后,失败时怎么定位问题?
合并的前提是预期结果唯一且可判定。如果多个有效输入组合后,失败原因可能来自其中任一输入,就应拆开或缩小组合范围。实践中的做法是:同一输入条件内的有效类可以合并,跨输入条件的组合按业务上真实会同时出现的场景合并,并在用例中写明每个输入值。合并用例执行失败时,再按输入逐项排查,必要时拆成独立用例补充到用例集。
等价类表在需求变更后怎么维护?
按“先改表、再改用例”的顺序处理。需求变更时先更新输入条件表和等价类表,调整类编号与代表值,再同步修改由该类派生的用例,保持编号可追溯。缺陷回溯发现的遗漏条件同样先补进等价类表。对于长期未发现缺陷的等价类,可以降低执行频率,但保留在表中作为覆盖依据,避免下次变更时重新梳理。
团队刚开始推行,从哪个范围试点比较合适?
建议选一个迭代内的一个功能模块,输入条件相对集中、规则描述清楚的那种。试点阶段先跑通四件交付物:输入条件表、等价类表、用例集和评审记录,重点观察无效类是否被单独执行、缺陷回溯是否真的回写到等价类表。这两件事稳定后再推广到其他模块,推广时把已验证的表格模板和用例编写约定直接复用,减少重复沟通。
