测试用例设计方法:等价类划分法、边界值分析法、因果图法

说到测试用例设计,我见过不少新手一上来就凭感觉写用例。结果呢?要么漏测,要么重复。今天咱们聊聊三种最实用的设计方法。我个人习惯把它们当作工具箱里的三把扳手——各有各的用处。

一、等价类划分法:把无穷变成有限

等价类划分,说白了就是「分堆」。你想想看,一个输入框能接受1到100的整数。难道你要测1、2、3……一直到100?那得测到猴年马月去。

核心思想很简单:把输入数据分成若干「等价类」,每个类里选一个代表就够了。因为同一类里的数据,程序处理方式是一样的。

两种等价类

  • 有效等价类:符合需求的数据。比如1-100之间的整数。
  • 无效等价类:不符合需求的数据。比如小于1、大于100、非数字等。

重要原则:每个无效等价类要单独测。为什么?因为多个无效输入同时出现时,程序可能只报第一个错误,后面的bug就被「藏」起来了。

举个例子。一个登录功能,用户名要求6-18位字母数字组合。

输入条件 有效等价类 无效等价类
长度 6-18位 小于6位、大于18位
字符类型 字母+数字 含特殊字符、含中文、纯数字、纯字母
是否为空 非空 空字符串

我在项目中遇到过一件事:有个同事把「纯数字」和「含特殊字符」放在一个用例里测。结果程序只提示了特殊字符错误,数字的问题没暴露出来。后来上线后用户发现纯数字也能注册……嗯,这就是没遵守「无效等价类单独测」的教训。

二、边界值分析法:bug最爱藏在边界

等价类划分解决了「测哪些」的问题,但还不够。经验告诉我,程序在边界处最容易出问题。比如循环的边界、数组的边界、数值范围的边界。

为什么会这样?因为程序员写代码时经常用 <= 还是 < 搞混,或者数组下标从0开始还是从1开始没想清楚。

边界值分析的原则

  • 取边界点:最小值、最大值
  • 取边界附近:最小值-1、最小值+1、最大值-1、最大值+1

还是刚才1-100的例子。用等价类划分,我们只需要测1、50、100。但用边界值分析,我们要测:0、1、2、99、100、101。

我的习惯:等价类划分和边界值分析总是搭配使用。先分等价类,再在有效等价类的边界上多测几个点。这样既全面又高效。

我记得有一次测试一个分页功能,每页显示20条数据。开发写的代码是 if (pageSize > 20) pageSize = 20。我测了0、1、19、20、21这几个边界值。结果发现传0的时候,程序直接崩了——因为后面有个除以pageSize的操作。这就是边界值的威力。

三、因果图法:理清复杂逻辑

前面两种方法适合单个输入条件。但实际业务中,多个条件之间往往有复杂的组合关系。这时候因果图就派上用场了。

因果图的核心是:找出「因」(输入条件)和「果」(输出结果),然后用逻辑关系把它们连起来。

常见的逻辑关系

  • 恒等:因成立,果就成立
  • 非:因不成立,果才成立
  • 与:所有因都成立,果才成立
  • 或:任意一个因成立,果就成立

举个实际例子。一个优惠券系统:

  • 条件1:用户是VIP
  • 条件2:订单金额满100元
  • 条件3:今天是会员日
  • 结果:享受8折优惠

业务规则是:VIP用户且满100元,或者会员日且满100元,才能享受8折。

用因果图表示就是:(条件1 AND 条件2) OR (条件3 AND 条件2) → 结果成立。

避坑指南:我曾经遇到过一个复杂的审批流程,有7个条件、4种结果。一开始我直接写用例,写到一半发现漏了好多组合。后来老老实实画了因果图,才把逻辑理清楚。所以别嫌麻烦,复杂逻辑一定要画图。

四、三种方法的配合使用

这三种方法不是孤立的。我一般这样用:

  1. 先用等价类划分确定测试数据的「大类」
  2. 再用边界值分析补充边界附近的测试点
  3. 遇到复杂逻辑时,用因果图梳理条件组合

下面这张图展示了它们的关系:

测试用例设计方法体系 等价类划分 边界值分析 因果图法 单个输入条件 数值范围边界 多条件组合 有效/无效等价类 边界点+邻界点 因果→判定表 三者配合使用,覆盖更全面 等价类定范围 → 边界值补细节 → 因果图理逻辑

五、实战案例:一个完整的测试设计

假设我们要测试一个「用户注册」功能,手机号字段要求:11位数字,以1开头,第二位是3、5、7、8、9。

第一步:等价类划分

  • 有效:11位、1开头、第二位是3/5/7/8/9
  • 无效:长度不是11位、不以1开头、第二位不是3/5/7/8/9、含非数字字符

第二步:边界值分析

  • 长度边界:10位、11位、12位
  • 首位边界:0开头、1开头、2开头

第三步:因果图分析

如果还有「验证码」和「同意协议」两个条件,那就需要画因果图了。比如:手机号有效 AND 验证码正确 AND 已同意协议 → 注册成功。

小技巧:因果图画完后,可以转成判定表。判定表能保证每个条件组合都不遗漏。我一般用Excel画判定表,一行一个组合,一目了然。

好了,这三种方法就聊到这儿。等价类划分帮你「分堆」,边界值分析帮你「守边」,因果图帮你「理关系」。下次写用例时,不妨试试这个组合拳。

可可精品资料库