第2章:故障模型与故障类型

大家好,我是你们的老朋友。今天咱们聊聊故障模型和故障类型。说实话,这是功能安全测试里最基础、也最容易搞混的一块。我刚开始做安全测试那会儿,就吃过「分不清故障类型」的亏——明明是个瞬态故障,我愣是当永久故障去修,结果浪费了整整两周时间。

嗯,咱们今天就把这事彻底理清楚。

2.1 故障模型:我们到底在测什么?

先问个问题:你测试的时候,到底在「注入」什么?

说白了,故障模型就是「故障的抽象描述」。它告诉我们:故障长什么样?它怎么影响系统?

我个人习惯把故障模型分成三个层次:

  • 物理层故障:比如芯片引脚短路、电阻烧毁。这是最底层的。
  • 逻辑层故障:比如寄存器位翻转、内存数据错误。这是我们在测试中最常碰到的。
  • 系统层故障:比如传感器输出漂移、通信报文丢失。这更贴近实际应用。

我在项目中遇到过一件事:一个ADAS系统的雷达模块,物理层明明没问题,但系统层就是报错。后来一查,是CAN总线上的报文时序乱了。你看,这就是系统层故障的典型例子。

我的小建议:做故障注入测试时,别只盯着物理层。系统层的故障往往更隐蔽,也更致命。

2.2 永久故障:焊死了,跑不掉

永久故障,顾名思义——一旦发生,就永远存在。比如芯片内部短路、线路断路、焊点脱落。你重启一万次,它还是坏。

这类故障的特点很明确:

  • 持续存在:不会自己消失
  • 可复现:每次测试结果都一样
  • 容易检测:因为一直坏着,测试用例很容易抓到它

我记得有一次,客户反馈说ECU上电后某个传感器读数始终是0。我第一反应是「软件bug」,查了三天代码,啥也没找到。最后拿示波器一量——那个传感器的供电引脚虚焊了。嗯,这就是典型的永久故障。

避坑指南:我曾经犯过一个错——把永久故障当成瞬态故障去处理。结果呢?测试用例设计错了,覆盖率惨不忍睹。记住:永久故障要用「持续激励」的方式去测,别用「脉冲注入」。

2.3 瞬态故障:来了又走,防不胜防

瞬态故障,说白了就是「幽灵故障」。它突然出现,又突然消失。你抓它的时候它不在,你不抓它的时候它又冒出来。

最常见的例子:

  • 电磁干扰:比如电机启动时产生的尖峰脉冲,把数据线上的信号打乱了
  • 宇宙射线:嗯,你没听错。高能粒子穿过芯片,导致寄存器位翻转。这在航空电子里是家常便饭
  • 电源波动:电压瞬间跌落,导致逻辑电路误动作

你想想看,这类故障最头疼的地方在哪?——它不可复现。你测十次,可能只有一次出现。而且每次出现的时机、影响范围都不一样。

我个人习惯的做法是:用统计方法去评估。比如跑1000次故障注入,记录每次的结果,然后算概率。别指望一次就能抓到它。

关键点:瞬态故障的测试,核心不是「复现」,而是「覆盖」。你要确保你的安全机制能在故障发生的瞬间做出正确响应。

2.4 潜伏故障:沉睡的定时炸弹

潜伏故障,这是我最怕的一种。为什么?因为它平时不发作,关键时刻掉链子

举个例子:你车上的安全气囊控制器,里面有个看门狗定时器。这个定时器本身有个bug——在特定条件下会失效。但平时系统正常运行,你根本发现不了。直到某天发生碰撞,气囊该弹的时候没弹出来……

潜伏故障的特点:

  • 存在但不活跃:故障就在那里,但当前条件下不触发
  • 需要特定条件激活:比如特定的输入序列、特定的温度、特定的老化程度
  • 检测难度极高:常规测试根本覆盖不到

我记得在做一个BMS(电池管理系统)项目时,有个电流传感器的校准参数在EEPROM里。正常情况下读写都没问题。但有一次做高低温循环测试,温度从-40°C升到85°C,那个参数就丢了。嗯,这就是潜伏故障——平时好好的,温度一变就露馅。

我的经验:对付潜伏故障,最好的办法是「压力测试」和「边界测试」。把系统推到极限状态,那些沉睡的故障才会醒过来。

2.5 系统性故障 vs 随机硬件故障

这两个概念,ISO 26262里讲得很清楚。但我用大白话给你解释:

对比项 系统性故障 随机硬件故障
本质 设计或制造过程中的错误 硬件在使用过程中自然发生的失效
例子 软件算法bug、需求遗漏、时序冲突 电阻老化、晶体管击穿、焊点疲劳
能否消除 理论上可以(通过修改设计) 不能消除,只能降低概率
测试方法 代码审查、形式化验证、测试用例覆盖 故障注入、加速老化测试、FIT率计算

这里有个容易踩的坑:很多人把「软件bug」当成随机硬件故障去测。你想想看,软件bug是设计问题,你往代码里注入一个位翻转,能测出什么?测不出啊!

我自己的做法是:

  • 系统性故障:用静态分析、代码走查、需求追溯。说白了,从源头解决问题。
  • 随机硬件故障:用故障注入、FMEA、FTA。重点在「覆盖率」和「诊断覆盖率」。
注意:ISO 26262对这两种故障的处理策略完全不同。系统性故障靠「过程质量」来预防,随机硬件故障靠「安全机制」来检测和响应。别搞混了。

2.6 实战中的故障分类矩阵

最后,我给大家一个我在项目中实际用过的故障分类矩阵。每次做故障注入测试前,我都会先填这个表:

故障类型 典型表现 测试方法 安全机制示例
永久故障 信号恒为0或1 持续注入,观察响应 硬件冗余、看门狗
瞬态故障 数据位翻转、脉冲干扰 随机注入,统计评估 ECC校验、重试机制
潜伏故障 特定条件下才触发 边界测试、压力测试 自检程序、在线监控
系统性故障 所有单元一致失效 设计审查、形式化验证 多样性设计、独立开发
随机硬件故障 随机、不可预测 故障注入、FIT率分析 诊断覆盖率、安全状态

嗯,这个表我用了好多年。每次做新项目,第一件事就是拿这个表去跟系统工程师对齐。你想想看,如果连故障类型都没搞清楚,后面的测试设计就是空中楼阁。

好了,这一章的内容就到这。下一章咱们聊聊故障注入的具体方法——怎么设计注入点?怎么选故障模型?怎么评估覆盖率?到时候见。