![]() ![]() ![]() 软件架构设计是功能安全软件开发过程中的关键阶段,作为实现软件安全需求和软件需求的载体,它定义了软件架构要素并将其细化到能够识别出软件单元的程度。 ISO26262 Part6 Clause7中要求:软件架构设计应描述软件架构要素的静态设计方面和动态设计方面。接下来,我们将通过“功能安全之软件架构设计”专题分别从功能安全软件静态架构设计、动态架构设计、多核和部署三个方面进行介绍。 ![]() 本文中,我们将重点介绍软件架构的定义和描述方法、软件架构的设计原则、软件架构的静态设计和软件架构设计的注意事项。 软件架构是软件要素的结构化表征,通过将软件需求分配给软件组件,从而识别并划分软件组件及其边界和信号交互。软件架构设计是指全部软件组件及其在层次结构中的交互,既要满足软件安全需求,又要满足其它软件需求。因此,软件架构包括安全相关的软件组件和非安全相关的软件组件。 软件架构设计的描述方法如下表所示: 表1 软件架构设计描述方法 1b. 语法和语义定义均不完整的描述方法; 1c. 语法定义完整、但语义定义不完整的描述方法,如SysML、UML、Simulink和Statefolw等; 1d. 语法和语义均被完整定义的描述方法,如Zed、NuSMV、PVS、VDM和数学公式等。 注:尽管ISO26262 要求ASIL C及以上等级的软件架构设计描述方法要采用半形式化描述法,但是没必要对所有ASIL C及以上等级的软件架构设计都使用半形式化描述方法。 在进行软件架构设计时,我们需要考虑软件架构的简单性、一致性、封装性、可理解性、可验证性和可维护性等,同时结合软件架构的设计原则对软件架构进行开发和设计。软件架构设计原则如下表所示: 表2 软件架构设计原则 1a. 软件组件需要采用分层架构,如AUTOSAR架构或类AUTOSAR架构; 1b. 每个软件组件都不能太大,逻辑不能太复杂,圈复杂度不能太高,具体详见“功能安全之执行低复杂性”; 1c. 软件组件的接口数量不能太多,接口数量的增加会导致软件组件复杂度的升高; 1d&1e. 软件组件内部要实现功能内聚,软件组件之间要降低耦合; 1f. 软件的调度要合理,确保所有的Task能够被操作系统有条不紊的调度并正确执行; 1g. 少使用中断,如果必须使用,需要先定义中断的优先级; 1h. 需要对软件组件进行内存分区与访问权限保护,确保软件组件之间免干扰; 1i. 要对共享资源进行管理,常见的共享资源包括:供电、时钟和驱动等。 本文以VCU扭矩计算中加速踏板相关的软件安全需求为例,通过半形式化方法描述功能安全软件静态架构中“加速踏板合理性校验”软件组件的数据接口和函数接口。接口信息如下图所示: 图1 “加速踏板合理性校验”静态架构 将所有的软件安全需求和其它软件需求按照软件架构设计原则进行设计后,得到的应用层软件架构、系统服务层架构、ECU抽象层架构和MCU抽象层架构如下图所示: 图2 应用层软件架构 图3 系统服务层软件架构 图4 ECU抽象层软件架构 图5 MCU抽象层软件架构 最后,将应用层、RTE、系统服务层、ECU抽象层和MCU抽象层软件架构汇总到一起,即可得到VCU的软件总体架构,如下图所示: 图6 VCU软件总体架构 在进行软件架构设计时,有一些常见的注意事项,主要包括: a. 软件架构设计既要考虑软件安全需求,又要考虑其它软件需求; b. 软件架构设计是对整体软件架构的设计,不一定局限于某个微控制器或ECU; c. 软件组件应按照分配给它的所有需求的最高的ASIL等级来进行开发; d. 软件架构设计应被开发到能够识别出软件单元的程度; e. 如果嵌入式软件的最高等级为ASIL D,需要对软件组件行适当的空间隔离; f. 应该对嵌入式软件所需资源进行上限预估,包括:时间资源、内存资源和通信资源等; g. 一个软件分区内的Task,彼此之间不能免于干扰; h. 一个软件分区不能改变其它软件分区的代码或数据,也不能控制其它软件分区的非共享资源。 |
|