3、安全生命周期(上):概念阶段、产品开发阶段、生产与运行阶段
各位工程师朋友,咱们今天聊聊安全生命周期。说实话,这个概念刚入行时我觉得挺虚的——不就是画个流程图吗?直到我在一个项目中,因为忽略了生产阶段的某个环节,导致批量返工……嗯,从那以后,我对这个生命周期是真心敬畏。
ISO 26262把安全生命周期分成三个阶段:概念阶段、产品开发阶段、生产与运行阶段。今天咱们先讲前两个,第三个留到下一章细说。
3.1 概念阶段:从零到一的基石
概念阶段说白了就是「想清楚再动手」。我见过太多项目,上来就写代码、画原理图,结果做到一半发现安全目标没对齐,推倒重来。你想想看,那得多痛?
3.1.1 项目定义
这一步是安全生命周期的起点。你要回答几个核心问题:
- 这个系统是干什么的?
- 用在什么车型上?
- 有哪些功能?
- 边界在哪里?
我个人习惯,在项目定义阶段就拉上系统工程师、硬件工程师、软件工程师一起开会。别小看这个会,它能避免后面80%的沟通问题。
3.1.2 危害分析与风险评估(HARA)
HARA是概念阶段的重头戏。它的目标就是找出所有可能的危害,然后评估风险等级。
怎么做?我一般分三步:
- 场景分析:想象所有可能的驾驶场景。比如高速行驶、城市拥堵、雨雪天气……
- 危害识别:每个场景下,系统失效会导致什么后果?比如刹车失灵、转向卡死。
- 风险等级评定:用ASIL等级(A、B、C、D)来量化风险。
举个例子,我在做电动助力转向项目时,发现一个场景:车辆在高速上行驶,如果转向助力突然消失,驾驶员需要更大的力才能转动方向盘。这个危害的ASIL等级是D——最高等级。
3.1.3 安全目标定义
有了HARA的结果,接下来就是定义安全目标。安全目标是对每个危害的「安全要求」。比如:
- 「转向助力不能无故消失」
- 「制动系统必须在200ms内响应」
- 「电池温度不能超过60°C」
每个安全目标都要有明确的ASIL等级。我记得有个项目,安全目标写得太模糊,比如「系统要安全」。这等于没写。安全目标必须可验证、可测试。
3.2 产品开发阶段:把安全目标落地
概念阶段结束后,就进入产品开发阶段。这个阶段分两条线:系统层面和硬件/软件层面。
3.2.1 系统层面开发
系统层面开发,核心是技术安全概念。说白了,就是把安全目标翻译成技术方案。
举个例子,安全目标是「转向助力不能无故消失」。技术安全概念可能包括:
- 双路供电设计(一路失效,另一路顶上)
- 故障检测机制(每10ms自检一次)
- 降级模式(助力失效时,切换到机械模式)
我建议,技术安全概念一定要写清楚「正常模式」和「故障模式」分别怎么工作。很多项目只关注正常模式,忽略了故障模式,结果测试时才发现问题。
3.2.2 硬件层面开发
硬件层面开发,核心是硬件安全需求和硬件设计。
硬件安全需求包括:
- 失效率指标(比如FIT值)
- 诊断覆盖率(比如90%的故障能被检测到)
- 安全机制(比如看门狗、冗余设计)
硬件设计时,我习惯用FMEA(失效模式与影响分析)来评估每个元器件的风险。比如一个电阻短路会怎样?一个电容开路会怎样?把这些都列出来,然后设计对应的安全机制。
这里有个表格,是硬件安全需求的一个示例:
| 安全目标 | 硬件安全需求 | 安全机制 | ASIL等级 |
|---|---|---|---|
| 转向助力不能无故消失 | 主电源失效率 < 10 FIT | 双路供电、电压监控 | D |
| 制动响应时间 < 200ms | MCU处理延迟 < 50ms | 看门狗、任务监控 | C |
| 电池温度不能超过60°C | 温度传感器精度 ±1°C | 冗余传感器、交叉校验 | B |
3.2.3 软件层面开发
软件层面开发,核心是软件安全需求和软件架构设计。
软件安全需求要细化到每个函数、每个接口。比如:
- 「故障检测函数每10ms执行一次」
- 「错误处理函数必须在5ms内完成」
- 「通信接口必须使用CRC校验」
软件架构设计时,我推荐使用分层架构。把安全相关的功能和非安全相关的功能分开。这样,安全相关的代码更容易验证,也更容易维护。
举个例子,一个简单的安全监控代码:
// 安全监控任务,每10ms执行一次
void SafetyMonitor_Task(void)
{
// 1. 读取传感器数据
uint16_t sensor_value = ReadSensor();
// 2. 检查是否超出阈值
if (sensor_value > MAX_THRESHOLD)
{
// 3. 触发安全机制
EnterSafeState();
SetFaultCode(FAULT_OVERTEMP);
}
// 4. 记录诊断信息
UpdateDiagnosticCounter();
}
这段代码看起来简单,但要注意:安全代码不能有死循环、不能有动态内存分配、不能有递归调用。这些都是安全编码规范里的硬性要求。
3.3 生产与运行阶段:安全不止于设计
很多工程师觉得,安全生命周期到产品开发就结束了。其实不然。生产与运行阶段同样重要。
生产阶段要确保:
- 生产工艺符合安全要求
- 每个产品都经过安全测试
- 生产过程中的变更要受控
运行阶段要确保:
- 车辆在使用过程中,安全功能正常工作
- 出现故障时,系统能正确响应
- 有完善的售后维护和召回机制
我记得有个项目,设计阶段做得很好,但生产时因为某个供应商换了元器件,导致安全机制失效。还好在生产测试阶段发现了,不然批量装车后果不堪设想。
3.4 本章小结
好了,咱们今天讲了安全生命周期的前两个阶段:
- 概念阶段:项目定义、HARA、安全目标
- 产品开发阶段:系统层面、硬件层面、软件层面
- 生产与运行阶段:简单提了一下,下一章细讲
你可能会问,这些阶段之间怎么衔接?我的答案是:文档。每个阶段的输出都是下一个阶段的输入。文档写得好,衔接就顺畅。文档写得差,后面全是坑。
下一章,咱们继续聊生产与运行阶段的细节,以及安全生命周期的维护和变更管理。到时候见。