第3章:测试用例设计:基于需求的测试用例设计方法、等价类划分与边界值分析在MIL中的应用
大家好,我是老张。今天咱们聊聊测试用例设计。
很多刚入行的朋友问我:“MIL测试到底测什么?怎么测?”
我的回答很简单:测需求,测边界,测异常。这九个字,基本概括了MIL测试的核心。
但真正落地的时候,你会发现事情没那么简单。我见过太多团队,模型跑得飞起,覆盖率也好看,结果一集成到HIL就崩了。为什么?因为测试用例设计出了问题。
3.1 基于需求的测试用例设计方法
说白了,MIL测试的第一原则就是:需求怎么写,测试就怎么来。
这不是废话。你想想看,如果需求说“当车速大于30km/h时,车门自动落锁”,那你的测试用例至少得覆盖:
- 车速刚好30km/h时,锁不锁?
- 车速从29跳到31,瞬间变化时,锁不锁?
- 车速从31掉到29,会不会解锁?
这些细节,需求文档里往往不会写那么细。但作为测试工程师,你得替需求方想清楚。
核心原则:每个功能需求,至少对应一个正向测试用例和一个负向测试用例。
我在项目中遇到过一种情况:需求写的是“当发动机转速超过4000rpm时,激活超速报警”。我们当时只测了4001rpm报警,结果忽略了转速从3999突然跳到4001的瞬态场景。后来客户试车时发现,急加速时报警灯闪了一下就灭了,根本来不及看。这就是典型的“需求覆盖不全”。
3.2 等价类划分在MIL中的应用
等价类划分,说白了就是“把无穷多的输入,分成有限的几类”。
比如一个油门踏板的开度信号,范围是0%到100%。你不可能每个百分比都测一遍,对吧?
那怎么办?分成几个区间:
| 等价类 | 输入范围 | 预期行为 |
|---|---|---|
| 无效低区 | 0%以下(如-5%) | 限幅为0% |
| 有效低区 | 0% ~ 20% | 怠速控制 |
| 有效中区 | 20% ~ 80% | 线性加速 |
| 有效高区 | 80% ~ 100% | 全油门加速 |
| 无效高区 | 100%以上(如105%) | 限幅为100% |
每个等价类里,你只需要选一个典型值来测。比如有效中区,测个50%就够了。为什么?因为模型在这个区间内的行为是线性的,测一个点就能代表整个区间。
我的小技巧:等价类划分时,别忘了考虑“时序等价类”。比如信号上升沿、下降沿、保持时间,这些在MIL里很容易被忽略。
3.3 边界值分析在MIL中的应用
边界值分析,是等价类划分的“好搭档”。
经验告诉我:80%的bug都出在边界上。这不是夸张,是真的。
比如上面那个油门踏板的例子,边界值就是:
- 0%(下限边界)
- 20%(低区与中区的分界)
- 80%(中区与高区的分界)
- 100%(上限边界)
而且,每个边界要测两个值:边界本身,和边界+1(或-1)。
注意:MIL测试中,边界值分析要特别关注“浮点数精度”问题。比如需求写的是“当温度大于等于85.0°C时开启风扇”,你用84.9999°C和85.0001°C去测,结果可能完全不同。我曾经因为浮点数舍入问题,漏掉了一个关键bug,后来在实车上风扇一直不转,排查了两天才发现是模型里用了float,而测试用例用的是double。
3.4 实战:一个完整的MIL测试用例设计示例
咱们拿一个实际功能来练练手:“电池过温保护”。
需求描述:当电池温度超过60°C时,系统降低充电功率至50%;当温度超过65°C时,停止充电。
第一步:等价类划分
- 正常区:0°C ~ 60°C(正常充电)
- 降功率区:60°C ~ 65°C(50%功率)
- 停止区:65°C以上(停止充电)
- 无效区:低于0°C(按低温保护处理,这里不展开)
第二步:边界值提取
- 60°C:降功率的触发点
- 65°C:停止充电的触发点
- 注意:还要测回滞区。比如温度从66°C降到64°C,会不会恢复充电?
第三步:设计测试用例
| 用例编号 | 输入温度 | 预期输出 | 测试类型 |
|---|---|---|---|
| TC_001 | 25°C | 100%充电功率 | 正常等价类 |
| TC_002 | 59.9°C | 100%充电功率 | 边界值(降功率前) |
| TC_003 | 60.0°C | 50%充电功率 | 边界值(降功率触发) |
| TC_004 | 60.1°C | 50%充电功率 | 边界值(降功率后) |
| TC_005 | 64.9°C | 50%充电功率 | 边界值(停止前) |
| TC_006 | 65.0°C | 停止充电 | 边界值(停止触发) |
| TC_007 | 65.1°C | 停止充电 | 边界值(停止后) |
| TC_008 | 66°C → 64°C | 停止 → 恢复50%功率 | 回滞测试 |
你看,一个简单的过温保护功能,至少需要8个测试用例。而且这还没算上时序测试(比如温度变化速率)和异常测试(比如传感器故障)。
关键提醒:MIL测试不是“跑通就行”。每个测试用例都要有明确的通过/失败标准。比如TC_003,如果模型在60.0°C时没有降功率,那就是bug。别跟我说“差0.1°C无所谓”,在汽车电子里,0.1°C可能就是安全与事故的区别。
3.5 我的避坑指南
做MIL测试这么多年,我踩过不少坑。分享几个典型的:
- 别只测稳态,忘了瞬态。我曾经只测了温度稳定在65°C时的行为,结果忽略了温度从60°C快速升到70°C的瞬态过程。模型在快速变化时,输出出现了毛刺,导致充电继电器误动作。
- 边界值要测“两边”。比如60°C这个边界,不仅要测59.9和60.0,还要测60.0和60.1。因为模型里可能用了“大于等于”和“大于”两种不同的比较逻辑。
- 别忘了“无效输入”。比如温度传感器短路,输出0V,对应温度-40°C。你的模型能正确处理吗?我见过一个模型,输入-40°C时直接除以零,仿真崩溃了。
我的习惯:每次设计测试用例前,先画一张“输入-输出映射表”。把所有的等价类和边界值列出来,然后一个一个打勾。这样不容易漏。
好了,这一章的内容就到这里。测试用例设计,说白了就是“把需求翻译成可执行的测试步骤”。等价类划分帮你减少测试数量,边界值分析帮你抓住关键点。两者结合,MIL测试的覆盖率就能上去。
下一章,咱们聊聊测试用例的自动化执行。到时候我会分享一些我常用的脚本模板,保证实用。