当前位置:首页 > 科研成果库

测试验证技术:那些让工程师半夜惊醒的细节

2026-11-14 02:20:10小研科研成果库3

去年有家车企召回了几万台车。原因?一个控制器在低温启动时,CAN 报文会晚发 3 毫秒。

三毫秒。人眨一次眼要 100 到 400 毫秒。你端着咖啡都感觉不到这 3 毫秒。

但它让刹车指令错过了整车网络的仲裁窗口。后面的事,懂的都懂。

这类事每过一阵就来一次。每次出事,大家才想起测试验证,风头一过,又是那句“先发版吧,测试下周补”。这行干久了你会发现一个挺反直觉的事实:验证不是找 bug,它是把“我们对这个系统的无知边界在哪儿”这件事本身搞清楚。

先问问自己:你到底想证明什么

先问问自己:你到底想证明什么先问问自己:你到底想证明什么

我刚入行那几年,最怕听到的一句话就是“测过了”。

测过了?怎么测的?什么环境下?覆盖率多少?边界条件碰了几个?断言写在哪一层?

真的,很多团队的测试用例本质上是确认性测试——跑一遍系统,发现它没报错,于是盖章通过。这跟考试前只看一遍课本目录,然后说“我复习完了”,是同一种自信。

有效的验证,起点永远是一个可以被证伪的命题。比如“任何输入下状态机都不会进入非法态”,或者“从刹车信号发出到执行器动作,最坏延迟不超过 20 毫秒”。

这句话里每个词都得能被量化。“任何输入”是多大的输入空间?“最坏延迟”要不要考虑最差工况、最低电压、最高温度叠加在一起?

答不上来,就说明这个需求本身就是废的。需求废了,后面再豪华的工具链都是给一座沙堡刷防火涂料。

形式化验证:数学不骗人,用数学的人会

这几年形式化方法被吹得挺厉害。硬件圈其实早就用了——流一次片几百万上千万,谁也不敢拿“跑几个用例看看”去赌。

思路说白了就是:不枚举输入,而是把系统和性质都写成数学命题,让求解器去证明“所有情况下都成立”,或者反过来甩给你一个反例。

爽吗?爽。一个漂亮的反例,往往比跑十万条随机用例还有价值。

但坑也在这儿。

第一个坑,性质写错了比没写更可怕。你写了个“系统不会死锁”的属性,求解器证明它成立,团队欢呼。三个月后你发现——这属性写得太弱,压根没覆盖真实的死锁路径。工具没错。数学也没错。错的是人的那一层抽象。

第二个坑是状态爆炸。稍微复杂一点的并发协议,状态空间就是天文数字。你得做抽象、做切分、做假设。每一次假设,都是一句“我在这个范围内我保证”。范围外呢?天知道。

芯片形式化验证属性检查反例波形示意图芯片形式化验证属性检查反例波形示意图

所以我的看法是:形式化验证不是去替代仿真和测试,它是在仿真之前先给你一套硬约束。它擅长挖那种“一百年才触发一次”的角落问题,不擅长告诉你产品到底好不好用。

HIL 台架:只有熬过夜的人懂

汽车电子里,硬件在环几乎是绕不过去的一道坎。真车太贵,纯仿真又太假——传感器噪声、执行器延迟、线束阻抗,仿真里哪有那么脏。

HIL 就是中间那条路:真的控制器,假的被控对象。电机模型在实时机上跑,几十微秒一个步长,硬实时。

听起来很美。搭起来要命。

我见过太多台架,最后死在一个特别蠢的地方:模型步长 100 微秒,CAN 报文周期 10 毫秒,看着挺宽裕对吧。但那个电机模型里有一阶滤波,截止频率设得偏高,数值积分在高转速下开始振荡,波形上全是毛刺。测试工程师以为是 ECU 的问题,查了三天,最后发现是自己模型的锅。

这就是 HIL 的日常。你没法区分“被测件的问题”和“台架的问题”,除非你把台架本身也验证一遍。

所以成熟的团队会做台架标定:给一个已知输入,看输出是否符合解析解;拿真实 ECU 和参考模型并跑,比对偏差。麻烦。但这一步省了,后面所有结论都站不住脚。

汽车HIL硬件在环测试台架与实时仿真机实景汽车HIL硬件在环测试台架与实时仿真机实景

还有个反直觉的点——HIL 的价值大头不在“跑用例”,在于它能复现。现场那个偶发故障,你可以在台架上把温度、电压、报文时序一模一样地摆出来,反复触发。bug 一旦可复现,基本就死了一半。

AI 进了验证流程,是帮手还是新的变量

现在流行用大模型做测试生成、日志分析、失败聚类。有用,是真有用。

用 LLM 从需求文档里抽候选测试场景,效率提升实打实。把几万条失败日志丢进去做相似度聚类,人工看三天的事它十分钟给你结果。

但是——

把 AI 生成的东西当成“验证结论”,那就是另一码事了。生成用例本质是启发式搜索,它会大量产出“看起来像那么回事”的东西。你以为覆盖率涨了,其实只是数量涨了。

更麻烦的是,AI 系统本身也得被验证。一个感知模型,输入里加一点人眼看不出的扰动,输出就全变了。这东西怎么写需求?“识别率 99%”是平均值还是最坏值?在什么分布上?长尾场景又怎么算?

这块目前行业里也没有完全拿得出手的统一标准。有人拿场景库覆盖度说事,有人讲形式化约束下的鲁棒性验证,各家有各家的门派。没有标准,就意味着合同、责任、召回,全是模糊地带。

说点实在的

说点实在的说点实在的

如果让我给刚进这行的朋友一句话,我会说:把“证明它能工作”和“证明它不会失败”当成两件事。

前者是功能测试,做起来爽,能出漂亮报告。后者才是验证的真身,它枯燥、昂贵,还经常得出“我不确定”这种让人扫兴的结论。

但恰恰是那个“我不确定”,才让整个团队知道边界在哪。知道边界,才知道敢不敢发版。

至于工具——形式化也好,HIL 也好,AI 辅助也好,都是手段。手段选错了可以换。真正难的是,你今天有没有勇气对着老板说一句:“这个功能我还没测明白,先别发。”

这话不好说出口。但它比任何工具都值钱。