第1章:测试用例设计方法(上)——等价类划分、边界值分析、决策表测试在MIL中的应用
大家好,我是老张。做MIL测试这些年,我见过太多人一上来就闷头写测试用例,结果测了半天,关键bug一个没抓到。说白了,测试用例设计不是拍脑袋,得有章法。今天咱们就聊聊MIL测试里最常用的三种方法:等价类划分、边界值分析、决策表测试。
我个人习惯把这三招称为「测试用例设计的三大基本功」。你想想看,MIL测试的对象是模型,模型里无非就是输入、输出、逻辑判断。这三招正好对应着这三类场景。嗯,咱们一个一个说。
1.1 等价类划分:别做无用功
等价类划分,说白了就是把输入数据分成几个「类」。同一类里的数据,测一个就够了。为什么?因为程序对同一类数据的处理逻辑是一样的。
我在项目中遇到过一件事。有个同事给一个车速计算模块写了50个测试用例,从0km/h到200km/h,每隔5km/h写一个。我问他:「你测过0和5的区别吗?」他愣了一下。其实0到200之间,只要算法没分段,测一个值就够了。这就是典型的等价类没划分好。
具体怎么划分?我一般分三步走:
- 识别输入条件——看看模型有哪些输入,取值范围是什么
- 划分有效等价类——符合规格要求的输入值集合
- 划分无效等价类——不符合规格要求的输入值集合
举个例子,一个油门踏板信号,范围是0%到100%。那有效等价类就是[0, 100],无效等价类就是小于0和大于100。你想想看,是不是很简单?
1.2 边界值分析:bug最爱藏在边界上
边界值分析,这个名字听着挺唬人,其实道理很简单——bug最爱藏在边界上。为什么?因为开发写代码的时候,最容易搞错的就是边界条件。比如「大于等于」写成了「大于」,或者数组下标从0开始还是从1开始搞混了。
我记得有一次,一个同事测一个电池SOC(荷电状态)的估算模型。他测了0%、50%、100%三个点,全过了。结果实车路试的时候,SOC到0%时系统直接崩溃。后来一查,模型里对0%的处理有个除零错误。你说冤不冤?
边界值分析的核心思想是:取边界值以及边界值两边的值。具体来说:
- 取最小值(min)
- 取略大于最小值(min+1)
- 取略小于最小值(min-1)——如果存在
- 取最大值(max)
- 取略小于最大值(max-1)
- 取略大于最大值(max+1)——如果存在
还是拿油门踏板信号举例,范围0%到100%。边界值测试用例应该包括:-1%、0%、1%、99%、100%、101%。一共6个值,比等价类划分多了几个,但覆盖的bug概率高得多。
1.3 决策表测试:把逻辑理清楚
等价类划分和边界值分析主要对付「数值型」输入。但模型里还有大量的「逻辑型」判断——条件组合。这时候就得用决策表了。
决策表,说白了就是一个表格。表格的每一列代表一种条件组合,每一行代表一个条件或动作。你想想看,这不就是咱们高中时候学的真值表吗?
我一般用四步法来构建决策表:
- 列出所有条件——每个条件只有真/假两种取值
- 列出所有动作——模型在每种条件下应该执行什么操作
- 生成条件组合——2的n次方种组合(n是条件个数)
- 填充动作——根据规格要求,填写每种组合对应的动作
举个例子,一个简单的制动辅助系统模型。条件有两个:车速是否大于30km/h(A),制动踏板是否被踩下(B)。动作有两个:激活辅助制动(X),不激活(Y)。
| 条件/动作 | 组合1 | 组合2 | 组合3 | 组合4 |
|---|---|---|---|---|
| A: 车速 > 30km/h | 真 | 真 | 假 | 假 |
| B: 制动踏板踩下 | 真 | 假 | 真 | 假 |
| X: 激活辅助制动 | 是 | 否 | 否 | 否 |
| Y: 不激活 | 否 | 是 | 是 | 是 |
你看,4种组合,一目了然。如果条件增加到3个,那就是8种组合。条件越多,组合数呈指数增长。这时候就需要用一些技巧来精简了。
1.4 三种方法的组合使用
这三种方法不是孤立的。我在实际项目中,经常把它们组合起来用。比如:
- 先用等价类划分确定输入的大类
- 再用边界值分析补充边界附近的测试点
- 最后用决策表覆盖逻辑组合
举个例子,一个电池管理系统(BMS)的过温保护功能。输入是电池温度(范围-40°C到85°C)和充电状态(充电中/未充电)。输出是是否触发过温保护。
第一步,等价类划分:温度的有效等价类是[-40, 85],无效等价类是小于-40和大于85。充电状态的有效等价类是「充电中」和「未充电」。
第二步,边界值分析:温度边界值取-41、-40、-39、84、85、86。充电状态没有数值边界,跳过。
第三步,决策表:条件有两个——温度是否超过阈值(假设阈值是60°C),充电状态是否为「充电中」。生成4种组合,分别确定是否触发保护。
你看,三种方法一组合,测试用例既全面又高效。我个人习惯,每个MIL测试模块都会用这个流程走一遍,基本不会漏掉关键场景。
- 等价类划分——减少重复测试,提高效率
- 边界值分析——抓住bug高发区,提高覆盖率
- 决策表测试——理清逻辑组合,避免遗漏
嗯,这一章就到这里。下一章咱们聊聊因果图法和场景法在MIL中的应用。到时候我会分享一个我踩过的坑——因果图里的「不可能组合」是怎么把我坑惨的。敬请期待。