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测试的覆盖率到底有哪些类型,以及怎么去分析和提升它们。