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的函数流程图,来设计测试用例。
不需要参考代码,也能设计出完整的测试用例吧?
此处,就不再详细举例了,感兴趣的可以参考如下文章:
执行测试,发现覆盖度不足时,可以对比详细设计和代码,检查是否存在不一致。
( -- 完 -- )
先起公司近期公开课:
推荐阅读:
欢迎访问公众号菜单,下载文章合集