3、危害分析与风险评估(HARA)

好,咱们进入功能安全里最核心、也是最考验功力的环节——HARA。说实话,我见过不少项目,前期设计做得风生水起,一到HARA就开始糊弄,最后认证审计时被问得哑口无言。嗯,这章咱们就把HARA的底裤扒干净。

3.1 HARA到底在干什么?

HARA的全称是Hazard Analysis and Risk Assessment。说白了,就是回答三个问题:

  • 我的系统会不会出危险?
  • 出了危险后果有多严重?
  • 我得做到多安全才算合格?

我个人习惯把HARA比作「排雷」。你想想看,一个系统可能有几十上百种失效模式,但真正能要人命的可能就三五个。HARA就是帮你把这些「地雷」找出来,然后决定每个雷旁边要站几个哨兵。

核心目的:识别系统在功能失效时可能导致的危害事件,评估其风险等级,并导出安全目标(Safety Goal)。

我在项目中遇到过最典型的反面教材:某团队做ADAS系统,HARA只做了3个场景,结果路试时发现一个未识别的危害——车辆在隧道出口处突然急刹。为什么?因为HARA时根本没考虑光照突变场景。所以,HARA做得细不细,直接决定你后面要补多少坑。

3.2 危害识别方法——怎么把「鬼」揪出来?

危害识别不是拍脑袋。我常用的方法有这几种:

3.2.1 头脑风暴法(Brainstorming)

拉上系统、软件、硬件、测试、甚至市场的人,关在会议室里。对着功能清单,一个一个问:「如果这个功能失效了,会发生什么?」

注意,这里有个坑:不要只讨论「技术失效」。我曾经见过一个团队,讨论转向系统时只盯着电机卡死,却忽略了「驾驶员误操作」这种使用场景。嗯,HARA要覆盖所有合理可预见的误用。

3.2.2 检查表法(Checklist)

对于成熟系统,检查表效率很高。比如ISO 26262-3:2018的Table B.1就给出了常见的危害类型:

危害类型 示例
非预期加速 ACC系统误判前车距离,突然加速
非预期制动 AEB系统对路边广告牌误触发
转向失控 EPS系统丢失扭矩指令
信息显示错误 仪表盘显示剩余电量50%,实际为5%

3.2.3 HAZOP(危险与可操作性分析)

这个方法我特别喜欢,因为它系统化。你对着每个功能,用引导词(如:无、多、少、相反、早、晚)去「拷问」系统。

举个例子,对于「车门解锁」功能:

  • 无: 车门无法解锁 → 人员被困
  • 多: 行驶中车门意外解锁 → 人员跌落
  • 相反: 解锁变成上锁 → 紧急情况无法逃生
  • 早: 车辆未停稳就解锁 → 危险

我的小技巧: 做HAZOP时,一定要把「操作模式」也列进去。比如「倒车时」、「高速行驶时」、「充电时」——同一个失效在不同模式下,危害等级天差地别。

3.3 风险评估矩阵——给危害「称重」

危害找到了,接下来要评估它有多「重」。ISO 26262用三个参数来评估:

  • S(Severity,严重度): 伤害有多重?
  • E(Exposure,暴露概率): 这种情况发生的频率?
  • C(Controllability,可控性): 驾驶员或其他人能避免吗?

这三个参数组合起来,就决定了你的ASIL等级(Automotive Safety Integrity Level)。

参数 等级 描述
S(严重度) S0 无伤害
S1 轻伤(可恢复)
S2 重伤(可能危及生命)
S3 致命伤
E(暴露概率) E0 几乎不可能
E1 很少发生(<1%的操作时间)
E2 偶尔发生(1%-10%)
E3 频繁发生(>10%)
C(可控性) C0 完全可控
C1 简单可控(一般驾驶员可应对)
C2 难以控制(需要特殊技能或运气)
C3 不可控

然后,查这个矩阵:

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

注意: 这个矩阵不是死的。不同OEM可能有自己的微调版本。我曾经在审计时遇到一家公司,把S2+E2+C2从ASIL B改成了ASIL C,理由是「我们做过统计,这种场景下驾驶员反应时间平均超过2秒」。审计员认可了,但要求提供统计数据支撑。所以,矩阵可以调,但要有理有据

3.4 安全目标定义——把「要求」写清楚

评估完风险,就要导出安全目标(Safety Goal)。安全目标是什么?就是一句话:「系统必须避免某某危害」

举个例子,对于「非预期加速」这个危害:

  • 危害: 车辆在高速行驶时,ACC系统误判导致非预期加速,引发追尾。
  • ASIL等级: ASIL C
  • 安全目标: 「车辆在高速行驶时,必须避免因ACC系统误判导致的非预期加速,ASIL C。」

写安全目标时,我建议遵循几个原则:

  1. 可验证: 你写出来的目标,测试团队要能设计用例去验证。别写「系统要足够安全」这种废话。
  2. 可追溯: 每个安全目标都要能追溯到具体的危害事件。审计时,审计员会拿着你的安全目标列表,一个一个问:「这个目标对应哪个危害?」
  3. 粒度适中: 别把安全目标写得太细。比如「MCU的SPI通信必须每10ms进行一次CRC校验」——这是安全机制,不是安全目标。安全目标应该停留在「系统级」。

避坑指南: 我曾经见过一个团队,把安全目标写成了「系统必须满足ISO 26262要求」。审计员当场就笑了:「你这是安全目标还是项目计划?」安全目标一定要具体到「什么场景下,避免什么后果」。

最后,安全目标定义完成后,要形成一份《HARA报告》。这份报告是后续所有安全活动的「宪法」。安全架构、安全机制、测试用例,全都要从这里派生。所以,HARA做得扎实,后面就顺风顺水;HARA做得敷衍,后面全是补丁。

嗯,这一章就到这里。下一章咱们聊聊「功能安全概念与安全架构设计」,看看怎么把安全目标落地成具体的系统方案。