谈谈ASPICE V4.0中提到的SW Unit

文摘   2024-09-11 15:39   福建  

ASPICE V4.0的SWE.3 Software Detailed Design and Unit Construction中,对SW Unit有如下的说明:


The boundary of a software unit is independent from the software unit’s representation in the source code, code file structure, or model-based implementation, respectively. It is rather driven by the semantics of the application domain perspective. Therefore, a software unit may be, at the code level, represented by a single subroutine or a set of subroutines.

软件单元是独立于实现的,即:独立于其在源代码、代码文件结构或基于模型的实现。软件单元是从应用的视角,使用应用领域的语义来定义的。从代码的层面来看,软件单元可以由单个子例程或一组子例程来实现。


也就是说:软件单元是在软件设计层面的,最底层的、独立的对象。

如果是使用C/C++代码来实现的话,一个软件单元,可以由一个函数,或几个函数来实现。


这样的说明,给很多人造成了疑惑,归纳一下,通过微信或公众号经常被问到的话题包括:

  • ASPICE V4.0对详细设计的要求,是不是降低了?

  • 是不是详细设计中,没有必要识别出所有函数了?

  • 不需要每个函数都进行设计吧?

  • 如果详细设计中,函数没有被识别完整,函数没有被全部设计,那怎么做单元测试呢?基于代码吗?


沿用如下文章中的示例,一起来捋顺下思路:


 

(1) 软件详细设计

① 软件详细设计中,识别了软件单元(GetSenData, PreFilter, PlausibilityCheck)、以及软件单元之间的交互:


② 软件详细设计中,有单元的内部实现逻辑的设计,例如,对GetSenData进行了如下的设计:

 

(2) Coding

注:电脑上没有开发编译环境,使用记事本写的代码,代码逻辑和语法都可能有错误,代码问题请忽略哈....


对于GetSenData函数来说,可以使用一个函数来进行实现,例如:

 

也可以使用2个函数来实现,例如:


如上两种方式的区别,在图中使用红线进行了标识。

 

从以上示例可以看出:

软件详细设计中,对软件单元进行了定义(GetSenData的函数定义),对软件单元的实现逻辑进行了设计(GetSenData的函数流程图设计),没有识别出所有的函数,是不是也不影响代码实现呢?


软件单元是在设计层面的,与实现无关的

这就是在开发软件时,经常被提到的“设计与实现的分离”原则吧

 

这里需要提醒一下:

GetSenData这个软件单元是一个整体,不可分割的。

软件单元内部的函数,是不可以被外部直接调用的,如下图所示:


(3) 单元测试

单元测试策略可以定义如下:

  • 分支覆盖 100%,

  • 测试用例设计方法:需求分析、等价类、边界值

基于软件详细设计,进行单元测试用例的设计


对于这个例子来说,就是根据GetSenData的函数定义,根据GetSenData的函数流程图,来设计测试用例。


不需要参考代码,也能设计出完整的测试用例吧?

此处,就不再详细举例了,感兴趣的可以参考如下文章:


执行测试,发现覆盖度不足时,可以对比详细设计和代码,检查是否存在不一致。


( -- 完 -- )


先起公司近期公开课:



推荐阅读:




仨人谈起
咨询是盛开的生命;传播理念、思想、希望和行动;谈Automotive SPICE,汽车功能安全(ISO26262 + SOTIF),汽车网络信息安全
 最新文章