易君召
发布于 2026-09-21 / 作者:易君召 / 0 阅读
0

等价类划分法:如何提升测试覆盖率

等价类划分是黑盒测试核心用例设计方法。核心思想:把输入域划分成若干等价类,同一类内的数据具有相同处理逻辑,从每个等价类选取代表性数据,用少量用例覆盖大量输入场景,避免穷举测试。 等价类分为:有效等价类(合法输入)无效等价类(非法输入)

一、完整实施步骤(落地流程)

1. 梳理输入条件,划分等价类

先提取所有输入项:文本长度、数值范围、字符类型、必填 / 可选、枚举选项等。

  • 有效等价类:符合需求规格,程序可正常接收处理

  • 无效等价类:违反规则,程序应识别并拦截、提示错误

划分原则:子集内输入具有等价效果;等价类之间互不相交

示例:用户账号,要求 6~16 位字母 + 数字

类别

等价类描述

示例值

有效

长度 6~16,字母 / 数字组合

test123

无效

长度<6

t1

无效

长度>16

testtesttest12345

无效

包含特殊符号

test@123

无效

纯中文

测试账号

2. 给每个等价类编号

方便后续编写用例、做覆盖率统计。 例: 有效等价类①:账号 6~16 位字母数字 无效等价类②:长度 <6;③长度> 16;④含特殊字符;⑤中文

3. 设计测试用例,优先覆盖有效类

一条用例尽量覆盖多个有效等价类,减少用例数量; 一条用例只覆盖一个无效等价类(关键!)

原因:多个错误同时输入,程序可能只触发第一个校验,掩盖其他 bug,无法确认每个单独非法场景是否正常拦截。

上面例子: ✅有效用例:test123 覆盖① ❌无效用例 1:t1 覆盖② ❌无效用例 2:testtesttest12345 覆盖③ ❌无效用例 3:test@123 覆盖④ ❌无效用例 4:测试账号 覆盖⑤

4. 补充边界值(等价类最佳搭档)

等价类本身不重点关注边界点,单纯等价类会漏掉边界缺陷,实际项目中一般等价类 + 边界值组合使用,大幅提升覆盖率。

上例边界:6 位、16 位、5 位、17 位。

二、怎么提高测试覆盖率(核心要点)

1. 不要只看输入,还要覆盖输出、内部状态

很多人只划分输入等价类,忽略:

  • 输出结果等价类(成功、业务异常、系统报错)

  • 状态等价类(订单:待支付 / 已支付 / 已取消)

  • 接口参数、请求方式、权限身份等价类

例:订单退款,不同订单状态构成等价类,不同状态下退款逻辑不同,必须分开覆盖。

2. 拆分复合条件,避免大而笼统的等价类

当输入是多个条件组合(比如:手机号 + 验证码 + 勾选协议),不要合并成一个等价类。

  • 错误做法:等价类 = 全部合法输入

  • 正确做法:把每个条件拆成独立等价类,再组合用例,防止漏掉单项非法场景

3. 区分独立等价类,不要合并无效等价类

重点规则:无效等价类,每次只测一个错误。 如果同时传入「长度太短 + 包含特殊字符」,程序返回报错,你无法判断是拦截长度,还是拦截特殊字符。单独测试才能保证每个校验逻辑都被覆盖。

4. 挖掘隐性需求等价类(提升隐性场景覆盖率)

需求文档写的是显性规则,但存在隐性等价类:

  • 空值、空格、全角空格

  • 大小写、前后空格

  • 输入为 null、空字符串 很多线上 bug,都是隐性等价类没覆盖。

示例:用户名允许字母,隐性场景:Test01(前后空格),是否自动 trim?是否当作非法字符?单独划为等价类。

5. 统计等价类覆盖率指标

等价类覆盖率公式:

\(等价类覆盖率 = \frac{已覆盖等价类数量}{总等价类数量} ×100\%\) 目标:100% 等价类覆盖,代表所有划分出来的有效 / 无效等价类都至少有一条用例命中。

⚠️注意:100% 等价类覆盖 ≠ 100% 代码覆盖,黑盒不看代码,仍然可能遗漏代码分支缺陷。

6. 等价类 + 其他方法组合,补齐短板

等价类短板:不关注边界、不关注多条件组合。工程上组合使用:

  1. 等价类划分 + 边界值分析:覆盖范围最常用组合

  2. 复杂多条件(多个输入互相影响):再加判定表,处理条件组合场景

  3. 状态流转类功能:加状态迁移法

三、常见踩坑(会降低覆盖率)

  1. 等价类划分太粗:一类里面差异很大,选一个样本测不到内部不同逻辑

  2. 多个无效条件放同一个用例:缺陷被掩盖,校验逻辑覆盖不全

  3. 只测有效等价类,忽略无效等价类:大量异常场景缺失

  4. 只看显性需求,忽略空、空格、全角、null 等隐性等价类

  5. 把等价类覆盖率等同于代码覆盖率,误以为 100% 等价覆盖就足够

四、简单实战总结

  1. 提取所有输入 / 状态 / 输出条件

  2. 划分有效、无效等价类,编号;拆分隐性输入

  3. 有效用例尽量多覆盖有效类;无效用例每次仅一个错误

  4. 搭配边界值;复杂条件增加判定表

  5. 统计等价类覆盖率,保证全部等价类都被覆盖