除了行业标准的 C/C++ 代码覆盖率指标,C/C++test 还可以收集汇编级的代码覆盖率(也称为目标代码覆盖率),实现测试执行期间汇编代码被覆盖部分的可见性,并提供分支点执行情况的详细信息。
与 C/C++ 代码覆盖率不同,汇编覆盖率结果不与 C/C++test 视图集成。报告以外部 HTML、XML 或 CSV 文件的形式提供。详细信息请参阅生成汇编覆盖率报告。
本节提供有关在 IDE 中收集目标代码覆盖率的信息。有关在汇编级收集覆盖率的 Parasoft 工具的详细信息,请参阅 <INSTALL_DIR>/bin/engine/asmtool/manuals
中随 C/C++test 一起提供的 Parasoft ASMTools 文档。
支持的编译器
Windows
以下 GHS 编译器支持汇编代码覆盖率:
- Green Hills Software Compiler for PPC v. 4.0.x
- Green Hills Software Compiler for PPC v. 4.2.x
- Green Hills Software Compiler for PPC v. 2017.1.x
C/C++test 预配置为从 Green Hills Software PPC 模拟器收集汇编级覆盖率数据。如果您想从确切的测试执行中收集目标代码覆盖率数据,请联系 Parasoft 支持了解更多信息。
Linux 64 位:
以下 x86 (32 位) GNU GCC 编译器支持汇编代码覆盖率:
- GNU GCC 5.x
- GNU GCC 6.x
- GNU GCC 7.x
- GNU GCC 8.x
配置项目设置
假设您的项目配置为使用 C/C++test 进行单元测试执行或应用程序内存监控,并针对支持的编译器进行设置(请参阅支持的编译器),则不需要进行其他配置步骤。
您可以从汇编覆盖率报告中排除自动化测试框架初始化器(由 C/C++test 添加)。前往项目属性> Parasoft> C/C++test> 构建设置> 编译器选项并添加以下选项:
-DCPPTEST_USE_GLOBAL_OBJECTS_TO_INIT_RUNTIME=0
这将禁用将自动化测试框架初始化器添加到被测编译单元。相应地,C/C++test 将生成一个单独的“测试运行器”来执行自动化测试框架初始化。
收集汇编代码
C/C++test 提供的内建测试配置可用于执行包含汇编覆盖率监控的单元测试用例。 查看测试配置设置的步骤:
- 从 IDE 菜单中选择 Parasoft> 测试配置。
- 选择以下内建测试配置:
Windows:内建> Embedded Systems> Green Hills Software> Run GHS Tests with Assembly Coverage Monitoring
Linux:内建> Embedded Systems>GNU GCC>Run GNU GCC Tests with Assembly Coverage Monitoring
当您运行测试配置时,覆盖率数据存储在被测程序的内存缓冲区中。当计划的测试执行并且测试可执行程序退出时,收集的覆盖率信息经由定义的通信通道保存(通常直接保存到文件中)。
如果测试可执行程序崩溃或内存损坏,则存储覆盖率数据的缓冲区可能会损坏或无法保存。因此,我们建议在执行之前审查测试用例,并从测试会话中排除所有可能导致应用程序崩溃的测试。
生成汇编覆盖率报告
汇编覆盖率报告在测试执行后按照测试配置中指定的格式生成(请参阅自定义报告选项)。在 C/C++test 的覆盖率视图、源代码编辑器或 C/C++test UI 的任何其他组件中都没有可见的汇编覆盖率数据。
- 执行测试配置后,点击生成报告按钮。
- 点击首选项并从报告格式下拉菜单选择 HTML (C++test 的单元测试详情)。
- 应用设置并点击确定退出首选项对话框
- 在报告并发布对话中点击确定。
在主要报告底部额外的报告部分中的汇编覆盖率列会有汇编覆盖率报告的链接:
自定义报告选项
通过修改将用于执行测试用例的测试配置,可以自定义汇编覆盖率报告的格式和编码(请参阅收集汇编代码)。前往常规> 测试执行流程并配置以下选项:
选项名称 | 值 |
---|---|
Assembly coverage report format | 可用格式:html、xml、txt、flattxt、csv 默认为 html。 |
Assembly coverage report encoding | 用于 html 报告的编码。 默认值为 UTF-8 |
如果您想从确切的测试执行中收集目标代码覆盖率数据,请联系 Parasoft 支持了解更多信息。
关于汇编覆盖率的附加说明
- 汇编覆盖率指标仅支持选定的编译器(请参阅Assembly Code Coverage)。如果您使用了为不支持的编译器配置的项目运行汇编覆盖率监控,C/C++test 控制台会打印一条消息。
- 汇编覆盖率是通过从 C/C++ 插桩代码生成的汇编源代码插桩收集的。因此,不应启用其他会导致 C/C++ 插桩代码与原始代码出现明显差异的插桩功能。插桩功能推荐配置如下图所示。