软件架构设计的颗粒度
引子
最近给某客户咨询时,与架构工程师讨论了软件架构设计的颗粒度问题。
软件架构工程师纠结的问题是:
功能安全ISO26262标准,以及某OEM要求中,都提到了软件架构设计时需要识别SW Unit。
从软件架构设计活动的目的、项目人员分工等方面考虑的话,由架构设计工程师将软件分解到SW Unit级别,有点过细了。
这个问题比较有代表性,因此将讨论内容进行整理,分享如下:
说明:由于某OEM的要求是受限使用的,故本文仅基于ISO26262中的相关条款进行讨论。
术语及ISO26262标准要求
software unit (Reference from ISO26262:2018)
atomic level software component of the software architecture that can be subjected to stand-alone testing.
软件架构中的最低层级(原子级别)的且可被孤立测试的软件组件。
SW Unit是最低层级的,原子级别的可被孤立测试的对象,SW Unit封装了数据和语句。SW Unit可以是函数(C语言场合)、方法(面向对象的C++, JAVA语言场合)。
ISO 26262:2018 Part 6-7 Software architectural design
7.4.4 The software architectural design shall be developed down to the level where the software units are identified.
软件架构设计应被开发到能够识别出软件单元的程度。
ISO 26262:2018 Part 6-8 Software unit design and implementation
8.1 Objectives: to develop a software unit design in accordance with the software architectural design, the design criteria and the allocated software requirements which supports the implementation.
8.1 目标: 根据软件架构设计、设计准则以及分配的软件需求,开发软件单元设计,来支持软件单元的实现。
从以上ISO26262条款,可以了解到:
ISO26262 Part6-7: 软件架构设计时,识别SW Unit
ISO26262 Part6-8: 软件单元设计时,设计SW Unit
软件设计
从”软件需求”到”软件实现(如:Coding)”之间的活动,可以统称为”软件设计”。
软件设计是基于软件需求,设计软件内的各个层级的逻辑单元,最终设计所有的软件单元。
如下,举一个简化的例子进行说明:
① 识别软件需求
② 进行软件设计,识别软件组件,确定软件组件层面的需求
③ 继续进行软件设计,识别软件单元,定义软件单元层面的需求
④ 设计软件单元
与ISO26262:2018 Part6的对应
上述的活动步骤,与ISO26262:2018 Part6条款的对应关系如下:
与项目工程活动的对应
如果按照如下方式,对应到项目工程活动,是否可以呢?
说明:如下所定义的软件工程活动仅是示例
ISO26262的各个条款都有被做到,当然可以了。
(为什么不可以呢?
)
结论:
项目工程活动的划分,依赖于项目场景和需要。而可以和ISO26262的条款,不一一对齐。
(说明:如上示例中的项目工程活动划分仅为示例
)
( -- 完 -- )