With the trend of increasing technological complexity, software content and mechatronic implementation, there are increasing risks from systematic failures and random hardware failures. ISO 26262 includes guidance to avoid these risks by providing appropriate requirements and processes.html
-- ISO26262-1 Introduction安全
就如ISO26262陈述的同样,随着系统技术复杂度、软件规模、机电部件的不断增长,由系统性失效和硬件随机失效致使的风险也在增长。架构
系统性失效和硬件随机失效的比较见博文系统性失效和随机失效。app
全部的软件失效都是系统性失效,不能用统计方法描述其几率,不能定量分析,只能定性地分析和得出定性的结论。dom
为何软件失效不能定量地描述?模块化
你能够尝试回答下面两个问题,感觉一下定量描述软件失效有多难。 1) 你能准确估计一个软件有多少个bug吗? (必定要准确估计,粗略估计是定性地分析) 2) 你能估计出这些bug对系统功能安全的影响吗?函数
很难估计的缘由是由于系统失效是人为失误形成的。若是你能定量描述软件失效,那你也能预测明天股票涨跌几个点了。工具
如何将软件失效及其致使的风险控制在可接受的范围?单元测试
解决方法是引入一套开发流程,规范人的行为,减小人为失误。好比: 1)关键的设计、文档等须要他人审查(review)。多我的同时犯错的可能性比一我的犯错几率地低几个数量级; 2)每一个功能性需求必须有测试验证。开发工具
ISO26262是一套汽车行业承认的功能安全标准,它包含一套用于功能安全系统的软件的开发流程和要求。
下面就介绍ISO26262对软件的要求。
ISO26262对软件的要求主要在第6部分,它指定了用于汽车的软件开发的要求。
软件不是系统内独立的部件,他和硬件、生产软件的工具(好比编译器、代码检查工具)都有密切联系。
一部分软件安全机制须要硬件支持。好比ISO26262在软件架构级别提出了错误检测机制。
其中的方案须要硬件支持。 “1c 数据错误检测”的一种方案是使用硬件支持的ECC(Error Correcting Code)码。
“1d 外部监测设备”的一种方案是使用在微处理器(CPU)外部的,在在ASIC上的看门狗。
全部用于功能安全相关的软件开发工具都须要功能安全认证。
ISO26262按照V开发模型,将软件开发分为如下几个阶段:软件功能需求、软件架构设计、软件单元设计和实现、软件单元测试、软件集成测试、软件需求测试。
下面详细介绍这几个阶段。
软件安全需求的目标是: 1) 指定软件功能安全需求,它们是从功能安全技术规范或者系统设计导出。全部的和功能安全相关的软件功能都应该被考虑到。
2)完善软硬件接口需求
3)验证软件功能安全需求、软硬件接口需求是否与功能安全技术规范、系统设计一致
软件功能安全需求考虑了硬件的限制及其对软件的影响。好比NVM有位反转随机失效。
软件架构设计的目标是:
1)创建能实现软件功能安全需求的架构;
2)验证软件架构设计。
软件架构设计用一个层级结构表示软件模块和它们之间的交互,包括静态交互和动态交互。静态交互好比软件模块间的接口和数据路径;动态交互好比流程顺序和时间行为。
软件架构设计提供一种实现软件安全需求和管理软件开发复杂的复杂性。
软件架构设计须要包含足够的信息,以方便软件实现。ISO26262对软件架构语言的要求如表2。
UML(Unified Modeling Language)就是一种半正式符号语言(semi-formal notation),也是经常使用的软件架构设计语言。
为了不高复杂度致使的失效,软件架构设计应该展示如下属性。
1)模块化
2)封装
3)简化
能够经过表3中的原则实现上面3个属性。
表3中的1d指软件模块内部应高内聚,1e指软件模块之间应该低耦合。
在软件层级应该作功能安全分析,目的是为了 1)识别或确认和功能安全相关的软件部分;
2)支持指定和验证功能安全机制的有效性。这里的功能安全机制能处理硬件随机失效和软件故障。
更具软件架构层级功能安全分析的结构,表4中的错误检测机制应该被适用,以便指定必须的软功能安全机制。
软件架构验证的方法见表6。
软件架构设计应该知足以下属性:
1)符合软件功能安全需求;
2)和目标硬件兼容;
3)遵循设计准则。
第一个目标是根据软件体系结构设计和相关的软件安全要求指定软件单元。
第二个目标是实现指定的软件单元。
第三个目标是静态验证软件单元的设计及其实现。
在软件架构设计的基础上,对软件单元进行了详细设计。在进入软件单元测试阶段以前,对软件单元设计和实现进行了静态验证。
ISO26262对软件单元设计的语言要求见表7。
在源代码级别的软件设计和实现应知足以下属性:
1)基于软件架构,子程序和函数在软件单元内执行顺序正确; 2)软件单元之间结构的一致性; 3)软件单元内部和软件单元之间的数据流和控制流的正确性; 4)简单; 5)可读性和可理解性 6)鲁棒性; 例子:防止不真实的值、执行错误、除零、数据流和控制流错误 7)适用软件修改; 8)可测性
为了实现以上属性,表8中的原则应该被遵照。
软件单元设计和实现应知足以下属性:
1)知足软硬件结构需求; 2)知足软件单元的软件功能安全需求 3) 源代码与编码准则的一致性 4)软件单元实现与目标硬件的兼容性
为了验证以上属性,表9中定义的方法应该被遵循。
单元测试、模块测试、集成测试、需求测试。
目标是证实软件单元符合软件单元设计规范,而且不包含不须要的功能。
其中“不须要的功能”是指没有对应的软件需求的功能。
软件单元测试方法如表10。
为了评估测试用例的完整性,并证实没有非预期的功能,应在软件单元层级肯定需求的覆盖度,并根据表 12 中列出的指标衡量软件代码的结构覆盖率。
第一个目标是集成软件元素。
第二个目标是证实软件架构设计已经过嵌入式软件实现。
在此子阶段中,将根据软件架构结构设计测试特定的集成级别和软件元素之间的接口。软件元素的集成和测试步骤直接对应于软件的层次结构。
在此子阶段中,根据软件架构设计对特定的集成级别和软件元素之间的接口进行测试。对软元素的集成和测试的步骤直接对应于软件的分层架构结构。
验证软件功能安全需求的目的是证实嵌入式软件知足目标环境的需求。测试应该在表16中的环境中进行。
版权声明: 本文为做者原创,未经许可禁止转载。原文地址:https://www.cnblogs.com/byronsh/p/functional-safety-software-development.html
本文的数字签名以下:
MGYCMQDvrxf3rkOGdx8rLD+p9IOIUm2ruhQNPde2GCmAqq0vbhuY4gSbcRboMJAAGvpdfIkCMQDmGEWps0K4qNQ1z0PvzSPVuYlwoy2C6vnyU00fe0pIjSLk+K3+ExAtB5z5lUGTxJg= --- 2019-7-20 17:41:35