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

好,咱们进入正题。测试用例怎么设计?这是每个做嵌入式测试的人都要面对的问题。尤其是ABS这种安全关键系统,你不可能把所有输入组合都测一遍——时间不允许,成本也扛不住。那怎么办?

我个人的习惯是,先搞清楚被测对象的特点,再选合适的方法。说白了,没有银弹。今天这四种方法,是我在ABS项目里用得最多的。咱们一个一个聊。

4.1 等价类划分:把无穷变成有限

等价类划分,核心思想就一句话:把输入域分成若干「等价」的区间,每个区间里取一个代表值测试就够了。

为什么能这么干?因为同一个区间里的输入,程序处理逻辑是一样的。你测了其中一个,就等于测了全部。

举个例子,ABS系统的轮速传感器输入范围是0~300 km/h。那我们可以这样划分:

  • 有效等价类:0 ~ 300 km/h(正常车速)
  • 无效等价类:小于0(负值,物理上不可能)
  • 无效等价类:大于300(超出传感器量程)

我在项目中遇到过一个问题:某次测试只覆盖了有效等价类,结果在实车路试时,轮速信号因为电磁干扰出现了负值,系统直接崩溃了。嗯,从那以后,我每次都会把无效等价类单独列出来,哪怕看起来再「不可能」。

我的小技巧:画一张等价类划分表,左边写「有效」,右边写「无效」。每个类后面标注对应的测试用例编号。这样评审时一目了然。

4.2 边界值分析:Bug最爱藏在边界上

等价类划分的搭档,就是边界值分析。你想想看,程序里那些判断条件——if (speed >= 0 && speed <= 300)——最容易出问题的地方在哪?就是边界。

边界值分析的原则很简单:取每个等价类的边界值,以及边界两侧紧邻的值。一般取:最小值、略大于最小值、正常值、略小于最大值、最大值。

拿ABS的制动压力控制阀来说,它的PWM占空比范围是5%~95%。那我们要测哪些值?

测试点 取值 说明
下边界 5% 最小允许值
下边界+1 6% 紧邻下边界的有效值
上边界-1 94% 紧邻上边界的有效值
上边界 95% 最大允许值
下边界-1 4% 无效值,预期应被钳位或报错
上边界+1 96% 无效值,预期应被钳位或报错
注意:我曾经在某个项目中只测了边界值本身,没测边界+1/-1。结果上线后发现,系统在边界值处能正常工作,但紧邻边界的地方反而触发了异常。后来查代码,发现是浮点数比较精度问题。所以,边界值分析一定要把「邻居」也带上。

4.3 因果图法:理清输入输出的逻辑关系

等价类和边界值,主要针对单个输入。但ABS系统里,很多功能是多个输入组合决定的。比如:

  • 轮速差 > 阈值 且 制动踏板被踩下 → 触发ABS调节
  • 轮速差 > 阈值 但 制动踏板未踩下 → 不触发

这种「多个条件决定一个结果」的场景,用因果图法最合适。

因果图法的步骤,我总结为四步:

  1. 列出原因(输入条件):比如「轮速差超限」「制动踏板信号有效」「车速大于10km/h」
  2. 列出结果(输出动作):比如「激活ABS调节」「点亮ABS故障灯」
  3. 画出因果关系:用与、或、非等逻辑门连接
  4. 生成决策表:把因果图转成表格,每一列就是一个测试用例

举个例子,ABS自检逻辑:

原因:
C1: 点火开关ON
C2: 系统供电正常
C3: 轮速传感器自检通过

结果:
E1: ABS系统进入待命状态
E2: 点亮ABS故障灯

逻辑关系:
E1 = C1 AND C2 AND C3
E2 = NOT (C1 AND C2 AND C3)

对应的决策表是这样的:

用例 C1 C2 C3 E1 E2
1 1 1 1 1 0
2 1 1 0 0 1
3 1 0 1 0 1
4 0 1 1 0 1
关键点:因果图法能帮你发现「遗漏的组合」。我见过不少测试用例,只覆盖了「所有条件都满足」和「所有条件都不满足」这两种情况,中间那些部分满足的场景全漏了。因果图法逼着你把每种组合都列出来。

4.4 正交实验法:用最少的组合覆盖最多的场景

因果图法有个问题:如果输入条件太多,组合数会爆炸。比如ABS系统有6个输入条件,每个条件有2种取值,那组合数就是2^6=64种。如果每个条件有3种取值,那就是729种。测不完。

这时候正交实验法就派上用场了。它的核心思想是:用最少的实验次数,覆盖所有因素之间的两两组合。

我举个例子。假设ABS的某个功能受4个因素影响:

  • A: 车速(低/中/高)
  • B: 路面附着系数(低/高)
  • C: 制动强度(轻/中/重)
  • D: 载荷状态(空载/满载)

全部组合是3×2×3×2=36种。但用正交表L18(3^2 × 2^2),只需要18个测试用例,就能覆盖所有两两组合。

正交表长什么样?

用例 A B C D
1 空载
2 满载
3 满载
... ... ... ... ...
怎么用? 我一般先查现成的正交表(网上有标准表库),或者用工具自动生成。别自己手算,容易出错。工具推荐:Allpairs、PICT,都是免费的。

4.5 四种方法怎么选?我的经验

最后说说我的选择策略:

  • 单个输入参数 → 等价类 + 边界值。这是基础,每个项目必做。
  • 多个输入有逻辑关系 → 因果图 + 决策表。适合功能逻辑复杂的模块。
  • 多个输入无强逻辑关系,但组合太多 → 正交实验法。适合参数配置类测试。
  • 安全关键功能 → 四种方法全上,再加基于模型的测试来兜底。

我曾经在一个ABS项目中,只用等价类和边界值就覆盖了80%的缺陷。但剩下的20%,全是组合逻辑导致的。从那以后,我再也不敢偷懒了——因果图和正交实验法,该用就得用。

好,这章就到这儿。下一章咱们聊聊「基于模型的测试用例生成」,那才是真正的大杀器。