第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。重点在「覆盖率」和「诊断覆盖率」。
2.6 实战中的故障分类矩阵
最后,我给大家一个我在项目中实际用过的故障分类矩阵。每次做故障注入测试前,我都会先填这个表:
| 故障类型 | 典型表现 | 测试方法 | 安全机制示例 |
|---|---|---|---|
| 永久故障 | 信号恒为0或1 | 持续注入,观察响应 | 硬件冗余、看门狗 |
| 瞬态故障 | 数据位翻转、脉冲干扰 | 随机注入,统计评估 | ECC校验、重试机制 |
| 潜伏故障 | 特定条件下才触发 | 边界测试、压力测试 | 自检程序、在线监控 |
| 系统性故障 | 所有单元一致失效 | 设计审查、形式化验证 | 多样性设计、独立开发 |
| 随机硬件故障 | 随机、不可预测 | 故障注入、FIT率分析 | 诊断覆盖率、安全状态 |
嗯,这个表我用了好多年。每次做新项目,第一件事就是拿这个表去跟系统工程师对齐。你想想看,如果连故障类型都没搞清楚,后面的测试设计就是空中楼阁。
好了,这一章的内容就到这。下一章咱们聊聊故障注入的具体方法——怎么设计注入点?怎么选故障模型?怎么评估覆盖率?到时候见。