第三讲:危害分析与风险评估(HARA)

好,咱们进入功能安全里最核心的一步——HARA。说实话,很多工程师觉得HARA就是填表格、打分数,走个过场。但我做了这么多年项目,可以负责任地告诉你:HARA做得好不好,直接决定了你后续所有工作的质量。就像盖房子打地基,地基歪了,上面装修再漂亮也没用。

一、HARA的目的与流程

HARA的全称是Hazard Analysis and Risk Assessment,翻译过来就是危害分析与风险评估。它的目的很明确:找出系统可能出现的危害,评估这些危害的风险等级,然后制定安全目标来把风险降到可接受的水平

我个人习惯把HARA的流程分成五步走:

  1. 功能定义——搞清楚系统是干什么的
  2. 危害识别——找出所有可能出问题的地方
  3. 场景分析——考虑各种运行场景和工况
  4. 风险评估——用S/E/C参数打分
  5. 制定安全目标——明确要“防什么、防到什么程度”

你想想看,这五步环环相扣。我在项目中遇到过不少团队,跳过功能定义直接做危害识别,结果漏掉了一大堆关键场景,后面返工改得叫苦连天。所以,千万别图省事

二、危害识别方法

危害识别说白了就是“找茬”。但找茬也得有方法,不能瞎找。常用的方法有这么几种:

  • 头脑风暴法:拉上系统、软件、硬件、测试、安全工程师一起开会,集思广益。嗯,这里要注意,一定要有不同背景的人参与,否则容易陷入思维盲区。
  • 检查表法:基于以往项目的经验,整理出一份常见危害清单,逐条核对。这个方法效率高,但容易遗漏新系统的特有危害。
  • HAZOP分析法:用引导词(如“无”、“多”、“少”、“反向”等)来系统性地分析每个功能可能出现的偏差。这个方法很严谨,但耗时较长。
我的小技巧: 我一般先用检查表法快速过一遍,再用HAZOP法对关键功能做深度分析。两者结合,既保证效率,又不漏项。

危害识别时,要特别注意合理可预见的误使用。比如,用户会不会把油门当刹车踩?会不会在充电时用手去摸高压端子?这些不是用户傻,而是设计时必须考虑的场景。

避坑指南: 我曾经在一个项目中,团队只考虑了正常驾驶场景,完全没考虑维修保养时的危害。结果安全目标里漏掉了“高压断电后仍需保持安全”这一条,差点酿成大祸。所以,一定要把全生命周期都考虑进去,包括生产、使用、维修、报废等阶段。

三、风险评估矩阵(S/E/C参数)

找到危害之后,就要评估它的风险等级了。ISO 26262里用的是三个参数:

  • S(Severity)——严重度,指危害发生时对人员造成的伤害程度
  • E(Exposure)——暴露概率,指危害场景发生的可能性
  • C(Controllability)——可控性,指驾驶员或其他人员能否避免伤害

每个参数都有对应的等级,咱们用表格来看:

参数 等级 描述
S(严重度) S0 无伤害
S1 轻伤(可恢复)
S2 重伤(可能危及生命,但可存活)
S3 致命伤(危及生命,存活概率低)
E(暴露概率) E0 几乎不可能发生
E1 很少发生(每年几次)
E2 有时发生(每月几次)
E3 频繁发生(几乎每次驾驶都会遇到)
C(可控性) C1 容易控制(驾驶员能轻松应对)
C2 一般可控(多数驾驶员能应对)
C3 难以控制(即使专业驾驶员也难以避免)

有了这三个参数,就可以查表得到ASIL等级(Automotive Safety Integrity Level,汽车安全完整性等级)。ASIL分为A、B、C、D四个等级,D是最严格的。举个例子:

  • 如果S=3(致命)、E=3(频繁)、C=3(难控),那ASIL就是D
  • 如果S=1(轻伤)、E=2(有时)、C=1(易控),那ASIL可能就是A甚至QM(质量管理)
重点来了: ASIL等级决定了后续开发过程中需要采取的安全措施有多严格。ASIL D的要求最高,从设计、验证到测试,每一步都有严格的规定。千万别以为ASIL等级低就可以随便做,每个等级都有对应的要求

四、安全目标(Safety Goal)的制定

安全目标,说白了就是一句话:“防止某某危害发生”。但它不是随便写写的,有严格的格式要求。

一个完整的安全目标通常包含以下要素:

  • 危害描述:明确要防止什么危害
  • 安全状态:系统进入什么状态才算安全
  • 容错时间间隔:从危害发生到系统进入安全状态,最多能容忍多长时间
  • ASIL等级:从风险评估中继承而来

举个例子,对于“刹车失灵”这个危害,安全目标可能是:

安全目标:防止车辆在行驶过程中因制动系统故障导致刹车失灵。
安全状态:车辆减速至停止,并保持驻车状态。
容错时间间隔:≤ 500ms
ASIL等级:D

我在项目中见过最典型的错误,就是安全目标写得太笼统。比如“防止车辆失控”,这等于没说。失控的原因有很多种——刹车失灵、转向失灵、动力系统异常……每种都要单独制定安全目标。所以,安全目标一定要具体、可验证

我的建议: 写安全目标时,可以问自己三个问题:
1. 这个目标能直接指导设计吗?
2. 测试时能验证这个目标是否达成吗?
3. 如果系统失效,这个目标能保护用户吗?
如果三个答案都是“是”,那这个安全目标就合格了。

另外,安全目标之间可能会有冲突。比如,既要保证制动安全,又要保证动力输出。这时候就需要做安全目标分解,把高等级的安全目标分配到不同的子系统或功能模块上。嗯,这部分内容咱们后面会详细讲。

好了,HARA这部分就讲到这里。记住一句话:HARA不是填表格,而是用系统化的方法找出风险、定义安全需求。下一讲,咱们聊聊如何把安全目标转化成具体的技术安全需求。