第3章 HARA分析:危害分析与风险评估方法

HARA,全称是 Hazard Analysis and Risk Assessment。说白了,就是找出系统可能出什么危险,然后评估这个危险有多严重。我见过不少团队,一上来就急着写代码、搭架构,结果做到一半发现某个危害根本没法处理,只能推倒重来。嗯,HARA 就是用来避免这种悲剧的。

3.1 什么是HARA?

HARA 是 ISO 26262 的起点。没有它,后面的所有工作都是空中楼阁。它的核心目标就三个:

  • 识别危害:系统在什么情况下会出问题?
  • 评估风险:这个危害有多大概率发生?后果有多严重?
  • 确定ASIL:根据风险等级,决定需要多严格的安全措施。

我个人习惯把 HARA 比作「体检」。你不体检,就不知道身体哪里有问题。等出了问题再治,成本就高了。HARA 就是给系统做一次全面体检。

核心原则:HARA 必须在项目早期完成,最好在概念阶段就开始。越往后拖,改造成本越高。

3.2 运行场景定义

做 HARA 之前,你得先搞清楚系统会在什么场景下运行。你想想看,一辆车在高速公路上和在小巷子里,危险程度能一样吗?

运行场景包括:

  • 环境条件:白天/黑夜、晴天/雨天/雪天、城市/乡村/高速
  • 车辆状态:静止、低速、中速、高速、转弯、刹车
  • 驾驶员行为:正常驾驶、分心、疲劳、误操作
  • 其他交通参与者:行人、自行车、其他车辆、动物

我记得有一次做 EPS(电动助力转向)的 HARA,我们漏掉了「冰雪路面」这个场景。结果后来测试发现,在冰雪路面上,转向助力突然失效会导致车辆失控。嗯,从那以后,我每次都会把环境条件列得特别细。

小技巧:运行场景不要只列常见的,极端情况往往才是真正的风险点。比如「暴雨+夜间+高速+弯道」这种组合场景,一定要覆盖到。

3.3 严重度(S)评估

严重度,就是危害发生后,对人员造成的伤害程度。ISO 26262 把严重度分为 4 个等级:

S等级 描述 示例
S0 无伤害 轻微不适,无需医疗
S1 轻伤 擦伤、扭伤,可自行恢复
S2 重伤 骨折、内出血,需要住院
S3 致命伤 死亡或永久性残疾

评估严重度时,我建议你考虑最坏情况。比如刹车失灵,最坏情况就是车毁人亡,那 S 就是 3。不要想着「也许驾驶员反应快能避开」,那是可控性(C)的事,不是严重度的事。

注意:严重度只考虑伤害程度,不考虑发生概率。这是新手最容易搞混的地方。S 评估的是「如果发生了,后果有多严重」,而不是「发生的可能性有多大」。

3.4 暴露率(E)评估

暴露率,就是危害场景发生的概率。ISO 26262 把暴露率分为 4 个等级:

E等级 描述 示例
E0 几乎不可能 车辆被陨石击中
E1 非常低 每年发生一次
E2 低 每月发生一次
E3 中等 每周发生一次
E4 高 每天发生一次

暴露率评估,说白了就是看这个场景「常见不常见」。比如「雨天行驶」这个场景,在南方可能 E4,在沙漠地区可能 E1。所以,暴露率跟车辆的目标市场有很大关系。

我曾经做过一个项目,客户要求 E 等级按全球平均数据来。结果产品在印度市场出了问题——印度雨季的暴雨频率远超全球平均。嗯,从那以后,我每次都会问清楚:这车卖到哪?

建议:暴露率最好用实际数据支撑,比如路况统计、气候数据、用户行为调研。不要拍脑袋。

3.5 可控性(C)评估

可控性,就是驾驶员或其他人员能否控制住局面,避免伤害。ISO 26262 把可控性分为 3 个等级:

C等级 描述 示例
C0 完全可控 驾驶员可以轻松应对
C1 简单可控 大多数驾驶员可以应对
C2 一般可控 部分驾驶员可以应对
C3 难以控制 几乎无法应对

可控性评估,我个人的经验是:不要假设驾驶员是赛车手。你要考虑的是「普通驾驶员」,甚至「新手驾驶员」。比如刹车失灵,就算老司机也很难控制,那 C 就是 3。

避坑指南:我曾经见过有人把 C 等级评估得很低,理由是「驾驶员可以踩刹车」。但问题是,如果危害本身就是刹车失灵呢?所以,评估可控性时,一定要考虑危害发生的具体场景,不要想当然。

3.6 ASIL等级确定

有了 S、E、C 三个参数,就可以查表确定 ASIL 等级了。ISO 26262 给出了一个 4x5x4 的矩阵,我把它简化成下面这个表格:

S E C ASIL
S1 E1 C1 QM
S1 E2 C2 ASIL A
S2 E2 C2 ASIL B
S2 E3 C2 ASIL C
S3 E3 C3 ASIL D

你想想看,如果 S=3(致命)、E=4(每天发生)、C=3(难以控制),那 ASIL 就是 D,最高等级。反过来,如果 S=1(轻伤)、E=1(几乎不可能)、C=1(完全可控),那就是 QM,不需要额外安全措施。

关键点:ASIL 等级越高,开发流程越严格,成本也越高。所以,不要盲目追求高 ASIL,合理评估才是正道。

3.7 HARA分析流程

下面这张图是我自己总结的 HARA 分析流程,你可以参考一下:

HARA分析流程图 HARA分析流程图 定义运行场景 识别危害 评估严重度(S)、暴露率(E)、可控性(C) 确定ASIL等级 制定安全目标 注意 每个危害都要单独 评估S、E、C 不要合并评估

这个流程看起来简单,但实际操作中,每个环节都需要反复讨论和确认。我建议你至少组织 3 次评审:第一次是场景定义评审,第二次是 S/E/C 评估评审,第三次是 ASIL 确定评审。

3.8 实战案例:电动助力转向(EPS)

拿 EPS 举个例子。假设我们识别出一个危害:转向助力突然失效。

  • 运行场景:高速行驶(120km/h),夜间,雨天
  • S 评估:转向失效可能导致车辆失控,造成严重事故 → S3
  • E 评估:高速+夜间+雨天,虽然不是每天发生,但也不算罕见 → E3
  • C 评估:突然失去助力,普通驾驶员很难控制 → C3
  • ASIL:S3 + E3 + C3 = ASIL D

你看,一个看似简单的转向助力失效,最终 ASIL 等级是 D。这意味着你需要非常严格的安全措施,比如冗余设计、故障诊断、降级模式等等。

经验之谈:ASIL D 的项目,开发成本通常是 QM 项目的 3-5 倍。所以,HARA 做得越准确,你省的钱就越多。不要为了省事而低估风险,也不要为了安全而过度设计。

3.9 常见误区

做 HARA 时,我见过不少翻车案例。这里列几个常见的:

  • 场景定义太粗:只写「行驶中」,不写具体环境。结果评估出来的 S/E/C 没有参考价值。
  • S/E/C 混淆:把暴露率当成严重度,或者把可控性当成暴露率。记住,它们是三个独立的维度。
  • 忽略组合场景:只考虑单一故障,不考虑多个故障同时发生。比如「刹车失灵+转向卡死」这种组合。
  • 过度依赖经验:没有数据支撑,全凭感觉。我建议你至少找 3 个不同背景的人一起评估,互相挑战。

避坑指南:我曾经见过一个团队,把 EPS 的 ASIL 定成了 B,理由是「转向失效不会直接导致死亡」。但他们忽略了——转向失效可能导致车辆撞上行人。所以,评估严重度时,一定要考虑对所有人的伤害,不只是驾驶员。

3.10 小结

HARA 是功能安全的基石。它不复杂,但需要细心和严谨。记住三个关键词:场景、参数、等级。把场景定义清楚,把 S/E/C 评估准确,ASIL 自然就出来了。

嗯,这一章就到这里。内容不多,但都是干货。你可以在实际项目中多练练,慢慢就有感觉了。