第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测试的覆盖率就能上去。

下一章,咱们聊聊测试用例的自动化执行。到时候我会分享一些我常用的脚本模板,保证实用。