登录| 注册 退出
驭捷智能

ISO 26262安全的软件开发流程

2021-05-26       浏览:  
分享到:

软件开发启动

根据ISO 26262-6 5.4.6中建议,在软件开发的启动阶段,对于启动软件级产品开发,首先需要制定关于整个软件级开发的活动和方法的计划,对于软件开发的每个子阶段,应该根据应用规范来选择对应的方法和相应的工具。

根据标准,SmartSAR Studio在选择建模语言时考虑到了:对于建模语言需要有清晰的定义,我们采用EMF、GMF两种建模语言搭建给一个建模环境提供给用户;建模语言支持模块化,抽象和结构化的构造,根据标准中对于建模和编码规范中需要包含的问题,我们的工具支持的建模和编码规范,如下表所示:

问题

ASIL

A

B

C

D

1a

复杂度低

++

++

++

++

1b

语言子集的使用

++

++

++

++

1c

使用强类型

++

++

++

++

1d

防御式编程技术

o

+

++

++

1e

使用清晰的图形表示

+

++

++

++

1f

使用命名规范

++

++

++

++


Studio的建模方法非常简单,每个模型的图元也不复杂,符合嵌入式领域软件开发人员的常识,同时我们参照了多个领域软件开发语言,定义了一套通用的建模语言。本建模语言使用强类型,每个模型有自己特定的类型,需要声明后才能使用,每个模型在建模工具中都有唯一清晰确定的图形表示,同时对于默认的模型名称有符合意义的命名方式,并且符合C语言命名规范。由于Studio是属于基于模型驱动的开发方法,同时也是一个多层的开发架构,不应该由于上层或者外部的输入错误而导致本层次被破坏,这也是将可能出现的错误造成的影响控制在最小的范围内。因此,不仅在编码构建本工具的过程中,我们采用防御式编程方法,同时在建模环境中对用户的模型也提供最大可能的防御措施,包括各种验证提示,在代码级最大可能容忍恢复用户的建模错误,将各种可能的错误风险提到最上层等。


ISO 26262安全的软件开发流程(图1)

需求分析阶段

需求分析阶段是软件工程领域中软件开发最开始的阶段,它主要是完成对系统整个的定义,确定系统的各种需求,帮助开发测试人员理解整个系统的功能,为后续的工作打下基础。

在ISO 26262-4中给出了技术安全需求规格,用来规范技术安全需求,细化功能安全概念,同时考虑到功能概念和初级的架构假设级别上。在开发周期内,技术安全规范是用来实现功能安全概念的必须技术需求。系统的初级架构假设和系统性质,包括:外部接口如通信和用户接口,系统限制条件如环境和功能限制,系统配置需求。

在技术安全需求规范中应该有的安全机制包括:

1)系统自身的错误检查、通知和控制相关的措施,这些包含系统的自我监控或者对于随机硬件错误的检查,也包含对通信通道(如数据接口,通信总线,无线连接)的失败模式检查和监控措施。

2)在和系统交互的外部设备中,对错误的检查、通知和控制相关的措施。其中,外部设备包括:其它电子控制单元,电力提供或者通信设备等。

3)使能系统到达或者维护一个安全状态的措施,包括优化安全机制冲突和仲裁逻辑。

4)细化和实现报警及降级概念。

5)防止潜在错误的措施。

设计阶段

在软件开发过程中,设计阶段是继需求之后的一个重要阶段,在了解系统的需求后,设计阶段是决定系统整体质量的重要保证,在系统设计阶段,主要关心的是系统的架构设计,基本的输入输出流程,外部交互,组织结构,模块分配,功能划分,数据结构设计和出错设计等,为软件的详细设计提供基石。

在ISO 26262-4和ISO 26262-6中都有涉及到到设计阶段安全的开发。ISO 26262-4主要关注于系统级的设计和安全方面的概念。系统设计应给予功能概念,基础架构假设以及技术安全需求,保证各个阶段的基础架构假设保持一致。

考虑到技术安全需求的实现问题,系统设计应该考虑一下这些问题:

1)        验证系统设计的能力。

2)        在系统集成期间测试的可执行能力。

3)        系统和子系统架构应该在对应的ASIL等级上符合技术安全需求。

4)        每个元素应从它实现的技术安全需求中继承最高的ASIL等级。

5)        对于安全相关的元素,应该定义其内部和外部的接口,这是为了避免其它元素影响它们的安全性。

在系统设计阶段中, ISO 26262-4的7.4.3.7中规定了为了避免高复杂性引起的失败,架构设计应该满足模块化,足够的颗粒度和简单的原则。其中模块化的系统设计应该满足的属性如下表所示。

属性

ASIL

A

B

C

D

1

层次设计

+

+

++

++

2

精确定义的接口

+

+

+

+

3

避免软件组件和硬件组件不必要的复杂度

+

+

+

+

4

避免不必要的接口复杂度

+

+

+

+


在Studio中,RTE运行时环境层根据架构层软件组件的架构设计,定义了软件组件间通信接口,有明确的通信接口生成规定,同时也避免了不必要的接口复杂度,减少了依赖关系。系统映射根据架构层定义的软件组件架构和ECU拓扑结构,完成软件和硬件的映射关系,避免了软硬件的耦合关系,减少了交互的不必要的复杂度,同时也是避免了软硬件交互的接口复杂度,减少了依赖关系。

        在ISO 26262-6中规定了软件级设计和安全相关的概念。软件架构设计代表了所有的软件组件和它们在层次化结构中的交互关系。软件架构设计提供了可以实现软件安全需求的方法以及处理软件开发的复杂性。

       为了保证软件架构设计获得的信息足够让后续的开发流程正确有效的执行,软件架构设计应该用下表中列出的表示法描述合适的抽象等级。

方法

ASIL

A

B

C

D

1a

非正式表示法

++

+

+

+

1b

半正式表示法

+

++

++

++

1c

正式表示法

+

+

+

+


为了避免因高复杂度导致的错误,软件架构设计应该满足模块化,封装性和简单这三个基本的属性,下表中给出了软件架构设计的原则。

方法

ASIL

A

B

C

D

1a

软件组件的层次化结构

++

++

++

++

1b

软件组件的高内聚性

+

++

++

++

1c

软件组件间的低耦合性

+

++

++

++


在Studio的层次结构中,支持软件组件的层次化结构,每个软件组件通过内部行为表示其软件组件具体完成的功能,满足高内聚性和低耦合性。

架构层的设计保证了软件架构设计开发到合理的程度使得所有的软件单元能够区别开。软件架构设计包含了静态设计和动态设计两部分,其中静态设计部分,架构层完成了分级层次的软件结构,软件组件的端口实现了标准中规定的软件组件的外部接口。根据标准7.4.9中指出,软件安全需求应该分配到软件组件上,每个软件组件应该根据分配给它的最高等级的ASIL来开发。

开发实现阶段

开发实现阶段是软件工程中定义的系统开发的最中心的工作,它是完成系统实现的主要工作,因此在开发实现阶段的安全保证也是Studio非常重要的工作。软件的开发实现包括源码的生成和转化为目标代码。

在ISO 26262-6的8.4.4中给出了软件单元设计和在源码级实现的属性,包括:软件单元的子程序和功能能够正确执行相关步骤;软件单元间保持接口一致;简单性;可读性和易理解性;鲁棒性;易于修改和可测试性。如下表给出了我们工具符合标准的一些设计原则。

方法

ASIL

A

B

C

D

1a

子程序和方法只有一个入口和出口

++

++

++

++

1b

没有动态对象和变量,也没有在创建时的在线测试

+

++

++

++

1c

变量初始化

++

++

++

++

1d

变量名的多次使用

+

++

++

++

1e

不使用全局变量

+

+

++

++

1f

尽量不适用指针

o

+

+

++

1g

没有隐式的类型转换

+

++

++

++

1h

没有隐藏的数据流或者控制流

+

++

++

++

1i

没有无条件跳转

+

++

++

++

1j

没有递归

+

+

++

++


由于Studio的最终目标是生成安全可靠的代码,包括软件组件的内部算法,软件组件间相互通信代码,ECU配置等代码,因此也需要符合标准中对于编码的一些规范。

集成和测试阶段

集成和测试阶段是软件开发的最后阶段,它是正确高效运行软件的必要保证。集成是按照系统设计的要求将各个模块组装成子系统或者是系统,测试验证软件开发是否正确的完成了需求。

根据ISO 26262-4中的规定,集成和测试阶段包含三个阶段和两个目标。第一个阶段是项目包含的每个元素的软硬件集成;第二个阶段是项目的所有元素集成一个完整的系统;第三个阶段是本系统和其它系统的集成。第一个目标是根据需求和ASIL等级来测试系统对安全需求的符合性;第二个目标是验证系统设计的功能需求和安全需求是否都完成。

文章来源于 公众号 汽车功能安全


在线
客服

在线客服 - 驭捷智能周一至周日 10:00-24:00(欢迎呼叫)

选择下列服务马上在线沟通:

客服
热线

18917451722
6*12小时客服服务热线