VectorCAST/C++:自动化单元测试解决方案

2019-06-06 00:23:05·  来源:Vector维克多  
 
针对复杂C/C++代码测试的案例分享VectorCAST介绍VectorCAST是适用于汽车电子、航空航天、轨交医疗、工业控制以及物联网领域的代码测试解决方案工具集,支持300多
针对复杂C/C++代码测试的案例分享
 
VectorCAST介绍
 
VectorCAST是适用于汽车电子、航空航天、轨交医疗、工业控制以及物联网领域的代码测试解决方案工具集,支持300多款编译器和目标板的集成,并通过了南德TÜV认证。
 
VectorCAST/C++是VectorCAST工具集中的动态单元测试工具,适用于C和/或C++语言,其单元测试框架如图1所示。 
图 1 VectorCAST/C++单元测试框架
案例背景介绍
本案例所实施项目为车载娱乐影音系统,使用C和C++两种语言编写,并且包含了二级供应商提供的源代码。该项目包含800多个源文件和数百万行代码。
在项目第一阶段,目标是完成其中高优先级的500个源文件的单元测试, 依照ISO 26262中的ASIL D规范要求,实现100%语句和>85%MC/DC覆盖(后续阶段将逐步实现>95%的MC/DC和全部文件的覆盖)。 
该项目的单元测试面临的挑战在于:
最终客户出于功能安全的考量,在项目实施后期(即开发工作基本完成)才将单元测试强制列入最终交付清单内,但整体项目质量、成本和时间保持不变。
过多的源文件导致测试成本水涨船高。源文件多意味着被测函数多,如果针对每个函数手工编写测试用例,需要在保证项目节点的前提下投入大量人力资源,这是项目成本无法承受的。
条件语句众多,且条件语句由多个布尔表达式组合而成。通过人工分析MC/DC真值表确定真值对的方法设计测试用例不仅耗时,还会人为引入遗漏,无法保证测试的正确性。
覆盖度统计数据量大。同时统计代码的语句覆盖度和MC/DC覆盖,并在项目级别、文件级别以及函数级别统计覆盖度信息,是无法通过人为统计实现的。
针对以上项目状态、需求和难点的分析,我们帮助客户设计了一套基于VectorCAST/C++的自动化单元测试方案,如图2所示。
图 2 针对该项目的自动化单元测试方案
整个测试方案的实施过程分为如下步骤:
搭建VectorCAST测试环境,配置服务器和所有客户端;
自动创建测试项目,包含所有被测源文件的单元测试环境配置;
对测试项目进行版本控制,将创建完成的测试项目提交到保存源码的版本控制服务器上;
开展分布式单元测试的协作,各单元测试工程师从版本控制服务器上拉取测试项目到本地,自动插入测试用例并执行测试。当前测试任务完成后,将更新后的测试项目提交到版本控制服务器;
组长/工程师可实时查看VectorCAST/C++提供的多种类型的测试报告;
项目经理/总监可通过VectorCAST/Analytics实时查看整个测试项目进展;
在版本控制服务器上进行基于变更的单元测试,实现快速的自动化回归测试。
VectorCAST测试环境
许可证
使用一台Ubuntu14.04 64-bit物理机作为公用的许可证服务器,直接解压VectorCAST/C++的Linux 64-bit的安装包。将许可证运行在指定的未被占用的端口上,即可与其他程序的许可证服务共存且互不影响。 
配置客户端
在测试机上安装VectorCAST客户端,然后配置相应环境变量,便可正常使用VectorCAST。 
安装模拟器
为了提高测试的效率,同时降低测试成本,推荐使用模拟器来执行测试用例以替代实际目标板。此项目中,QEMU作为模拟器执行测试。 
配置编译模板
编译测试源代码时使用的编译模板与实际开发过程中使用的编译模板相同,这样可以保证测试编译环境和开发编译环境的一致性,从而保证测试的有效性。
自动创建测试项目
过滤被测目标
自动控制(Automation Controller)组件支持配置过滤模式。通过配置过滤模式来保证只测试符合该模式的被测源文件。 
启动创建
自动创建测试项目支持集中式创建和分布式创建两种方式:
集中式是指在一台测试机上统一为所有的被测源文件创建测试环境,之后所有测试开发人员共同使用这份项目文件,对各自负责的测试环境进行单元测试;
分布式是指测试开发人员各自创建项目文件并进行单元测试,之后再合并为一份总的项目文件,也即分布式协作。
为了节约调试的时间、降低合并时的风险,客户选择集中式的方式来创建测试项目。
测试项目版本控制
创建完初始的测试项目后,客户需要对测试项目进行版本控制。VectorCAST只需对测试项目必需的文件进行版本控制,其他过程文件均无需版本控制。 这些文件均为文本文件,可读性强,占用空间小。 
分布式测试
在初始测试项目的基础上,单元测试人员将版本控制服务器上的测试项目拉取到本地。在本地新建一个分支,对其负责的测试环境进行单元测试。 
根据MC/DC覆盖的测试需求,插入MC/DC测试用例。VectorCAST/C++会根据条件语句中的各子条件来自动生成相应的测试用例以实现MC/DC覆盖。执行测试用例后, MC/DC覆盖度结果显示在覆盖度视图中。
针对未覆盖到的项,可以复制一个已有的测试用例,或者插入一个新的测试用例,然后配置所需的输入参数来执行测试,以实现覆盖。 
查看测试报告 
客户希望能够合并所有测试环境的完整报告(Full Report)。由于环境多达500个,因此使用python为客户定制开发合并报告的工具,实现了自动提取所有测试环境的报告,合并成一份最终报告。 
查看测试项目进展
通过使用VectorCAST/Analytics功能,项目的相关人员能够实时地了解测试项目的进展,明确当前项目的风险,以及后续工作的重心。
回归测试
当源码改动后,VectorCAST/C++会自动检测到代码发生了变更,并自动识别受影响的测试用例。基于变更的测试方法能够快速执行受影响的测试用例,节省了大量时间。 
经验总结
对大量未测代码实行单元测试,使用自动化的单元测试方案,可以提高测试效率,节约测试成本,发现代码中的缺陷;
利用基于变更的测试方法进行回归测试,能够快速执行并反馈结果,保证测试进度;
在编码工作开始时执行自动化的单元测
 
 
分享到:
 
反对 0 举报 0 收藏 0 评论 0
沪ICP备11026620号