3、测试用例设计进阶:正交实验法、场景法、错误推测法

说实话,很多同学学完等价类和边界值之后,会觉得测试用例设计也就那么回事。但等你真正进了项目,你会发现——光靠那两招,根本不够用。

我刚开始带项目的时候,就吃过这个亏。一个参数组合的bug,愣是漏到了线上。从那以后,我老老实实把正交实验法、场景法和错误推测法学了个透。今天咱们就把这三板斧掰开揉碎讲清楚。

核心观点:等价类和边界值解决的是「单维度」问题。而正交实验法、场景法、错误推测法,解决的是「多维度组合」和「业务流程」的问题。三者互补,缺一不可。

3.1 正交实验法:用最少的用例覆盖最多的组合

你想想看,一个功能如果有4个参数,每个参数有3个取值。全排列组合是多少?3的4次方,81种。真要全测,项目周期得翻三倍。

正交实验法就是干这个的——用最少的用例,覆盖两两组合。为什么是两两?因为据统计,70%以上的bug都是由两个参数交互触发的。三个以上参数同时出问题的概率极低。

3.1.1 正交表长什么样?

我直接给你看一个最常用的正交表:L9(3^4)。意思是9条用例,覆盖4个参数,每个参数3个取值。

用例编号 参数A 参数B 参数C 参数D
1 A1 B1 C1 D1
2 A1 B2 C2 D2
3 A1 B3 C3 D3
4 A2 B1 C2 D3
5 A2 B2 C3 D1
6 A2 B3 C1 D2
7 A3 B1 C3 D2
8 A3 B2 C1 D3
9 A3 B3 C2 D1

你看,81种组合被压缩到9条用例。而且任意两列之间,所有组合都出现了且只出现一次。这就是正交表的精髓——均匀分散,整齐可比。

3.1.2 实际项目怎么用?

我在测试一个搜索功能时,遇到过这么个场景:搜索条件有「关键词」「分类」「排序方式」「每页条数」四个维度。每个维度3-4个取值。

我当时没急着写用例,先列了个因子-状态表:

因子(参数) 状态1 状态2 状态3
关键词 中文 英文 数字
分类 全部 电子产品 图书
排序方式 默认 价格升序 销量降序
每页条数 10 20 50

然后套用L9(3^4)正交表,直接生成9条用例。跑完之后,发现「英文关键词+价格升序」这个组合下,搜索结果排序错乱了。这个bug如果全量测试,可能要跑到第40条用例才能发现。

我的小技巧:如果参数取值个数不一样,比如有的参数有2个取值,有的有4个。可以用「混合正交表」,或者把少的取值重复补齐。我个人习惯用PICT工具自动生成,比自己手算快多了。

3.2 场景法:从用户视角出发

正交实验法虽然高效,但它有个致命弱点——它只关心参数组合,不关心业务流程。你想想看,用户使用软件是一个连续的过程,不是一个个孤立的参数输入。

场景法就是来解决这个问题的。它的核心思想是:模拟用户真实的使用路径。

3.2.1 基本流和备选流

场景法把业务流程分成两种:

  • 基本流:用户最常用的、最顺利的路径。比如登录→搜索商品→加入购物车→支付→完成。
  • 备选流:各种异常、分支、中断的情况。比如支付失败、库存不足、网络超时。

我举个例子你就明白了。拿「用户下单」这个功能来说:

基本流:
  1. 用户登录
  2. 选择商品
  3. 填写收货地址
  4. 选择支付方式
  5. 支付成功
  6. 订单生成

备选流:
  2a. 商品库存不足 → 提示缺货
  3a. 地址不完整 → 提示补充
  4a. 支付超时 → 取消订单
  5a. 支付失败 → 重新支付
  6a. 订单生成失败 → 回滚库存

每个备选流和基本流组合,就是一个场景。比如「基本流+备选流2a」就是一个场景:用户选了一个缺货的商品,系统应该怎么处理。

3.2.2 场景法实战案例

我记得有一次测试一个「在线考试系统」。如果用正交法,我只能测各种参数组合。但场景法让我发现了几个致命问题:

  • 场景1:考生答题中途断网,重新连接后答案丢失
  • 场景2:考试时间到,但考生还在答题,系统强制交卷
  • 场景3:考生提交后,发现还有未答的题目,想重新进入

这些场景,正交法根本覆盖不到。但恰恰是这些场景,最容易出线上事故。

注意:场景法不是让你把所有可能路径都测一遍。那样用例数量会爆炸。我的做法是:先画出业务流程图,然后挑出「高频路径」和「高风险路径」重点测试。一般5-8个场景就能覆盖90%的问题。

3.3 错误推测法:靠经验吃饭

这个方法听起来有点玄学,说白了就是——猜哪里会出bug。

你可能会问:这也能叫方法?嗯,它确实不是科学方法,但它非常实用。尤其是当你对某个系统足够熟悉的时候,你闭着眼睛都能猜到哪些地方会出问题。

3.3.1 常见的错误类型

我总结了一下,常见的容易出bug的地方就那么几类:

  • 边界值附近:比如输入框最大长度、分页的最后一页
  • 空值/零值:比如金额为0、数量为空、列表为空
  • 并发操作:比如两个人同时编辑同一条数据
  • 数据依赖:比如删除父级数据时,子级数据没处理
  • 状态转换:比如订单从「已支付」直接跳到「已完成」,跳过了「已发货」

3.3.2 我的避坑指南

我曾经在一个支付系统上栽过跟头。用户支付成功后,系统回调处理超时,导致订单状态卡在「支付中」。用户付了钱,但订单显示未支付。

从那以后,我养成了一个习惯:每次测试前,先列一个「错误推测清单」。比如:

错误推测清单(支付模块):
  □ 支付成功回调超时
  □ 支付成功回调重复调用
  □ 支付金额精度丢失(0.1+0.2 != 0.3)
  □ 退款金额超过原支付金额
  □ 同时发起多笔支付
  □ 支付过程中关闭页面

这个清单不是一次性的。每次发现新bug,我都会加进去。久而久之,你的错误推测能力会越来越强。

我的建议:错误推测法不能单独用。它应该作为其他方法的补充。先用正交法覆盖参数组合,用场景法覆盖业务流程,最后用错误推测法查漏补缺。三管齐下,基本不会漏测。

3.4 三种方法的对比与选择

说了这么多,你可能有点晕。到底什么时候用哪个?我直接给你一张对比表:

方法 适用场景 优点 缺点
正交实验法 多参数组合、配置测试 用例少、覆盖全 不关心业务流程
场景法 业务流程、用户操作路径 贴近真实使用 用例数量不易控制
错误推测法 高风险区域、历史bug高发区 针对性强、效率高 依赖个人经验

我个人习惯是:先场景法,再正交法,最后错误推测法。这个顺序能保证你既覆盖了业务流程,又覆盖了参数组合,还能补上经验性的漏洞。

3.5 本章知识体系

下面这张图,帮你把三种方法的核心逻辑串起来:

测试用例设计进阶:三大方法知识体系 测试用例设计进阶 正交实验法 核心:两两组合覆盖 工具:PICT / Allpairs 适用:多参数配置测试 场景法 核心:基本流+备选流 工具:业务流程图 适用:业务流程测试 错误推测法 核心:经验驱动 工具:错误推测清单 适用:高风险区域补漏 推荐顺序:场景法 → 正交法 → 错误推测法

好了,这一章的内容就到这。三种方法各有侧重,但都是实战中必不可少的武器。你可以在自己的项目里试着用起来,慢慢就会找到感觉。

可可精品资料库