|
在安全系统的软件开发中,软件工程师除了具备软件开发的基本能力,还需要对安全软件的设计要求有深入的理解。如何能使开发的软件能够安全的运行,大部分安全要求与软件应用需求、功能场景有关,也有一些软件的通用性安全要求,下面是安全系统软件开发时需要遵循的通用设计要求:

众所周知,软件的错误将会造成系统性失效,即使是多重冗余的系统,也会由于软件的共模失效出现不同冗余系统的同时故障,使系统的可靠性大大下降。

在2015年,美国航空安全局FAA发布波音787 Dreamliner在实验室测试出的一个软件缺陷,飞机的发电机系统每经过大约248天就会进入一种故障安全模式,导致供电系统完全关闭,如果此时飞机正在飞行、起飞或着陆期间,由于冗余的四个发电机控制系统将同时发生故障,将会造成灾难性的后果。FAA给出的临时解决方案是定期重启供电系统,作为日常维护的一项工作。——完整的信息可以查看阅读原文。
248天有什么特别之处呢,248天=248*24*3600=21427200秒,与2的31次方2147483648非常接近,可能的推断是在发动机控制系统的软件中存在一个有符号的32位时间计数器,该计数器每10ms递增一次,在连续运行的第248天,该计数器溢出,导致系统进入了故障检测并导向安全状态。
FAA官方没有发布该缺陷详细信息,以上是对这个问题原因一个可能的推断,但可以确定的是,软件缺陷是由于涉及时间相关的参数不正确引起的,对于软件使用的数据和参数应该做完整性和合法性的检查,确保不因数据的异常进入非预期的软件处理逻辑中。假设发动机控制系统的软件如果没有为数据异常设计合理的处理逻辑,造成的后果就会不可预测,更加严重。
以上仅为安全系统设计中一些常见的安全要求,除此以外,还要遵循安全编码的常用编码规范,网络安全的设计要求,以及基于系统需求和应用场景的特定安全要求。 |
|