VectorCAST:系统级代码覆盖率测试--基于VX1000高速数据传输

2018-12-28 13:20:26·  来源:Vector维克多  
 
代码覆盖率在汽车电子行业的软件代码测试中愈来愈受重视,这不仅是由于功能安全规范(如国际标准ISO26262和国家标准GB/T34590)的高度推介,更是来自于研发组织
代码覆盖率在汽车电子行业的软件代码测试中愈来愈受重视,这不仅是由于功能安全规范(如国际标准ISO26262和国家标准GB/T34590)的高度推介,更是来自于研发组织内部对提升软件代码质量的迫切需求。
 
语句覆盖、分支覆盖、MC/DC覆盖、函数覆盖、函数调用覆盖是汽车电子软测中提及最多的五种类型。针对代码覆盖率测试,大多数研发组织是在单元测试阶段通过专业工具(如VectorCAST/C++)完成的;但为应对精益求精的需求,尤其是ISO 26262-6[1]中对于集成测试提出的函数覆盖和函数调用覆盖指标,如何去落地实现并通过自动化测试方式提高效率,就需要更好地利用工具进而完善组织的测试策略。
图1 ISO26262-6 Table 12
 
1、用户需求
实施本次案例的用户专注于电池管理系统(BMS),作为业界翘楚,不仅其产品广受终端用户欢迎和信赖,而且质量为先、不断优化的研发理念也被视作行业标杆。
在单元测试环节,用户已使用VectorCAST/C++(VectorCAST用于单元/集成动态测试的工具)实现了函数级别的代码覆盖和功能验证;而此次在系统级别,除了验证功能,用户还提出了应用VectorCAST/QA(VectorCAST用于系统测试的工具)实现以下需求:
编辑自动对被测项目软件实现函数级的插桩处理(Instrumentation on the Function level)
实时时获取目标板上执行系统测试用例的代码覆盖信息
对每条系统测试用例统计其对应的函数/函数调用覆盖
 
2、需求和难点分析
以往,想要分析系统测试用例是否足够满足对产品功能的测试,一般会基于需求文档和设计文档来衡量。但VectorCAST/QA提供了另一种思路,即通过获取系统测试用例和代码行的关联以及覆盖信息,从而以双向追溯的结果准确地告知测试人员,是否执行目标功能的系统测试用例跑进了设计的函数代码、以及是否指定代码被相应功能的系统测试用例覆盖。
图2 VectorCAST/QA 工作原理
在实际应用中,目标板的内存和调试口传输速率是对VectorCAST/QA 影响最大的两个掣肘,甚至可能造成瓶颈导致丢包或传输中断。在考量测试的可行性时,我们评估出用户现有的调试串口根本无法满足数据传输的高速率要求。
除此以外,更大的一个难点是针对本例中用户的第2点需求:该用户在每条系统测试用例的最后一步都会按照设计规范添加休眠操作,即主动清空内存信息!在过往项目中,用户目标板上实时收集的原始覆盖信息都是保存在内存指定区块,执行完一条系统测试用例后,覆盖数据可通过用户的调试通道反馈给上位机上的VectorCAST/QA进行覆盖度分析;而此案例的难点也促使我们考虑优化方案,即在测试用例执行的同时,就要把内存中的覆盖数据同步导出。

3、具体实施
针对用户实际项目(编译器为Tasking、目标板为TC27x系列),VectorCAST/QA结合CANape/VX1000成功完成了系统级别函数覆盖率测试。VX1000是Vector针对高速测量的专业设备,通过目标板上的高速调试接口(例如DAP、JTAG、Aurora等)传输数据,最高数据传输带宽可达50MB/S,从而解决了本例中VectorCAST/QA 对于实时传输和高传输率的需求。此外,VX1000不仅能提高数据传输速率,也能完成目标板的软件刷写。
图3案例设计流程图
由于用户目标板内存的限制,此次测试只针对函数覆盖率类型;如果目标板内存充足,还可尝试测试函数调用覆盖率甚至语句覆盖率。
以下是该案例的简要测试步骤:
1. 针对用户项目源代码,运用VectorCAST/QA自动进行插桩处理、覆盖率接口添加,同时插入VX1000的驱动代码
图4 VX1000驱动代码示例
2. 重新编译生成新的HEX文件后,通过VX1000刷写目标板程序
图5 VX Config 刷写ECU
3. 启动已配置好的CANape工程文件,开始记录vcast_vx1000_buffer结构体(自动解析vcast_vx1000_buffer在可执行文件内的动态分配地址)
图6 CANape 工程界面
4. 用户执行hil测试用例(在本例中使用了CANoe和自动化测试用例脚本实现环境vTESTstudio)
5. 调用CANape自带的Converter工具,将生成的.mf4文件自动转化成.dat文件
6. 用VectorCAST/QA导入.dat文件,查看测试用例与函数覆盖率的关联和覆盖度报告
图7 VectorCAST 覆盖率报告

4、单元与系统测试的覆盖率合并
针对代码覆盖率测试,用户项目开展中大多会碰到两种情况:一是系统测试用例完备而单元测试用例稀缺,二是覆盖率测试往往不在项目最初制定的计划内。
图8 VectorCAST单元测试与系统测试
那如何在项目后期阶段快速完成100%的代码覆盖率测试?VectorCAST提供了两款产品,即VectorCAST/C++和VectorCAST/QA。在项目的后期,用户可以用VectorCAST/QA获取现有的系统测试用例执行完所覆盖的代码率,再结合VectorCAST/C++创建单元测试用例,将剩余的代码覆盖率信息补足。VectorCAST可以自动将系统测试和单元测试的覆盖率合并,这样可以最大程度地利用现有的系统测试用例而减少做单元测试的时间。
图9单元与系统覆盖率合并
VectorCAST不仅提供单元/集成/系统级别软件代码的自动化测试,而且提供了与诸多主流ALM/CI/V&V工具链的集成。此外,依托于Vector为汽车和相关行业的制造商提供专业的研发工具链、嵌入式软件和技术服务能力,VectorCAST也确保为广大用户提供本地化的通用解决方案和满足定制化的开发需求。

参考文献
[1] ISO26262 (v2018) Road vehicles
Functional safety -- Part 6:
Product development: software level 
分享到:
 
反对 0 举报 0 收藏 0 评论 0
沪ICP备11026917号-25