3. 安全目标定义:安全目标的来源、ASIL等级确定、安全目标的编写规范

好,咱们进入第三个核心话题——安全目标定义。

说实话,我见过不少项目,HARA做得漂漂亮亮,一到写安全目标就开始放飞自我。有人写得太笼统,比如“系统要安全”;有人写得太具体,直接写成了软件需求。这两种都不对。

安全目标到底是什么?说白了,它就是一条“底线”。这条底线告诉你:当某个危险事件发生时,系统必须做到什么,才能避免人员受伤

3.1 安全目标的来源

安全目标不是拍脑袋想出来的。它的唯一来源,就是我们上一章讲的HARA(危害分析与风险评估)

具体来说,每个危险事件,经过HARA分析后,都会对应一个安全目标。我个人的习惯是:一个危险事件,至少产出一个安全目标。有时候多个危险事件可以合并成一个安全目标,但前提是它们的“安全状态”完全一致。

举个例子:

假设HARA分析发现,电动助力转向系统在高速行驶时,如果“非预期转向助力丢失”,会导致车辆偏离车道,造成严重事故。

那么对应的安全目标就是:
“避免在高速行驶时发生非预期转向助力丢失”

你看,这个目标直接来源于那个具体的危险事件。它没有说“转向系统要可靠”,而是精准地指向了那个危险场景。

我的经验:

我在做ADAS项目时,曾经遇到一个情况:HARA分析出了20多个危险事件,但最后只写了8个安全目标。为什么?因为有些危险事件的“安全状态”是一样的,比如都是“进入降级模式并报警”。这种情况下,合并是合理的。

但要注意——不要为了凑数而合并。如果两个危险事件的ASIL等级不同,或者安全状态不同,那就必须分开写。

3.2 ASIL等级确定

安全目标写好了,接下来要给它定个“级别”——也就是ASIL等级。

ASIL等级怎么来的?嗯,它直接继承自HARA中对应危险事件的ASIL等级。HARA里评估了Severity(严重度)、Exposure(暴露概率)、Controllability(可控性),三者组合就得到了ASIL等级。

这里有个关键点:安全目标的ASIL等级,决定了后续所有安全活动的“力度”

ASIL等级 要求严格程度 典型应用场景
ASIL D 最高 制动、转向等安全关键系统
ASIL C 动力系统相关
ASIL B 中等 车身控制、部分ADAS功能
ASIL A 非关键功能,如车窗防夹
QM 仅需质量管理 信息娱乐、导航等

避坑指南:

我曾经见过一个项目,HARA分析出来的ASIL等级是B,但写安全目标时,有人觉得“这个功能很重要”,擅自把ASIL等级提到了D。

这是大忌!ASIL等级必须严格基于HARA分析结果,不能凭感觉“升级”或“降级”。如果你觉得HARA分析有问题,那就回去重新做HARA,而不是在安全目标这里改等级。

另外,还有一个常见问题:ASIL分解。有时候一个安全目标的ASIL等级很高,比如ASIL D,但我们可以把它分解成两个独立的安全目标,每个目标承担一部分责任,比如一个ASIL C,另一个ASIL C。这样整体上仍然满足ASIL D的要求。

但要注意——分解后的每个安全目标,必须相互独立,不能有共因失效。嗯,这个我们后面讲ASIL分解时会详细说。

3.3 安全目标的编写规范

好,到了最实操的部分——怎么写安全目标?

我总结了四个字:准、简、独、可

  • :准确描述危险事件,不要模糊。比如“避免非预期加速”,而不是“加速要安全”。
  • :一句话说清楚,不要写成长篇大论。一般控制在20-30字以内。
  • :每个安全目标只对应一个危险事件或一组高度相关的危险事件。不要“一锅烩”。
  • :可验证。也就是说,后续的测试用例能够明确判断这个目标是否达成。

标准格式示例:

安全目标编号:SG-001
描述:避免在车速超过30km/h时发生非预期制动介入
ASIL等级:ASIL C
安全状态:车辆进入跛行模式,同时点亮制动系统故障灯
来源危险事件:HARA-ID-015(非预期制动介入导致追尾)

我个人习惯,每个安全目标都要包含以下要素:

  1. 唯一编号:方便追溯,比如SG-001、SG-002。
  2. 描述:一句话,包含触发条件+危险行为+后果。
  3. ASIL等级:直接写,不要写范围。
  4. 安全状态:这是关键!安全目标必须明确“当危险发生时,系统应该进入什么状态”。
  5. 来源:指向HARA中的具体危险事件ID。

一个小技巧:

写安全目标时,试着用“如果...那么...”的句式来检查。

比如:“如果发生非预期制动介入,那么系统必须在100ms内检测到故障,并进入跛行模式,同时点亮故障灯。”

如果这个“那么”后面的内容写不出来,说明你的安全目标还不够具体。

最后,再强调一点:安全目标不是一成不变的。随着项目推进,你可能会发现新的危险场景,或者原来的安全目标写得不够好。这时候,不要怕改。但每次修改,都要走变更管理流程,并且更新所有相关的文档。

嗯,我记得有一次,一个项目都到测试阶段了,才发现某个安全目标写得有歧义——它说“避免系统失效”,但没说明是“永久失效”还是“间歇性失效”。结果测试团队和开发团队吵了半天。最后我们花了一周时间重新评审和修改。从那以后,我每次写安全目标,都会多问自己一句:“这句话,别人看了会不会有歧义?”

好,安全目标定义就讲到这里。下一章,我们聊聊安全状态设计——也就是当危险真的发生时,系统该怎么“体面地退场”。