3、测试用例设计:等价类划分、边界值分析、正交实验法、场景法在量产中的应用
量产测试和研发测试,最大的区别在哪?
我个人觉得,研发测试追求的是「覆盖率」,恨不得把每行代码、每个逻辑都跑一遍。但量产测试不一样,它追求的是「效率」和「成本」。你想想看,产线上每秒钟都在出板子,测试时间多一秒,成本就多一分。所以,怎么用最少的测试用例,发现最多的缺陷?这就是我们今天要聊的核心。
3.1 等价类划分:别做重复劳动
等价类划分,说白了就是把输入数据分成几个「类」。同一类里的数据,程序处理方式是一样的。你测一个,就等于测了一堆。
核心思想: 从每个等价类中选一个代表值进行测试。
举个例子,一个电压检测程序,输入范围是 0V ~ 10V。我们可以分成三类:
- 有效等价类: 0V ~ 10V 之间的值(比如 5V)
- 无效等价类(上): 大于 10V 的值(比如 12V)
- 无效等价类(下): 小于 0V 的值(比如 -1V)
我在项目中遇到过,有人把 0V、1V、2V……一直到 10V 全测了一遍。其实没必要,选一个 5V 就够了。剩下的时间,不如去测测边界值。
3.2 边界值分析:Bug 最爱扎堆的地方
经验告诉我,程序出问题,十有八九在边界上。为什么?因为开发写代码时,最容易搞混的就是「大于」和「大于等于」。
边界值分析的原则: 取边界值、边界值减一、边界值加一。
还是那个 0V ~ 10V 的例子,我们需要测这些点:
- 上点:0 和 10
- 离点:-1 和 11
- 内点:5(其实等价类已经测过了)
嗯,这里要注意:边界值分析不是独立的,它和等价类划分是黄金搭档。等价类帮你划范围,边界值帮你找边界上的坑。
3.3 正交实验法:用最少的组合,覆盖最多的场景
量产测试中,经常遇到多个参数组合的情况。比如一个电源模块,有输入电压、负载电流、温度三个因素,每个因素有 3 个水平。如果全组合测试,需要 3×3×3 = 27 个用例。产线哪受得了?
正交实验法就是干这个的。它用一张「正交表」,用少量的组合,覆盖两两之间的所有搭配。
举个例子:
| 因素 | 水平 1 | 水平 2 | 水平 3 |
|---|---|---|---|
| 输入电压 (V) | 5 | 12 | 24 |
| 负载电流 (A) | 1 | 2 | 3 |
| 温度 (°C) | -20 | 25 | 85 |
用 L9(3^3) 正交表,只需要 9 个用例:
| 用例 | 电压 | 电流 | 温度 |
|---|---|---|---|
| 1 | 5 | 1 | -20 |
| 2 | 5 | 2 | 25 |
| 3 | 5 | 3 | 85 |
| 4 | 12 | 1 | 25 |
| 5 | 12 | 2 | 85 |
| 6 | 12 | 3 | -20 |
| 7 | 24 | 1 | 85 |
| 8 | 24 | 2 | -20 |
| 9 | 24 | 3 | 25 |
你看,27 个用例压缩到 9 个,效率提升了 3 倍。而且两两组合都覆盖到了,大部分缺陷都能揪出来。
3.4 场景法:模拟用户真实操作
前面几种方法,都是针对「输入」的。但量产测试中,很多问题出在「流程」上。比如上电顺序、按键操作、状态切换……这些用等价类和边界值都测不到。
场景法,就是模拟用户真实的使用流程。我一般会画一个「状态迁移图」,然后沿着每条路径走一遍。
举个例子: 一个带按键的电源模块,有四个状态:待机、启动、运行、故障。
状态迁移:
待机 -> 启动 (按下按键)
启动 -> 运行 (电压稳定)
运行 -> 故障 (过流)
故障 -> 待机 (断电重启)
运行 -> 待机 (长按按键)
我们需要测试的「场景」包括:
- 基本流: 待机 -> 启动 -> 运行 -> 待机
- 备选流: 待机 -> 启动 -> 运行 -> 故障 -> 待机
- 异常流: 在启动过程中断电、在运行中多次按键等
我习惯把场景法和正交实验法结合起来用。先用场景法画出主流程,再用正交法补充参数组合。这样既保证了流程正确,又覆盖了参数边界。
3.5 四种方法的综合运用
在实际量产测试中,我不会只用一种方法。我的套路是这样的:
- 先用场景法 画出核心流程,确保主路径和异常路径都覆盖到。
- 再用等价类划分 把每个步骤的输入参数分类。
- 然后用边界值分析 补充边界上的测试点。
- 最后用正交实验法 压缩组合数量,提升测试效率。
这四步走下来,测试用例的质量和效率都能兼顾。说白了,就是「该测的一个不少,不该测的一个不多」。
3.6 知识体系总览
下面这张图,是我自己总结的四种方法在量产测试中的定位和关系。你可以把它当作一个快速参考。
好了,这四种方法就讲完了。我个人觉得,量产测试的精髓不在于「会多少种方法」,而在于「知道什么时候用什么方法」。你想想看,如果每个项目都能把这四步走一遍,产线上的「意外」至少能减少一半。