背景介绍
随着汽车行业的迅速发展,车载代码量以及复杂度不断飙升,如何保证软件的安全成为车辆功能安全迫切需要解决的问题。所以,在软件代码的开发过程中,为降低软件风险,提高代码质量,我们需要对代码实施静态测试和动态测试。
静态测试可以不运行被测程序本身,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性以及对编码规范的遵循程度,Helix QAC就是这样一款权威的静态测试工具,可以实现代码的自动化检测。
而我们今天要介绍的VectorCAST是一款权威的动态测试工具,通过实际的运行被测试程序,输入相应的测试数据,检查实际输出结果和预期结果是否相符合。下面我们就来具体认识一下这款动态测试工具。
VectorCAST简介
VectorCAST是Vector公司旗下的一款代码测试工具,主要为嵌入式系统提供高度自动化的代码动态测试解决方案,尤其适用于对自身有高安全性和高可靠性要求的行业,比如汽车电子、航天航空、轨交医疗、工业控制以及物联网等领域。
在认证方面,VectorCAST通过了南德TÜV认证,遵循相关的行业认证标准,比如ASPICE,Do178B, ISO26262, IEC61508,En50128和IEC62304等,并提供了对应认证标准的验证包。
图1 南德TÜV认证
VectorCAST是主要用于C/C++程序的自动化测试软件,能够运行在Windows和Linux等多种开发环境。
VectorCAST基于V模型开发,实现了与RAD模型的丰富集成,在功能上覆盖了需求分析、单元测试、集成测试、覆盖率分析以及回归测试等软件项目测试所涉及的各个环节,同时也涉及了部分系统测试的功能,它最大的特点同时也是相比于其它同类工具最大的优势,就在于最大程序的自动化和更适合用于嵌入式环境。
针对客户不同的代码测试需求,VectorCAST为客户提供了对应的解决方案,主要包括VectorCAST/C++和VectorCAST/QA。其中,VectorCAST/C++主要用于代码的动态单元测试和集成测试,而VectorCAST/QA主要用于代码的系统测试,下面为大家详细介绍一下以上两个测试工具。
VectorCAST/C++
VectorCAST/C++是VectorCAST工具集中的动态单元测试和集成测试工具,适用于C和/或C++语言,嵌入式开发人员使用它来验证安全和业务关键型嵌入式系统,可以显著降低测试过程中所必需的时间、工作量及成本。VectorCAST中的单元测试,实践中是以一个源文件作为被测对象,实际测试是基于源文件中的函数进行测试;而集成测试,测试的是一个模块,测试函数之间的接口,以验证功能为目的。
那VectorCAST/C++是如何工作的呢?
VectorCAST/C++首先分析被测代码,然后调用代码生成器根据测试要求去自动构建一套完整并可执行的测试组件(Test Harness),这个测试组件中包括被测对象、测试驱动、桩函数和依赖条件,如图2所示。一旦测试组件被成功构建,用户可以使用VectorCAST/C++构建和执行测试用例,显示代码覆盖信息并生成测试报告。
图2 Test Harness
VectorCAST/C++可以实现哪些功能呢?
基于需求分析的测试
VectorCAST可以与多种在线需求管理服务器比如Polarion/DOORS/PTC/IBM或者本地需求文档实现联调,导入测试需求,并链接VectorCAST测试用例,确保每条测试需求都能被测试用例覆盖,并管理每个需求对应的测试用例正确执行,实现测试用例和测试需求的双向追溯。
图3 VectorCAST需求管理服务工具
代码覆盖度分析
在测试过程中,如果没有代码覆盖工具,源代码的哪些部分被执行是很难确定的。VectorCAST/C++提供集成的代码覆盖分析工具,在单个或者多个测试执行中,提供关于源代码语句的报告,为用户指明代码覆盖信息。
在源代码中,通过颜色标注代码的覆盖状态:
红色代表代码未被覆盖 黄色代表代码被部分覆盖 绿色代表代码被覆盖在报告中,根据覆盖度需求,可通过颜色和百分比的方式统计多种测试覆盖率,包括Statement(语句覆盖)、Branch(分支覆盖)和MC/DC覆盖,如下图4所示。
图4 VectorCAST覆盖率统计
自动创建测试用例
自动创建测试用例不仅体现在VectorCAST支持用户以多种形式的输入输出参数自动生成测试用例,不需要用户编写测试代码,完全通过GUI窗口自动完成参数设定,还体现在可以基于不同的覆盖度需求自动创建测试用例,尽可能地达到覆盖度要求,包括基本路径、等价类、边界值和MC/DC测试用例。
对于未能覆盖的部分,用户可以根据工具提供的逻辑分析报告,自行添加少量测试用例即可达到100%的覆盖度。
基本路径覆盖,VectorCAST自动生成的测试用例可以达到90%~100%的覆盖率 对于MC/DC覆盖度, VectorCAST会基于MC/DC覆盖度去分析代码结构,自动生成等价的MC/DC真值表,如下图5,用户可根据MC/DC真值表去分析代码结构并创建测试用例图5 MC/DC真值表
VectorCAST/RSP—实时嵌入式测试
VectorCAST/RSP是VectorCAST的工具套件中的实时支持包,支持在嵌入式目标板或是仿真器上直接进行实时应用测试,交叉编译生成可在目标板或仿真器上执行的测试组件,自动下载测试组件和测试用例到目标板执行,并将测试结果反馈到主机平台上,如图6所示。
图6 VectorCAST/RSP测试机制
VectorCAST软件本身安装了MinGW编译链,同时支持业内最多种类(300+)编译器和目标芯片(比如ARM,CodeWarrior,Green Hills等),利用产品实际编译链进行编译测试,实现虚拟的PIL测试。
回归测试
所谓回归测试,就是旧代码修改之后,重新进行测试以确保修改没有引入新的错误或者是导致其他代码产生错误。
VectorCAST具有强大的回归测试的功能,可通过GUI—Incremental或命令行的方式定期的执行测试用例,以增量的方式重构测试环境,检查代码变更,只执行被影响到的测试用例,节约项目测试时间,降低项目版本维护的成本。
图7 回归测试报告
除了上述功能外,VectorCAST/C++还:
支持工具界面操作的故障注入、局部变量打印、断点调试 支持单步回放测试用例执行,分析代码覆盖和代码调试 支持CSV数据导入,批量生成测试用例 支持头文件、目标/库文件测试 支持对于无法通过测试用例覆盖的代码实行手动覆盖的方式(CBA功能) 可以与Jenkins联调,通过Jenkins构建测试工程,实现持续集成开发/测试VectorCAST/QA
VectorCAST/QA主要用于嵌入式开发的自动化系统测试,为白盒系统测试提供了一个集成的工作流程。
VectorCAST/QA 通过集成用户软件编译/构建环境和已有的测试基础架构,进而获取软件在系统测试中的关键指标,如代码复杂度、代码变更频率、测试用例状态和代码覆盖度等。
VectorCAST/QA的主要特点如下:
在系统测试期间自动捕获和维护代码覆盖率数据,从而帮助用户快速识别未被测试的部分,并确定提高测试完整性所需的资源 基于变更的测试,自动计算提供完整测试更改所需的最小测试集,或者是甄别出因代码变更而受影响的测试用例并重新执行 VectorCAST/QA本身不能生成测试用例,但是它可以沿用客户已有的系统测试框架和测试用例 自动对客户的源码进行插桩,添加代码覆盖率接口;一旦添加覆盖率接口,源代码就会有所膨胀,插桩越细致,代码膨胀率越大,所以说系统测试对目标板的RAM和Flash有一定要求 在Jenkins持续不断地执行测试,实现持续集成图8 VectorCAST/QA
Vector简介
Vector Informatik公司成立于1988年,总部位于德国汽车工业中心斯图加特,是全球领先的分布式系统设计开发工具、网络节点测试验证工具和嵌入式软件组件提供商,为ECU的开发、测试、标定和诊断等过程提供一系列强有力的软硬件工具和组件,在全球范围内,来自汽车、商用车、工程机械和控制工程领域的客户都在应用Vector提供的解决方案和产品。
北汇信息作为Vector中国的合作伙伴,不仅提供相应的工具和技术支持服务及培训,还针对不同的应用提供相应的解决方案,助力中国客户的研发效率提升。
Source: Vector
参考文献
[1]VectorCAST/C++ TM--- Unit and Integration Test for C/C++. Version 2.1, Vector, May. 2019.https://assets.vector.com/cms/content/products/VectorCAST/Docs/Datasheets/English/VectorCAST_C___A4_01.pdf
[2] VectorCAST RSP TM---Real-Time Software Testing. Version 2.0, Vector, June. 2017. https://assets.vector.com/cms/content/products/VectorCAST/Docs/Datasheets/English/VectorCAST_RSP_A4.pdf
[3] VectorCAST/QA TM---Complete Test Automation. Version 2.0, Vector, Nov.2019. https://assets.vector.com/cms/content/products/VectorCAST/Docs/Datasheets/English/VectorCAST_QA_A4_v2.pdf