作者:Tom.meany,ADI功能安全工程师
我不会说功能安全人员讨厌软件,但有时您这么想也情有可原。从安全的角度来讲,软件被认为有太多的状态,并且据说不可测试。
由于软件的不可测试性,无法证明软件的安全性,而过去则使用相对简单的逻辑,使用安全继电器等来实现。
然而,考虑到软件给系统带来的灵活性和功能,必然会要求安全使用。随着IEC 61508-3等新标准的出台,设计人员通过遵循一组过去经证实能提供安全软件的技术,来证明他们的软件是足够安全的。
使软件与硬件不同的因素包括:
* 软件不是磁带,因此通常没有硬期限(换言之“项目如何会推迟一年 – 珍惜每一天”– 布鲁克斯法则)
* 发布后可添加功能 –“他们看了看软件,发现不错,但必须有这项功能…。”– 来自McCormick G.F.
* 软件几乎可做任何事情,并通常被问及 –“灵活性之诅咒”
* 软件在硬件上运行
虽然软件不会用坏,也不会出现像硬件这样的随机故障,但它可能包含系统错误。系统错误只能通过更改设计(如更改代码)来消除。系统错误一直存在,但只有在出现一定条件时才会暴露出来。硬件可靠性采用传统的可靠性方法,基于概率因素。您可以尝试将概率用于软件,但软件出现故障的概率为1;当出现适当的条件时会暴露错误。
预估每1,000 LOC(代码行)的错误数不同,但对于优质代码,预估错误数通常为1至10EPTLOC(每千行代码错误数)。Addison-Wesley所著“Software assessments, Benchmarks and Best practices(软件评估、标准及最佳实践)”一书中提供了不同的CMM(能力成熟度模型)级别:级别1 – 7 EPTLOC、级别2 – 6 EPTLOC、级别3 – 5 EPTLOC、级别4 – 2 EPTLOC、级别5 – 1 EPTLOC。而其他数据来源给出的每1,000行代码评级范围值为办公应用程序为7、工业应用程序为2,航天飞机应用程序为0.1。所有这些都表明实现软件安全面临的挑战。
“Software Safety primer(软件安全入门)”一书描述了5种软件错误类型,并估计60%的错误与规格和设计有关,40%与编码有关。
* 规格错误 – 由于要求中没有说明,因此忽略了一些功能
* 设计错误 – 使用错误的算法,缺乏自检…。
* 编码错误 – 死循环,语法错误…。
* 硬件引起的错误 – 例如,改变指令的闪存中出现位翻转
* 接口错误 – 与软件硬件接口有关的问题
那么,安全标准如何要求。它们倡导设计一组方法和过程,以减少在代码中引入不可检错误的可能性。下面是IEC 61508:2010倡导的生命周期模型,我将在后续博文中讨论这个话题。整个过程是一个整体,从需求到架构,再到设计,最后到编码,每个阶段都配合确认和验证步骤。
与针对非安全领域提倡的良好软件开发实践相比,功能安全标准提倡的过程通常很严格。下表显示了CMMI和航空电子D0-178标准之间的估计差距。
摘自航空电子认证第172页(参见下文)
主要差距与下列各项相关
* 独立安全评估
* 工具认证
* 与特定类型分析相关的非常具体的安全要求,例如需要进行故障树分析或FMEDA
而诸如
* 配置管理
* 软件规划
* 编码
* 功能测试
等任务都属于标准非安全高质量开发过程。
无论您的目标开发领域是什么,值得参考的软件功能安全标准均包括
* IEC 61508-3:2010 – 主要的非特定行业的软件功能安全统一标准
* D0-178C – 航空电子软件安全标准
* EN 50128 – 铁路软件标准
* ISO 26262-6:2011 – 汽车软件功能安全标准
* IEC 62304 – 医疗器械软件
* IEC 60880 – 核软件安全
* UL 1998 – 美国家电软件标准
虽然上述每个标准的最终领域都不同,但每个标准的意图是相同的,在一个标准中描述欠佳之处通常在另一个标准中有更好的描述。
若想自己了解更多有关软件安全方面的知识,在此推荐以下书籍。
* Clifton A. Ericson II所著的《Software Safety primer》
* Kim Fowler所著的《Mission-critical and safety-critical systems handbook》
* Chris Hobbs所著的《Embedded software development for safety-critical systems》
* Philip Koopman所著的《Better embedded system software》
* 《美国科学院学报》上刊登的《Software for dependable systems sufficient evidence》
* Vance Hilderman和Tony Baghai所著的《Avionics certification – A complete guide to D0-178, D0-178C, D0-254》
这是与软件相关的博客系列中的第一篇。软件功能安全是一个大问题。