2. 危害分析与风险评估(HARA)

好,咱们进入第二个章节。HARA,全称是 Hazard Analysis and Risk Assessment。这名字听着挺唬人,说白了就是一件事:找出系统可能出什么幺蛾子,然后评估这个幺蛾子到底有多严重

我个人习惯把 HARA 看作是功能安全设计的“地基”。地基没打好,后面盖多高的楼都悬。我在项目里见过不少团队,急着写安全需求,结果 HARA 做得马马虎虎,最后评审时被问得哑口无言。嗯,咱们今天就把这块地基夯实了。

2.1 HARA 的目的:我们为什么要做这个?

你可能会问:“我直接写代码、画电路板不行吗?干嘛非得先做这个分析?”

原因很简单:不分析,你就不知道危险在哪。不知道危险在哪,你设计的安全机制要么过度,要么不足。过度了浪费成本,不足了……那就是安全隐患。

HARA 的核心目的有三个:

  • 识别危害:找出系统在运行过程中,哪些故障或事件可能导致人员受伤。
  • 评估风险:判断这些危害发生的概率和严重程度。
  • 确定安全目标:为每个危害设定一个“必须达到的安全等级”,也就是 ASIL 等级。

说白了,HARA 就是回答三个问题:
“会出什么事?”
“这事有多糟?”
“我们得做到多好才能避免?”

重要提醒:HARA 不是一次性的工作。系统设计变了、使用场景变了,都得重新审视 HARA。我见过一个项目,因为没及时更新 HARA,导致后期安全目标跟实际系统对不上,返工成本极高。

2.2 危害识别方法:怎么找到那些“坑”?

危害识别,听起来像大海捞针。但其实有套路可循。常用的方法有几种,我挑最实用的讲。

2.2.1 头脑风暴与经验法

这方法最直接。把系统工程师、硬件工程师、软件工程师、测试工程师叫到一个屋子里,对着系统架构图,一个一个功能点去问:“如果这个功能失效了,会怎样?”

我在项目中遇到过,有一次讨论转向系统,一个刚入职的工程师问:“如果方向盘打左,车轮却往右转呢?”全场安静了三秒,然后大家意识到,这确实是个严重的危害。你看,有时候新人反而能跳出思维定势。

2.2.2 基于场景的分析

这个方法更系统。你得先定义系统的运行场景运行模式

举个例子,一个电动汽车的加速系统:

  • 场景:高速公路上行驶、市区拥堵路段、地下车库停车。
  • 模式:正常驾驶模式、巡航模式、倒车模式。

然后针对每个场景+模式的组合,去分析可能出现的危害。比如“高速公路上行驶 + 正常驾驶模式”下,如果加速踏板信号丢失,车辆突然减速,后车追尾怎么办?

2.2.3 功能失效分析

这个方法从系统功能出发,列出每个功能可能出现的失效行为。常见的失效类型包括:

  • 功能丧失:该有的功能没了。比如刹车踩下去没反应。
  • 功能异常:功能有了,但不对。比如刹车踩一点,却抱死了。
  • 功能非预期:不该有的功能出现了。比如没踩油门,车自己加速。

我个人习惯用一张表格来记录这些分析结果,清晰明了。

功能 失效类型 危害描述 潜在后果
加速控制 功能异常(非预期加速) 车辆在红灯前自动加速 碰撞行人或车辆
制动控制 功能丧失(无制动) 驾驶员踩刹车但车辆不减速 追尾或无法停车
转向控制 功能异常(反向转向) 方向盘左打,车轮右转 车辆失控,驶离车道

小技巧:做危害识别时,别只盯着“最坏情况”。有时候中等严重程度的危害,发生频率却很高,综合风险反而更大。我曾经就吃过这个亏,只关注了“高速失控”,忽略了“低速误加速”这种常见场景。

2.3 风险评估矩阵:给危害“打分”

危害找到了,接下来要评估风险。ISO 26262 里用的是风险评估矩阵,主要看三个维度:

  • S(Severity):严重度。伤害有多重?轻伤、重伤、还是致命?
  • E(Exposure):暴露概率。这个危险场景出现的频率高不高?
  • C(Controllability):可控性。驾驶员或其他人员能不能控制住局面?

这三个维度组合起来,就决定了 ASIL 等级(A、B、C、D)。D 是最严格的,A 相对宽松。如果三个维度都很低,那就是 QM(质量管理级),不需要按功能安全流程走。

2.3.1 严重度(S)怎么定?

严重度分四级:

  • S0:无伤害
  • S1:轻伤(比如擦伤、轻微扭伤)
  • S2:重伤(比如骨折、内出血)
  • S3:致命或危及生命

这里要注意,严重度评估的是伤害本身,不是故障本身。比如“刹车失灵”这个故障,如果发生在高速上,可能 S3;如果发生在停车场,可能 S2。

2.3.2 暴露概率(E)怎么定?

暴露概率分四级:

  • E0:几乎不可能
  • E1:很少发生(比如每年几次)
  • E2:偶尔发生(比如每月几次)
  • E3:频繁发生(比如每天都会遇到)

举个例子,“车辆在高速公路上以120km/h行驶”这个场景,对于经常跑高速的人来说,E3;对于只在市区开车的用户,可能 E1 甚至 E0。

2.3.3 可控性(C)怎么定?

可控性也分四级:

  • C0:完全可控
  • C1:简单可控(大多数驾驶员能应对)
  • C2:一般可控(部分驾驶员能应对)
  • C3:难以控制(几乎无法避免伤害)

这里有个坑,我提醒一下:不要高估驾驶员的能力。我曾经评估一个“突然失去动力”的危害,觉得驾驶员能滑行到路边,给了 C1。后来实际测试发现,在车流密集的路段,驾驶员根本来不及反应,直接就被追尾了。所以,可控性评估要保守一点。

2.3.4 查表定 ASIL

有了 S、E、C 的值,就可以查 ISO 26262 里的标准矩阵表了。我直接给你一个简化版:

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

你看,S3 + E3 + C3 就是 ASIL D,最严格。S1 + E1 + C1 就是 QM,基本不用管。

注意:这个矩阵只是简化版。实际项目中,每个公司可能会有自己的细化规则。但核心逻辑不变:越严重、越常见、越难控制,安全等级就越高

2.4 一个小例子:电动窗的 HARA

光讲理论太枯燥,咱们来个简单的例子——电动窗防夹功能

假设一个电动窗,在上升过程中如果检测到阻力,应该停止并下降。如果这个功能失效了,会怎样?

咱们做一下 HARA:

  • 危害:车窗上升时夹住乘客(比如小孩的手臂)。
  • 场景:乘客将手臂伸出窗外,然后操作车窗上升。
  • S(严重度):夹伤可能导致骨折或组织损伤,算 S2(重伤)。
  • E(暴露概率):乘客把手臂伸出窗外的情况,不算特别频繁,但也不罕见,给 E2。
  • C(可控性):一旦被夹住,乘客自己很难挣脱,其他人也不一定能及时反应,给 C2。

查表:S2 + E2 + C2 = ASIL B

所以,这个防夹功能需要按照 ASIL B 的要求来设计。这意味着要有足够的诊断覆盖率和安全机制,比如双通道检测、定期自检等。

你看,一个看似简单的功能,经过 HARA 分析,就能明确它的安全等级。这就是 HARA 的价值所在。

我的经验:做 HARA 时,一定要让不同背景的人参与。硬件工程师能看到电路层面的风险,软件工程师能想到逻辑漏洞,系统工程师能把握整体场景。一个人闭门造车,很容易漏掉关键危害。

好了,这一章就到这里。HARA 是功能安全的起点,也是最重要的一步。下一章,咱们聊聊怎么把 HARA 的结果转化成具体的安全目标。到时候见。