3、概念阶段:项目定义、安全生命周期启动、危害分析与风险评估(HARA)、安全目标定义

好,咱们进入概念阶段。这是整个功能安全开发的起点,也是我经常跟团队强调的「地基」阶段。你想想看,如果地基没打好,后面盖多高的楼都悬。我个人习惯把概念阶段拆成四个核心动作:项目定义、安全生命周期启动、HARA、安全目标定义。咱们一个一个来过。

3.1 项目定义——搞清楚你到底在做什么

项目定义,说白了就是回答三个问题:

  • 这个系统是干什么的?
  • 它装在什么车上?
  • 它跟谁打交道?

嗯,听起来简单,但我在项目中遇到过好几次,团队上来就写安全目标,结果连系统边界都没画清楚。最后HARA做到一半,发现漏了一个外部接口,整个重来。那叫一个酸爽。

项目定义要包含的内容,我列个清单:

  • 系统名称和版本——别小看这个,版本号乱写后面追溯会疯掉
  • 系统功能描述——用自然语言说清楚它做什么
  • 系统边界——哪些是系统内的,哪些是系统外的
  • 外部接口——传感器、执行器、通信总线、人机交互
  • 运行模式——正常模式、故障模式、维护模式等
  • 法规和标准要求——比如GB/T、ECE R79这些
我的小技巧:项目定义阶段,我习惯画一张系统上下文图。把系统画成一个大方块,外面画上所有交互对象,箭头标清楚信号流向。这张图后面做HARA时,能帮你快速定位危险事件。

3.2 安全生命周期启动——不是走形式,是真启动

安全生命周期启动,很多人觉得就是开个kick-off会议,签个字就完了。其实不是。启动的真正意义是:让整个团队知道,从这一刻起,所有开发活动都要考虑安全

我记得有一次,项目启动会开完了,但软件团队压根没参加。结果他们按老习惯写代码,写到一半才发现ASIL等级要求,不得不返工。嗯,从那以后,我坚持安全启动会必须拉上所有相关方——硬件、软件、系统、测试、生产,一个都不能少。

安全生命周期启动要输出的东西:

  • 安全计划——整个项目的安全活动时间表
  • 安全角色和职责——谁是安全经理,谁是评审员,谁做验证
  • 安全案例框架——你打算怎么证明系统是安全的
  • 剪裁理由——如果某些活动不适用,要写清楚为什么不适用
注意:安全计划不是写一次就完事的。项目过程中,计划一定会变。我建议每两个月review一次安全计划,看看有没有偏离。

3.3 危害分析与风险评估(HARA)——最烧脑的部分

HARA,全称Hazard Analysis and Risk Assessment。这是概念阶段最核心、也最烧脑的工作。为什么?因为你要凭空想象出所有可能出问题的情况,还要给每个情况定一个安全等级。

HARA的标准流程,我一般分五步走:

  1. 场景分析——列出所有可能的运行场景。比如高速巡航、城市拥堵、雨天、夜间、隧道……
  2. 识别危害——系统功能失效会导致什么危害?比如刹车失灵、转向卡死、误加速
  3. 评估风险——对每个危害,评估三个参数:严重度(S)、暴露概率(E)、可控性(C)
  4. 确定ASIL等级——根据S、E、C查表得到ASIL A/B/C/D或QM
  5. 定义安全目标——为每个危害制定一个安全目标,防止或减轻危害

这里我特别想说说评估风险这一步。很多人觉得S、E、C打分很主观,确实有主观成分。但我的经验是,只要团队讨论充分,打分结果通常八九不离十。我曾经在一个项目里,两个工程师对同一个危害的严重度打分差了两级,后来一聊才发现,一个人想的是低速场景,另一个人想的是高速场景。你看,场景定义清楚,分歧就没了。

ASIL等级查表规则,我直接给个表格:

严重度(S) 暴露概率(E) 可控性(C) ASIL等级
S1(轻伤) E1(极低) C1(易控) QM
S2(重伤) E2(低) C2(一般) ASIL A
S3(致命) E3(中) C3(难控) ASIL B
S3(致命) E4(高) C3(难控) ASIL C
S3(致命) E4(高) C3(难控) ASIL D

注意,这个表是简化版。实际查表要参考ISO 26262-3:2018的Table 1到Table 4。但核心逻辑就是:越严重、越常见、越难控制,等级越高

避坑指南:我曾经见过一个团队,把所有危害都打成了ASIL D。理由是「安全第一,宁高勿低」。结果后面开发成本爆炸,项目直接延期半年。记住,ASIL等级不是越高越好,是合理就好。过高的ASIL等级会带来不必要的开发成本和验证负担。

3.4 安全目标定义——把危害翻译成要求

安全目标,就是把HARA里识别出的每个危害,翻译成一条可验证的安全要求。举个例子:

  • 危害:车辆在高速行驶时,制动系统意外失效,导致无法减速
  • 安全目标:制动系统在检测到主回路失效时,必须在200ms内激活冗余制动回路,确保车辆仍能减速停车

安全目标要满足几个条件:

  • 可验证——你能设计测试用例来证明它实现了
  • 无歧义——不同的人读它,理解应该一致
  • 可追溯——能追溯到HARA里的具体危害
  • 有ASIL等级——继承自HARA的分析结果

我习惯在安全目标后面加一个「安全状态」和「故障容错时间间隔」。比如:

安全目标:SG-001 制动冗余激活
ASIL等级:ASIL D
安全状态:车辆安全减速至停车
故障容错时间间隔:≤ 200ms

为什么要加这两个?因为后面做系统设计时,硬件和软件团队需要知道:出故障后,系统必须在多长时间内进入安全状态。没有这个时间约束,设计就没法落地。

我的习惯:安全目标写完后,我会组织一次「安全目标评审会」。拉上系统、硬件、软件、测试的人,一条一条过。每个人都要签字确认。这样做的好处是,后面如果出了问题,没人能说「我不知道这个要求」。

3.5 概念阶段的输出物清单

最后,我整理一下概念阶段要产出的东西。方便你对照检查:

  • 项目定义文档(含系统上下文图)
  • 安全计划(含安全生命周期活动表)
  • HARA分析报告(含场景、危害、S/E/C评估、ASIL等级)
  • 安全目标列表(含安全状态和故障容错时间间隔)
  • 安全案例框架(初步版本)

嗯,概念阶段的内容就这些。说白了,这个阶段的核心就是想清楚、写清楚、对齐清楚。后面所有的开发工作,都是基于这个阶段的结果展开的。所以,别急,慢慢来,把地基打扎实了。

下一章,咱们进入系统层面,聊聊系统级安全设计。到时候会讲到安全架构、安全机制、以及怎么把安全目标分解到子系统。敬请期待。