用例设计基础:等价类划分法、边界值分析法、因果图法

聊到用例设计,很多新手第一反应就是「凭感觉写」。说实话,我刚入行那会儿也这样。直到有一次,我负责一个支付模块的测试,漏了一个边界值,结果线上出现了金额溢出的bug。从那以后,我老老实实把等价类和边界值当成了基本功来练。

今天咱们就把这三个最经典的方法掰开揉碎讲清楚。你想想看,测试用例设计说白了就两件事:怎么选数据和怎么定逻辑。等价类和边界值解决的是数据选择问题,因果图解决的是逻辑组合问题。

等价类划分法:用最少的数据覆盖最多的场景

等价类的核心思想很简单——把输入数据分成若干「等价」的组,每组里随便挑一个值测试就行。因为理论上,同一组里的数据,程序处理方式是一样的。

核心原则:每个等价类至少覆盖一个测试用例

我个人习惯把等价类分成两种:

  • 有效等价类:符合需求、程序应该正常处理的数据
  • 无效等价类:不符合需求、程序应该拒绝或报错的数据

举个例子,一个输入框要求输入1-100的整数:

类型 等价类 示例值
有效等价类 1到100之间的整数 50
无效等价类1 小于1的整数 -5
无效等价类2 大于100的整数 200
无效等价类3 非整数(小数、字符、空值) 3.14, "abc", 空

我的经验:无效等价类往往比有效等价类更容易漏掉。我曾经测试一个注册功能,只测了有效数据,结果用户输入特殊字符时系统直接崩溃了。所以,无效等价类至少要占用例总数的40%。

边界值分析法:bug最喜欢藏在边界上

为什么要单独讲边界值?因为程序员的代码里,判断条件通常长这样:if (x >= 1 && x <= 100)。你想想看,最容易写错的是哪个部分?就是边界上的 >= 和 <= 啊。

边界值分析法的原则是:取边界值、边界值-1、边界值+1。还是上面那个1-100的例子:

  • 上点:1 和 100(边界本身)
  • 离点:0 和 101(边界两侧最近的值)
  • 内点:50(边界内的任意值,其实等价类已经覆盖了)

实际测试时,我们通常用边界值+等价类的组合策略。比如:

测试数据:0, 1, 50, 100, 101
覆盖分析:
- 0:无效等价类 + 下边界离点
- 1:有效等价类 + 下边界上点
- 50:有效等价类 + 内点
- 100:有效等价类 + 上边界上点
- 101:无效等价类 + 上边界离点

避坑指南:我曾经遇到过一个日期选择器,边界值只测了月份的天数边界,没测跨年边界。结果12月31日切换到1月1日时,年份计算出了bug。记住:边界不只有数值边界,还有逻辑边界、时间边界、状态边界。

因果图法:当多个条件互相影响时

等价类和边界值解决的是「单个输入」的问题。但实际业务中,往往是多个条件组合决定一个结果。比如:

场景:一个登录功能,用户输入用户名和密码。如果用户名正确且密码正确,登录成功;如果用户名错误或密码错误,提示错误;如果连续3次失败,账号锁定。

这里就有三个条件(用户名正确、密码正确、失败次数)和三个结果(登录成功、提示错误、账号锁定)。用因果图法,我们这样分析:

  1. 列出原因(输入条件):C1=用户名正确,C2=密码正确,C3=失败次数≥3
  2. 列出结果(输出动作):E1=登录成功,E2=提示错误,E3=账号锁定
  3. 画出因果关系:C1且C2 → E1;非(C1且C2) → E2;C3 → E3
  4. 生成决策表:把条件组合全部列出来

决策表长这样:

条件/动作 规则1 规则2 规则3 规则4
C1: 用户名正确 Y Y N N
C2: 密码正确 Y N Y N
C3: 失败≥3次 N N N N
E1: 登录成功 ✓
E2: 提示错误 ✓ ✓ ✓
E3: 账号锁定

嗯,这里要注意,实际项目中条件往往不止3个。如果有4个条件,组合数就是2^4=16种。这时候因果图的价值就体现出来了——它能帮你系统化地找出所有组合,而不是靠拍脑袋。

实用技巧:因果图法最适合用在「条件多、结果少」的场景。比如权限校验、状态流转、规则引擎。如果条件超过6个,建议先合并等价类,再画因果图,否则决策表会膨胀到无法维护。

三种方法的配合使用

实际工作中,我不会只用一种方法。我的套路是这样的:

  1. 先用等价类划分:把输入数据分组,确定有效和无效范围
  2. 再用边界值分析:在每个等价类的边界上补充测试数据
  3. 最后用因果图:梳理条件之间的逻辑关系,生成决策表

举个例子,测试一个电商的优惠券功能:

  • 等价类:满减券、折扣券、免邮券(不同类型)
  • 边界值:满100减20,那边界就是99、100、101
  • 因果图:优惠券是否过期 + 是否达到门槛 + 是否叠加使用 → 最终优惠金额

你看,三个方法各司其职,组合起来就能覆盖绝大多数场景。

我的习惯:写用例之前,先花10分钟画一张因果图。别嫌麻烦,这10分钟能帮你省下后面2小时的返工时间。我曾经就是因为没画因果图,漏了一个「已退款订单不能再次退款」的组合,结果线上出了重复退款的事故。

知识体系总览

下面这张图是我自己总结的,把三个方法的关系和适用场景画清楚了:

用例设计三大基础方法 等价类划分法 输入数据分组 有效类 + 无效类 每组选一个代表值 边界值分析法 边界点 + 邻界点 上点、离点、内点 数值边界 + 逻辑边界 因果图法 条件组合分析 原因 → 结果 生成决策表 实战配合策略 ① 等价类划分 → 确定数据分组 ② 边界值分析 → 补充边界数据 ③ 因果图法 → 梳理逻辑组合 适用场景: • 单个输入:等价类 + 边界值 • 多条件组合:因果图 + 决策表

说白了,这三个方法就是测试用例设计的「三板斧」。等价类帮你选数据,边界值帮你查漏洞,因果图帮你理逻辑。三者配合,基本能覆盖90%以上的场景。

最后说一句,方法再好,也得落地。我建议你下次写用例时,先别急着动手,花5分钟想想:这个功能属于「单输入」还是「多条件」?然后对应选择方法。慢慢养成习惯,你会发现用例质量提升一大截。

可可精品资料库