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

HARA,全称 Hazard Analysis and Risk Assessment。说白了,它就是功能安全开发的“第一道安检门”。

很多刚入行的工程师觉得这步就是填表格、走形式。我刚开始做ADAS项目时也这么想。直到有一次,一个转向系统的潜在危害被遗漏,后期整改花了三个月。嗯,从那以后,我再也不敢轻视HARA了。

这一章,我们就来拆解HARA的完整流程。从场景定义到ASIL定级,每一步我都会结合实战经验来讲。

2.1 HARA方法论概述

HARA的核心目标就一个:找出系统在哪些场景下会出问题,以及问题有多严重。

我个人习惯把HARA分成四个阶段:

  1. 场景定义:车在哪儿开?谁在开?周围有什么?
  2. 危害识别:系统故障会导致什么危险行为?
  3. 风险评估:评估S、E、C三个参数。
  4. ASIL定级:根据S、E、C查表,确定安全等级。

核心原则:HARA必须基于“合理的可预见的场景”。你不能假设所有驾驶员都是赛车手,也不能假设所有路况都是高速公路。

你想想看,如果场景定义太窄,风险就会被低估。如果场景定义太宽,安全目标又会过于严苛,导致成本失控。这个平衡点,就是经验所在。

HARA 方法论流程 场景定义 危害识别 风险评估 ASIL定级 运行模式 环境条件 用户行为 时间窗口 功能异常 系统故障 外部干扰 连锁反应 严重度 S 暴露率 E 可控性 C 综合评估 ASIL A ASIL B ASIL C ASIL D 每个阶段都需要跨团队评审:系统、软件、硬件、安全、测试 输出:危害事件列表 + ASIL等级 + 安全目标草案

2.2 运行场景定义

场景定义是HARA的基石。场景定义错了,后面全白干。

我建议用“5W1H”法来定义场景:

  • Who:谁在驾驶?专业司机?普通用户?老人?
  • What:车辆在做什么?巡航?变道?泊车?
  • Where:在什么路上?高速?市区?乡村?
  • When:白天?夜晚?雨天?雪天?
  • Why:为什么会发生这个场景?
  • How:场景如何演变?

实战技巧:我习惯把场景分为“正常场景”和“边缘场景”。正常场景覆盖95%的日常使用,边缘场景覆盖那5%的极端情况。很多安全事故恰恰发生在边缘场景里。

举个例子,一个ACC自适应巡航系统:

场景维度 典型描述
运行模式 高速巡航,设定速度120km/h
环境条件 白天,干燥路面,能见度良好
用户行为 驾驶员未干预,信任系统
时间窗口 前车切入,距离从100m骤降到30m
系统状态 传感器正常,但目标切换延迟

2.3 危害识别

危害识别,就是找出“系统故障会导致什么危险行为”。

我个人习惯从三个维度去思考:

  1. 功能异常:该加速时没加速,该刹车时没刹车。
  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的流程来开发。