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

做MIL测试这么多年,我见过太多人一上来就闷头写用例。结果呢?要么测了半天没覆盖到关键点,要么用例数量爆炸,跑都跑不完。说白了,测试用例设计不是拍脑袋,是有章法的。

今天咱们就聊聊三个最基础、也最实用的方法:等价类划分、边界值分析、因果图法。这三个方法,我几乎每个项目都会用到。

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

先问个问题:一个输入范围是0到100的整数,你要测多少个值才能放心?理论上,101个。但实际项目中,你不可能这么干。

等价类划分的思路很简单:把输入域分成若干「等价类」,每个类里挑一个代表测就行了。因为同一个类里的值,程序处理逻辑是一样的。

举个例子,我之前做过一个电池SOC(荷电状态)的模型。输入范围是0%到100%。

  • 有效等价类:0 ≤ SOC ≤ 100(正常范围)
  • 无效等价类:SOC < 0(低于下限)
  • 无效等价类:SOC > 100(高于上限)

每个类里挑一个值,比如0、50、-5、120,四个用例就覆盖了全部逻辑。效率提升不是一点半点。

核心原则:每个等价类至少覆盖一次。无效等价类也要测,很多bug就藏在边界外面。

3.2 边界值分析:bug最喜欢待的地方

等价类划分解决了「测哪些值」的问题,但有个坑——边界附近最容易出bug。为什么?因为开发写代码时,边界条件最容易写错。比如 if (x >= 0) 写成 if (x > 0),差一个等号,天差地别。

边界值分析就是专门对付这个的。它要求我们不仅测等价类里的值,还要测边界上的值。

还是那个SOC的例子,范围0到100。边界值要测哪些?

  • 最小值:0
  • 略大于最小值:1
  • 略小于最小值:-1(无效)
  • 最大值:100
  • 略小于最大值:99
  • 略大于最大值:101(无效)

你看,从6个边界值就能发现很多隐藏问题。我个人习惯是:等价类划分打底,边界值分析补刀。两者结合,覆盖率就上去了。

我的经验:对于连续信号(比如电压、温度),边界值分析尤其重要。我曾经因为没测-40°C的边界值,结果台架实验时模型直接崩了。从那以后,边界值我必测。

3.3 因果图法:理清复杂逻辑

等价类和边界值主要针对单个输入。但实际模型里,多个输入之间往往有复杂的逻辑关系。这时候,因果图法就派上用场了。

因果图法的思路是:先列出所有输入条件(因),再列出所有输出结果(果),然后画出它们之间的逻辑关系图。最后根据图来设计测试用例。

举个例子,一个简单的电池保护逻辑:

  • 输入条件(因)
    • C1:电池温度 > 60°C
    • C2:电池电流 > 200A
    • C3:SOC < 10%
  • 输出结果(果)
    • E1:触发过温保护
    • E2:触发过流保护
    • E3:触发欠压保护

逻辑关系是:C1导致E1,C2导致E2,C3导致E3。但实际项目中,这些条件可能组合出现,比如同时过温和过流。因果图就能帮你理清这些组合。

下面是我画的一个简单因果图,你看一眼就明白了:

C1: 温度>60°C C2: 电流>200A C3: SOC<10% AND E1: 过温保护 E2: 过流保护 E3: 欠压保护 因果图示例:电池保护逻辑

画完因果图后,就可以设计测试用例了。每个「因」的组合都要覆盖到。比如:

用例编号 C1 C2 C3 预期结果
TC-01 1 0 0 E1触发
TC-02 0 1 0 E2触发
TC-03 0 0 1 E3触发
TC-04 1 1 0 E1和E2同时触发
TC-05 0 0 0 无保护触发
注意:因果图法容易产生组合爆炸。如果输入条件超过5个,建议用正交实验法或Pairwise来精简用例。我曾经在一个项目里遇到12个输入条件,全组合要4096个用例,用Pairwise压缩到32个,效果一样好。

3.4 三种方法的配合使用

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

  1. 先用等价类划分:把每个输入的范围搞清楚,分出有效和无效类。
  2. 再用边界值分析:在等价类的基础上,补充边界附近的测试点。
  3. 最后用因果图法:处理多个输入之间的逻辑关系,确保组合场景也覆盖到。

举个例子,一个电机转速控制模型:

  • 输入:目标转速(0-10000 rpm)、油门开度(0-100%)、刹车信号(0或1)
  • 输出:实际转速、故障码

等价类划分:目标转速分0-5000、5001-10000两个有效类,再加负值和大于10000的无效类。油门开度类似。

边界值分析:目标转速的边界是0、1、9999、10000、-1、10001。油门开度的边界是0、1、99、100、-1、101。

因果图法:刹车信号为1时,无论目标转速和油门开度如何,实际转速必须为0。这就是一个典型的逻辑关系。

你看,三种方法一结合,测试用例既全面又高效。嗯,这就是我多年项目里总结出来的套路。

避坑指南:我曾经在一个项目里只用了等价类划分,没做边界值分析。结果模型在转速为0时有个除零错误,愣是没发现。后来加了个边界值测试,一秒就暴露了。所以,千万别偷懒。

好了,测试用例设计的基础就这些。记住:等价类划分管范围,边界值分析管边界,因果图法管逻辑。三者配合,你的MIL测试覆盖率绝对差不了。


专注资料整理