2. 危害分析与风险评估(HARA)
HARA,全称 Hazard Analysis and Risk Assessment。说白了,它就是功能安全开发的“第一道安检门”。
很多刚入行的工程师觉得这步就是填表格、走形式。我刚开始做ADAS项目时也这么想。直到有一次,一个转向系统的潜在危害被遗漏,后期整改花了三个月。嗯,从那以后,我再也不敢轻视HARA了。
这一章,我们就来拆解HARA的完整流程。从场景定义到ASIL定级,每一步我都会结合实战经验来讲。
2.1 HARA方法论概述
HARA的核心目标就一个:找出系统在哪些场景下会出问题,以及问题有多严重。
我个人习惯把HARA分成四个阶段:
- 场景定义:车在哪儿开?谁在开?周围有什么?
- 危害识别:系统故障会导致什么危险行为?
- 风险评估:评估S、E、C三个参数。
- ASIL定级:根据S、E、C查表,确定安全等级。
核心原则:HARA必须基于“合理的可预见的场景”。你不能假设所有驾驶员都是赛车手,也不能假设所有路况都是高速公路。
你想想看,如果场景定义太窄,风险就会被低估。如果场景定义太宽,安全目标又会过于严苛,导致成本失控。这个平衡点,就是经验所在。
2.2 运行场景定义
场景定义是HARA的基石。场景定义错了,后面全白干。
我建议用“5W1H”法来定义场景:
- Who:谁在驾驶?专业司机?普通用户?老人?
- What:车辆在做什么?巡航?变道?泊车?
- Where:在什么路上?高速?市区?乡村?
- When:白天?夜晚?雨天?雪天?
- Why:为什么会发生这个场景?
- How:场景如何演变?
实战技巧:我习惯把场景分为“正常场景”和“边缘场景”。正常场景覆盖95%的日常使用,边缘场景覆盖那5%的极端情况。很多安全事故恰恰发生在边缘场景里。
举个例子,一个ACC自适应巡航系统:
| 场景维度 | 典型描述 |
|---|---|
| 运行模式 | 高速巡航,设定速度120km/h |
| 环境条件 | 白天,干燥路面,能见度良好 |
| 用户行为 | 驾驶员未干预,信任系统 |
| 时间窗口 | 前车切入,距离从100m骤降到30m |
| 系统状态 | 传感器正常,但目标切换延迟 |
2.3 危害识别
危害识别,就是找出“系统故障会导致什么危险行为”。
我个人习惯从三个维度去思考:
- 功能异常:该加速时没加速,该刹车时没刹车。
- 非预期行为:没打转向灯,车自己变道了。
- 信息错误:显示前方无车,实际有车。
我记得在做一个线控制动项目时,团队只关注了“制动失效”这个危害。但后来发现,“制动意外激活”在高速场景下同样致命。这个教训让我养成了“正反双向思考”的习惯。
注意:危害识别不是一次性的。随着系统设计深入,新的危害可能会暴露。我建议在每个开发阶段都做一次危害回顾。
2.4 严重度(S)评估
严重度S,评估的是危害发生后,对人员造成的伤害程度。
ISO 26262定义了四个等级:
| 等级 | 描述 | 典型场景 |
|---|---|---|
| S0 | 无伤害 | 信息娱乐系统故障 |
| S1 | 轻伤(可治疗) | 低速碰撞,轻微擦伤 |
| S2 | 重伤(需住院) | 中等速度碰撞,骨折 |
| S3 | 致命伤 | 高速碰撞,死亡 |
评估S值时,我通常会问自己三个问题:
- 这个场景下,车速是多少?
- 碰撞对象是什么?行人?车辆?护栏?
- 有没有二次伤害的可能?比如追尾后起火。
关键点:S值评估的是“最坏情况下的合理后果”,不是平均情况。如果最坏情况是S3,那就按S3来定级。
2.5 暴露率(E)评估
暴露率E,评估的是“这个场景发生的概率”。
ISO 26262定义了四个等级:
| 等级 | 描述 | 典型频率 |
|---|---|---|
| E0 | 几乎不可能 | 每年少于1次 |
| E1 | 很少发生 | 每年几次 |
| E2 | 偶尔发生 | 每月几次 |
| E3 | 频繁发生 | 几乎每次驾驶 |
| E4 | 持续暴露 | 每次驾驶都处于该场景 |
你想想看,高速巡航场景的E值肯定比“夜间暴雨中倒车”要高。但要注意,E值评估的是“场景暴露”,不是“故障暴露”。
实战经验:我见过很多团队把E值估低了。比如“行人横穿高速”这个场景,虽然概率低,但一旦发生就是致命。我的建议是:用真实路采数据来校准E值,别靠拍脑袋。
2.6 可控性(C)评估
可控性C,评估的是“驾驶员或其他人员能否避免伤害”。
ISO 26262定义了三个等级:
| 等级 | 描述 | 典型情况 |
|---|---|---|
| C0 | 完全可控 | 驾驶员能轻松应对 |
| C1 | 简单可控 | 大部分驾驶员能应对 |
| C2 | 一般可控 | 部分驾驶员能应对 |
| C3 | 难以控制 | 几乎无法避免伤害 |
评估C值时,我习惯考虑三个因素:
- 反应时间:驾驶员有多少时间反应?
- 信息清晰度:系统有没有给出明确的警告?
- 驾驶员状态:是专注驾驶还是分心?
避坑指南:我曾经在一个项目中,团队认为“只要驾驶员踩刹车就能避免事故”,所以给了C1。但后来发现,在湿滑路面上,即使踩了刹车,制动距离也不够。可控性评估一定要考虑物理极限。
2.7 ASIL等级确定
有了S、E、C三个值,就可以查表确定ASIL等级了。
ISO 26262的ASIL定级表如下:
| S | E | C1 | C2 | C3 |
|---|---|---|---|---|
| S1 | E1 | QM | QM | QM |
| E2 | QM | QM | ASIL A | |
| E3 | QM | ASIL A | ASIL B | |
| S2 | E1 | QM | QM | ASIL A |
| E2 | QM | ASIL A | ASIL B | |
| E3 | ASIL A | ASIL B | ASIL C | |
| S3 | E1 | QM | ASIL A | ASIL B |
| E2 | ASIL A | ASIL B | ASIL C | |
| E3 | ASIL B | ASIL C | ASIL D |
举个例子:
- 场景:高速巡航时,ACC系统意外急刹车。
- S评估:后车追尾,可能导致重伤 → S2
- E评估:高速巡航是常见场景 → E3
- C评估:后车驾驶员反应时间短,难以避免 → C2
- 查表:S2 + E3 + C2 = ASIL B
核心原则:ASIL等级越高,安全要求越严格。ASIL D要求最严,QM(质量管理)要求最宽松。但记住,QM不代表“不需要安全”,只是不需要按ISO 26262的流程来开发。