在自动化程度日益提升的世界中,系统的安全性与可靠性至关重要。功能安全是其中关键的一环,它能确保系统即便出现故障,也能正确响应输入。这意味着功能安全不能事后补救,而要从软件开发流程之初就将其纳入。发流程之初就将其纳入。
但究竟什么是功能安全?它为何如此重要?又该如何实现?
什么是功能安全
功能安全的重要性
保护生命安全:
功能安全最首要、最明显的目标是预防事故、降低伤害风险,以此保护人类生命。这在汽车、医疗和工业自动化等行业尤为关键,因为这些行业的系统故障可能导致灾难性后果。
遵守法规要求:
许多行业都受严格法规约束,这些法规强制要求实施功能安全。遵守这些法规是产品上市销售的基本条件。
可靠性与可信度:
实施功能安全可提高系统可靠性,进而让用户与利益相关者信任系统。可靠的系统更不易出现故障,从而提升客户满意度,降低责任风险。
节约成本:
确保功能安全具有经济效益。与在现场处理故障相比,在设计和开发过程中尽早解决安全问题更划算。功能安全有助于避免代价高昂的召回、维修和法律诉讼。此外,品牌声誉受损会影响销售,有时影响更为致命。
如何在软件开发中实现功能安全
开展危害与风险评估:第一步是识别软件行为和系统交互中的潜在危险,再评估相关风险。这包括了解系统运行环境和故障的潜在后果。也就是说,需要分析运行环境,以确定每种危害的严重程度、发生概率和可控性。常用的风险等级评估方法有 HAZOP(危险与可操作性分析)、FMEA(故障模式与影响分析)或 FTA(故障树分析)。应根据系统复杂性和行业要求来选择评估方法:
- HAZOP:最适用于面向过程的系统,用于检查是否偏离设计意图
- FMEA:对组件级分析有效,可识别单点故障
- FTA:适用于复杂系统,可从潜在事故反向追溯到根本原因
定义与明确安全要求:将危害和风险评估结果转化为清晰、可测试的安全要求,同时明确功能安全要求(系统必须做什么)和安全完整性等级(系统必须可靠执行的程度)。不过,不必从零开始。已有大量标准和指南(见下文)可指导需求制定,避免从零开始。
设计并实施功能安全:此时要在系统中设计和实施安全功能。在这一阶段,软件结构设计尤为重要,这样才能正确隔离和管理安全关键组件。这也有助于实施具备冗余、看门狗和故障安全等安全机制的软件模块。当然,硬件也应通过内存保护、冗余处理能力和安全故障模式等功能,来支持所需的安全完整性等级。
执行验证与确认:一切就绪后,需对系统进行严格测试,验证其是否满足安全要求,确认其在所有条件下都能正确运行。为此,应从一开始就开展架构验证和静态代码分析,以便尽早发现问题。早期发现的问题更容易修复,造成的损失也更小。此外,在这一阶段发挥重要作用的测试(如单元测试、功能测试、集成测试和故障注入测试等)也会更顺利、更成功。
提供可追溯性:确保从需求到分析,再到测试用例及其各自结果的可追溯性,是一种良好做法。可追溯性确保每项安全要求都能通过设计决策、实施选择、验证活动和验证结果追溯。这形成了可审计的追踪链条,证明安全要求已得到妥善处理,也为众多监管框架所要求的安全案例开发奠定了基础。
国际标准和指南
汽车行业功能安全的失效案例
意外加速事故:
自动驾驶系统故障:
点火开关缺陷:
结论