1. MIL测试基础概念
什么是MIL测试?
MIL,全称Model-in-the-Loop,中文叫「模型在环测试」。说白了,就是在开发早期,用纯仿真环境来验证你的控制算法模型。
我个人习惯把MIL测试比作「纸上谈兵」。你想想看,在真正写代码、焊电路板之前,先用Simulink这样的工具把算法跑一遍,看看逻辑对不对、响应快不快。这比等到硬件做出来再发现问题,成本低太多了。
我记得刚入行那会儿,有个项目直接跳过了MIL测试。结果呢?算法模型里有个除零错误,直到HIL阶段才被发现。改一个模型参数只要5分钟,但那时候要改硬件电路板,整整折腾了两周。嗯,从那以后,我再也不敢跳过MIL了。
MIL测试的核心价值:
- 在开发早期发现算法逻辑错误
- 验证功能需求是否被正确实现
- 评估控制策略的初步性能
- 降低后期返工成本
MIL测试在V模型中的位置
V模型大家应该都熟悉。左边是设计阶段,右边是测试阶段。MIL测试就在V模型的左上角,紧跟着「功能设计」之后。
为什么会放在这个位置?因为这时候你手里只有模型,没有代码,更没有硬件。但恰恰是这个时候,最容易发现设计层面的问题。
| V模型阶段 | 测试类型 | 测试对象 |
|---|---|---|
| 需求分析 | 需求评审 | 需求文档 |
| 功能设计 | 功能评审 | 功能规格 |
| 模型开发 | MIL测试 | Simulink模型 |
| 代码生成 | SIL测试 | 生成的C代码 |
| 硬件实现 | HIL测试 | 真实硬件 |
你看,MIL测试是V模型左侧的第一个测试环节。它就像一道安检门,把模型层面的问题挡在门外,不让它们流到后面的阶段。
MIL测试与SIL/HIL的区别
很多新手容易把这三个概念搞混。我简单说说它们的区别。
测试对象不同
- MIL:测试的是Simulink模型,纯数学运算
- SIL:测试的是从模型生成的C代码,但还是在PC上跑
- HIL:测试的是真实的ECU硬件,接上真实的传感器和执行器
测试环境不同
MIL和SIL都在开发电脑上跑,只不过MIL跑的是模型,SIL跑的是代码。HIL就不一样了,需要专门的硬件平台,比如dSPACE、NI的实时系统。
测试目的不同
MIL主要看算法对不对,SIL主要看代码和模型是否一致,HIL主要看硬件能不能正常工作。
我的经验之谈:
我曾经在一个项目中,MIL测试覆盖率做到95%以上,但SIL测试时发现很多分支根本走不到。为什么?因为代码生成工具对某些模型结构处理得不好。所以我的建议是:MIL和SIL的测试用例最好分开设计,不要直接复用。
一个简单的对比表格
| 对比项 | MIL | SIL | HIL |
|---|---|---|---|
| 测试对象 | 模型 | 代码 | 硬件 |
| 运行环境 | PC仿真 | PC仿真 | 实时硬件 |
| 实时性要求 | 无 | 无 | 有 |
| 测试速度 | 快 | 较快 | 慢 |
| 发现问题阶段 | 早期 | 中期 | 后期 |
| 修复成本 | 低 | 中 | 高 |
注意:
不要以为MIL测试做得好,后面SIL和HIL就可以放松。每个阶段都有它独特的价值。我见过太多人把MIL测试当成走过场,结果到了HIL阶段才发现模型里有些逻辑在真实硬件上根本跑不通。
小结
MIL测试是整个测试链条的第一环,也是最容易被人忽视的一环。但恰恰是这一环,决定了后续测试工作的质量基础。
我个人建议:
- MIL测试要尽早开始,最好模型画完一个功能就测一个功能
- 测试用例要覆盖正常工况、边界工况和异常工况
- 不要只盯着功能对不对,还要看覆盖率够不够
下一章,我会详细讲讲MIL测试的覆盖率到底有哪些类型,以及怎么去分析和提升它们。