作者: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》
这是与软件相关的博客系列中的第一篇。软件功能安全是一个大问题。





