编辑推荐: |
本文主要介绍了软件架构的定义和描述方法、软件架构的设计原则、软件架构的静态设计、软件架构设计的注意事项、软件动态架构的设计要求和软件动态架构设计实例相关内容。希望对你的学习有帮助。
本文来自于微信公众号焉知汽车,由火龙果软件Linda编辑,推荐。 |
|
软件架构设计是功能安全软件开发过程中的关键阶段,作为实现软件安全需求和软件需求的载体,它定义了软件架构要素并将其细化到能够识别出软件单元的程度。
ISO26262 Part6 Clause7中要求:软件架构设计应描述软件架构要素的静态设计方面和动态设计方面。接下来,我们将通过“功能安全之软件架构设计”专题分别从功能安全软件静态架构设计、动态架构设计、多核和部署三个方面进行介绍。
本文中,我们将重点介绍软件架构的定义和描述方法、软件架构的设计原则、软件架构的静态设计和软件架构设计的注意事项。
01、软件架构的定义和描述方法
软件架构是软件要素的结构化表征,通过将软件需求分配给软件组件,从而识别并划分软件组件及其边界和信号交互。软件架构设计是指全部软件组件及其在层次结构中的交互,既要满足软件安全需求,又要满足其它软件需求。因此,软件架构包括安全相关的软件组件和非安全相关的软件组件。
软件架构设计的描述方法如下表所示:
表1 软件架构设计描述方法
1b. 语法和语义定义均不完整的描述方法;
1c. 语法定义完整、但语义定义不完整的描述方法,如SysML、UML、Simulink和Statefolw等;
1d. 语法和语义均被完整定义的描述方法,如Zed、NuSMV、PVS、VDM和数学公式等。
注:尽管ISO26262 要求ASIL C及以上等级的软件架构设计描述方法要采用半形式化描述法,但是没必要对所有ASIL
C及以上等级的软件架构设计都使用半形式化描述方法。
02、软件架构的设计原则
在进行软件架构设计时,我们需要考虑软件架构的简单性、一致性、封装性、可理解性、可验证性和可维护性等,同时结合软件架构的设计原则对软件架构进行开发和设计。软件架构设计原则如下表所示:
表2 软件架构设计原则
1a. 软件组件需要采用分层架构,如AUTOSAR架构或类AUTOSAR架构;
1b. 每个软件组件都不能太大,逻辑不能太复杂,圈复杂度不能太高,具体详见“功能安全之执行低复杂性”;
1c. 软件组件的接口数量不能太多,接口数量的增加会导致软件组件复杂度的升高;
1d&1e. 软件组件内部要实现功能内聚,软件组件之间要降低耦合;
1f. 软件的调度要合理,确保所有的Task能够被操作系统有条不紊的调度并正确执行;
1g. 少使用中断,如果必须使用,需要先定义中断的优先级;
1h. 需要对软件组件进行内存分区与访问权限保护,确保软件组件之间免干扰;
1i. 要对共享资源进行管理,常见的共享资源包括:供电、时钟和驱动等。
03、软件架构的静态设计
本文以VCU扭矩计算中加速踏板相关的软件安全需求为例,通过半形式化方法描述功能安全软件静态架构中“加速踏板合理性校验”软件组件的数据接口和函数接口。接口信息如下图所示:
图1 “加速踏板合理性校验”静态架构
将所有的软件安全需求和其它软件需求按照软件架构设计原则进行设计后,得到的应用层软件架构、系统服务层架构、ECU抽象层架构和MCU抽象层架构如下图所示:
图2 应用层软件架构
图3 系统服务层软件架构
图4 ECU抽象层软件架构
图5 MCU抽象层软件架构
最后,将应用层、RTE、系统服务层、ECU抽象层和MCU抽象层软件架构汇总到一起,即可得到VCU的软件总体架构,如下图所示:
图6 VCU软件总体架构
04、软件架构设计的注意事项
在进行软件架构设计时,有一些常见的注意事项,主要包括:
a. 软件架构设计既要考虑软件安全需求,又要考虑其它软件需求;
b. 软件架构设计是对整体软件架构的设计,不一定局限于某个微控制器或ECU;
c. 软件组件应按照分配给它的所有需求的最高的ASIL等级来进行开发;
d. 软件架构设计应被开发到能够识别出软件单元的程度;
e. 如果嵌入式软件的最高等级为ASIL D,需要对软件组件行适当的空间隔离;
f. 应该对嵌入式软件所需资源进行上限预估,包括:时间资源、内存资源和通信资源等;
g. 一个软件分区内的Task,彼此之间不能免于干扰;
h. 一个软件分区不能改变其它软件分区的代码或数据,也不能控制其它软件分区的非共享资源。
软件架构设计是功能安全软件开发过程中的关键阶段,作为实现软件安全需求和软件需求的载体,它定义了软件架构要素并将其细化到能够识别出软件单元的程度。
ISO26262 Part6 Clause7中要求:软件架构设计应描述软件架构要素的静态设计方面和动态设计方面。接下来,我们将通过“功能安全之软件架构设计”专题分别从功能安全软件静态架构设计、动态架构设计、多核和部署三个方面进行介绍。
下面我们将从软件动态架构的设计要求和软件动态架构设计实例两个方面进行介绍。
05、软件动态架构的设计要求
针对软件架构动态设计方面,功能安全标准要求动态架构设计需要描述以下几个方面:
a. 事件和行为的功能链;
b. 逻辑顺序和数据处理;
c. 控制流和并发进程;
d. 通过接口和全局变量传递的数据流;
e. 时间限制等。
为了帮助大家更好的理解上述内容,我们将通过一个具体的项目案例进行讲解。
06、软件动态架构设计实例
为方便大家更好的理解和对比功能安全软件静态架构和软件动态架构设计的区别和联系,我们继续使用功能安全之软件架构设计(上)
中的例子讲解软件动态架构设计。
为了满足ASIL D等级的要求,软件动态架构设计全部采用满足半形式化描述法要求的UML语言。
针对逻辑顺序和数据处理,可以采用泳道图的方式进行描述。图中,每个泳道代表了一个软件组件,通过Activity描述在该泳道图内完成的活动。通过这样的方式,可以将完成VCU扭矩计算功能的执行逻辑及顺序表达清楚。
图7 “VCU扭矩计算”的泳道图
针对通过接口和全局变量传递的数据流,可以采用活动图的方式进行描述。图中,每个Activity代表一个软件组件,通过信号线来描述不同组件之间的信号交互,从而将VCU扭矩计算的数据流表达清楚。
图8 “VCU扭矩计算”的活动图
针对控制流和并发进程,可以采用时序图的方式来进行描述。时序图中,每条生命线的实体代表一个软件组件,生命线自上向下代表软件执行的时间先后顺序。通过时序图描述VCU扭矩计算功能的控制流,其交互接口包括数据接口和函数调用,函数调用包括同步调用、异步调用以及是否有返回值等。
图9 “VCU扭矩计算”的时序图
针对操作系统的调度时序,可以参考图4中的时序图。作为调度对象的操作系统应用集先调用可信函数,通过可信函数请求操作系统的当前状态,操作系统的状态包括“No
Error”和“No function defined for this index”两种。当操作系统的状态为“No
Error”时,操作系统会通过可信函数来请求被调对象的操作系统应用集。
图10 “操作系统任务调度”的时序图
针对FIM和Dem的初始化逻辑,可以参考图5中的时序图。
图11 “FIM&Dem初始化”的时序图
针对看门狗的数据交互逻辑,可以参考图6中的时序图。
图12 “看门狗启动”的时序图
本文以VCU扭矩计算相关的软件安全需求为例,分别从软件动态架构的设计要求和软件动态架构设计实例两个方面进行了详细介绍,供从事功能安全工作和欲从事功能安全工作的工程师进行参考和学习。
|