软件详细设计文档在动态单元测试过程中的应用

前言:

随着汽车日益互联化、智能化和电动化,硬件组件的抽象化,软件功能变得愈发复杂——汽车正在从基于硬件的创新转向基于软件的创新,并且软件安全和质量越来越受到制造商和消费者的关注,而传统的工具和流程可能无法满足汽车发展与应用的实际需求。为了解决这些安全和质量方面的问题,汽车工业已经采用了ASPICE标准和ISO 26262标准,它们为电气和电子系统的开发提供了最佳的实践。

单元测试是软件测试阶段最基本的测试,它能够消除深度未知隐患。它反馈更快,更省时间。此外,ASPICE过程及ISO26262安全规范同样对单元测试提出了相关要求。

软件详细设计文档为单元测试提供了基础的输入参照。从ASPICE角度来说,没有详细设计文档是无法进行单元验证或测试的。这表明,详细设计文档指导着单元测试过程的所有活动。同时,使用像VectorCAST/C++这样的专业工具,高效进行功能测试的同时,保证了代码的覆盖度,符合ASPICE和ISO26262行业规范要求,并为产品的第三方认证提供便捷有力的支持。

1 WHY:(软件详细设计文档与单元测试的基本关系)

1.1 从V模型角度

在这里插入图片描述

图 1 ISO 26262里面的V模型

V模型是在快速应用开发(Rapid Application Development,RAD)模型基础上演变而来,其特点就是它清楚的标识了开发和测试的各个阶段以及他们之间的对应关系;左边部分是软件开发阶段,右边部分是软件测试阶段。从上图中我们可以看出,软件详细设计文档对应着软件单元测试,所以要想做好单元测试,就必须有软件详细设计文档作为输入,同时要求测试工程师对软件详细设计文档有着深刻的理解。

软件详细设计文档应在编写代码之前完成,软件代码是对软件详细设计文档的具体实现,软件单元测试则是以软件详细设计为参照,判断软件代码是否符合软件详细设计文档的工作。

1.2 软件详细设计文档是测试输入的基础参照之一

在这里插入图片描述

图 2 软件详细设计文档是测试输入的基础参照之一

VectorCAST/C++可以为单元测试和集成测试提供高度自动化的解决方案,能够显著提升开发人员在验证安全和任务关键型嵌入式系统方面的工作效率。广泛应用于航空电子、医疗设备、汽车、工业控制、铁路和金融行业。

如上图所示,将详细设计文档和单元需求文档结合起来,会大大的提高编写测试用例效率。特别是对于那些颗粒度较大的“单元需求文档”,需要结合软件详细设计文档,从颗粒度较大的需求提取出有效的部分来进行功能测试。

软件详细设计文档与单元需求文档相辅相成,所以软件详细设计文档在单元测试中有着十分重要的作用。

然后,通过相应的源代码使用VectorCAST/C++工具创建测试工程,接着通过VectorCAST/C++工具为需求测试自定义编写测试用例,同时将需求映射到测试用例,形成测试用例与单元测试需求、测试用例与代码覆盖度之间的双向可追溯性,并且可以在最后的测试报告中体现出来。

1.3 快速理解功能需求,降低沟通成本

如果负责该项测试测试的人员对项目内容了解很有限的话,这就免不了与开发人员进行频繁的沟通。即使是一个公司内部进行测试,只要不是开发人员来进行测试,一般也避免不了与开发人员进行沟通,但是如果有了软件详细设计文档,测试人员可以快速了解开发内容,理解功能需求,降低与开发人员沟通时间与次数,而且能够较完整的完成其单元测试。

在这里插入图片描述

图 3 有无软件详细设计文档对测试周期和沟通次数的影响示意图

2 WHAT:(什么是软件详细设计文档)

2.1 详细设计基本概念

详细设计是为了确立每个模块的实现算法、数据结构以及接口定义,用适当的方法表示算法和数据结构的细节。

它通过一些设计描述工具,无歧义的描述过程单位的相关细节。详细设计产生的主要文件就是软件详细设计文档。

此外,软件详细设计文档一般来源于软件架构设计的进一步分析。在软件架构设计活动中,设计了软件组件和组件间接口。

软件详细设计则是对软件组件的进一步分解和设计,一般包含三个方面:软件单元,软件单元的内部逻辑和软件单元间的交互逻辑。

在这里插入图片描述

图 4 软件详细文设计文档包含的内容

2.2 详细设计文档基本内容

由于自然语言不具有单义性,所以要进行无歧义的描述软件过程单元细节,就必须使用一些特定的设计描述方法。详细设计采用的方法一般有程序流程图、HIPO(Hierarchy plus Input Process Output)图、N-S图等,还有其他描述说明形式(如图5)。使用这些方法就是来规范和辅助说明算法、数据结构和接口相关细节的。

这些细节涵盖了数据结构定义,全局变量和宏定义描述,动态行为描述(比如任务,中断和需求方案分析等),每个函数的设计(比如输入、输出、流程图、伪代码等)等。

在这里插入图片描述

图 5 软件详细设计文档包含了GetStopSigLevel函数的定义

3 HOW:(软件详细设计文档在VectorCAST/C++工具中的应用)

3.1 为测试用例的数据提供依据

在这里插入图片描述

图 6 单元需求文档csv文件
  • Key:FR6
  • ID:FR6
  • Module:requirement 3
  • Title Description:“The signal light_intensity shall be an input to lights control. Its value shall range from 0 to 100.”

在这里插入图片描述

图 7 需求文档csv文件中的某条需求

如上图标黄区域,说明了“light_intensity”变量变化范围是0~100。所以根据这条详细设计文档说明,就可以正确编写测试用例,并保证了测试用例数据是有实际意义的,避免像“light_intensity=120”等这样无意义的赋值。


在这里插入图片描述

图 8 具有意义的测试用例并通过


在这里插入图片描述

图 9 无意义的测试用例并失败

3.2 VectorCAST/C++工具RGW功能

在这里插入图片描述

图 10 通过工具实现软件单元需求与测试用例关联

VectorCAST/C++提供一个RGW(Requirements Gateway)功能。VectorCAST/C++支持与一些需求管理系统Polarion、DOORS、RequisitePro等进行集成,同时支持需求管理系统导出的CSV等格式文件。

对于经过软件详细设计文档印证的需求文档,我们可以按照这些结构文件编写,使需求文档契合VectorCAST/C++工具,使用该功能。可以实现软件单元需求、测试用例和代码覆盖率之间的可追溯性,并允许将单元需求导入,映射到测试用例。

这样可以帮助测试人员,当需求发生更新或迭代时,能够快速更新测试用例或编写测试用例,提高工作效率。

所以软件详细设计文档,在很大程度上为项目团队提升了测试效率、提升工作的自动化率。

3.3 批量生成测试用例

对于那些详细设计文档里的某些函数,若具有一般数学表达式的功能的函数且我们可以事先确定好它的输入与输出的,可以通过VectorCAST/C++工具提供的CSV Mapping功能来批量构建测试用例。

在这里插入图片描述

图 11 包含测试所需数据的CSV文件

首先我们根据函数关系确定好一系列的输入值和期望值形成CSV文件,然后将CSV文件加载到工具中,接着确定好数据列与测试用例模板里变量的对应关系,最后选择创建测试用例。
通过上面操作我们就会快速生成一系列的测试用例。


在这里插入图片描述

图 12 对应测试用例模板变量与CSV文件列的关系并生成测试用例

总结:

众所周知,进行单元测试不仅可以尽早地发现错误,还容易发现深层次问题,并能快速定位问题的来源,针对相关需求,向开发人员进行反馈,小步快速迭代,高效的实现正确的需求和代码。而详细设计文档不仅为开发提供了标准,也为后续的测试提供了参考。通过VectorCAST/C++联系实际问题,能快速的完成动态单元测试。

北汇信息专注于汽车电子测试,提供专业的汽车电子测试系统搭建及测试咨询服务;提供完整的汽车新能源测试服务。当然在代码测试方面,我们也有完整的代码测试解决方案。

VectorCAST/C++作为Vector公司的代码动态测试工具,既可以用于手写代码,也可以用于自动生成代码的测试,如模型转代码的测试。

本次为大家简单介绍了软件详细设计文档在单元测试过程的一些简单应用。后续将会为大家带来更多基于VectorCAST/C++的动态测试相关内容。同时也欢迎垂询和沟通,共同探讨。

注:文中图片来源于ISO 26262、VectorCAST/C++(Vector)。

参考文献:
[1] VectorCAST/C++相关文档
[2] 仨人谈起·基于模型开发(MBD)场合,模型设计可以等同于软件详细设计吗?

作者:北汇信息-陈镇江
在这里插入图片描述


在这里插入图片描述

Logo

获取更多汽车电子技术干货

更多推荐