除了行业标准的 C/C++ 代码覆盖率指标之外,C/C++test 可以在程序集级别收集代码覆盖率(也称为对象代码覆盖率),从而可以查看测试执行过程中覆盖了程序集代码的哪些部分,以及有关分支点执行的详细信息。
与 C/C++ 代码覆盖率不同,程序集覆盖率结果未与 C/C++test 视图集成。报告可以作为外部 HTML、XML 或 CSV 文件使用。有关更多详细信息,请参见生成程序集覆盖率报告。
本节提供有关在您的 IDE 中收集对象代码覆盖率的信息。 有关用于在程序集级别收集覆盖率的 Parasoft 工具的详细信息,请参阅位于[INSTALL_DIR]\engine\asmtool\manuals
C/C++test 附带的 Parasoft ASMtools 文档。
支持的编译器
在 Windows 上
以下 GHS 编译器支持程序集代码覆盖率:
- 适用于 PPC v. 3.5.x 的 Green Hills Software Compiler
- 适用于 PPC v. 4.0.x 的 Green Hills Software Compiler
- 适用于 PPC v. 4.2.x 的 Green Hills Software Compiler
- 适用于 PPC v. 2017.1.x 的 Green Hills Software Compiler
C/C++test 已预先配置为从 Green Hills Software PPC 模拟器收集程序集级覆盖率数据。 如果要从目标测试执行中收集对象覆盖率数据,请联系 Parasoft 支持以获取更多信息。
在 Linux 64-bit:
以下用于 x86(32位)的 GNU GCC 编译器支持汇编代码覆盖率:
- GNU GCC 4.6.x
- GNU GCC 4.7.x
- GNU GCC 4.8.x
- GNU GCC 4.9.x
- GNU GCC 5.x
- GNU GCC 6.x
- GNU GCC 7.x
- GNU GCC 8.x
配置项目设置
假设您的项目已配置为使用 C/C++test 进行单元测试执行或应用程序内存监控,并针对受支持的编译器进行设置 (请参阅 Supported Compilers),则不需要其他配置步骤。
您可以从程序集覆盖率报告中排除测试工具初始值设定项(由 C/C++test 添加)。转到项目属性> Parasoft> C++test> 构建设置> 编译器选项并添加以下选项:
-DCPPTEST_USE_GLOBAL_OBJECTS_TO_INIT_RUNTIME=0
这将禁止将测试工具初始值设定项添加到被测编译单元。相反,C/C++test 将生成一个单独的“测试运行器”来执行测试工具初始化。
收集程序集代码
C/C++test 附带内置测试配置,用于执行带有程序集覆盖率监控的单元测试用例。 查看测试配置设置:
- 从您的 IDE 菜单中选择Parasoft> 测试配置 。
- 选择以下内建测试配置:
在 Windows 上:内建> 嵌入式系统> Green Hills Software> 使用程序集覆盖率监控运行 GHS 测试
在 Linux 上: 内建>嵌入式系统>GNU GCC>使用程序集覆盖率监控运行 GNU GCC 测试
当您运行测试配置时,覆盖率数据存储在测试程序的内存缓冲区中。当计划的测试被执行并且测试可执行文件退出时,收集的覆盖率信息通过定义的通信通道保存(通常直接保存到文件)。
如果测试可执行文件崩溃或内存损坏,则存储覆盖数据的缓冲区可能会损坏或无法保存。出于这个原因,我们建议在执行之前检查测试用例,并从测试会话中排除所有可能导致应用程序崩溃的测试。
生成程序集覆盖率报告
在测试执行后以测试配置中指定的格式生成程序集覆盖率报告(请参见 Customizing Report Options)。在 C/C++test 的覆盖率视图、源代码编辑器或 C/C++test UI 的任何其他组件中没有可见的程序集覆盖率数据。
- 执行测试配置后,单击 生成报告按钮。
- 单击首选项 并从报告格式 下拉菜单中选择 HTML (C++test 的单元测试详细信息) 。
- 应用您的设置并单击确定 退出首选项对话框
- 单击 报告和发布 对话框上的确定
程序集覆盖率报告的链接将在主报告底部附加报告部分的 程序集覆盖率列中提供:
自定义报告选项
您可以通过修改将用于执行测试用例的测试配置来自定义程序集覆盖率报告的格式和编码 (请参阅 收集程序集代码)。转到 常规>测试执行流 并配置以下选项:
选项名称 | 值 |
---|---|
程序集覆盖率报告格式 | 可用格式: html、 xml、 txt、flattxt、csv 默认为 html。 |
程序集覆盖率报告编码 | 用于 html 报告的编码。 默认为 UTF-8 |
如果要从目标测试执行中收集对象覆盖率数据,请联系 Parasoft 支持以获取更多信息。
关于程序集覆盖率的附加说明
- 只有选定的编译器才支持程序集覆盖率指标(请参阅Assembly Code Coverage)。如果您使用为不受支持的编译器配置的项目运行程序集覆盖率监控,C/C++test 控制台将向控制台打印一条消息。
- 程序集覆盖率是通过从 C/C++ 插桩代码生成的程序集源代码插桩收集的。因此,您不应启用其他会使 C/C++ 插桩代码与原始代码显着不同的插桩功能。下面的屏幕截图显示了推荐的插桩功能配置。