本主题解释了如何从测试会话中生成覆盖率信息,以及如何调整设置以最小化执行开销

启用和禁用覆盖率分析

必须将 execution 选项卡中的检测设置配置为收集代码覆盖率信息。  C++test 提供了一个选项,用于设置在测试代码执行期间应该收集哪些覆盖率度量。有关其他信息,请查阅 了解覆盖率类型

如果性能是一个问题,比如在嵌入式测试中,您还可以禁用所有代码覆盖监视。有关控制覆盖率分析的更多信息,请查阅 执行选项卡设置-定义测试的执行方式 。

代码覆盖率信息可以从单元测试执行中收集,也可以从针对覆盖率监控的 C++test 构建的应用程序上执行的手工测试中收集。

了解代码覆盖率分析的开销

默认情况下,在经过测试的代码执行过程中生成的代码覆盖率信息会立即发送到 C++test,以确保结果准确。例如,如果测试执行导致崩溃,那么直到崩溃发生时的所有覆盖率信息都将是有效的。这种方法的缺点是执行时间相对较高。但是,在大多数情况下,单元测试的执行开销可以忽略不计。因此,建议使用默认的覆盖模式。

但是,与动态覆盖数据传输(默认模式)相关的执行时间开销对于从应用程序级别测试(应用程序功能测试)收集覆盖信息可能是不可接受的。例如,覆盖率检测对影响嵌入式系统中的应用程序逻辑的应用程序定时依赖关系产生影响是很常见的。

如果默认代码覆盖率执行时间开销不可估量,则用户可以启用特殊的优化模式以从应用程序级功能测试中收集覆盖率。在优化模式下:

  • 专用内存缓冲区用于存储有关覆盖的 C/C++ 语言结构的信息
  • 覆盖率数据在应用程序完成时发送;在功能测试执行期间不发送
  • 代码检测执行最少数量的机器指令,以存储有关所涵盖的 C/C++ 语言语句的信息。
  • 因此,不需要保证主机和目标之间的快速链接来最小化开销。

优化了应用程序覆盖监控的覆盖度量

特殊的优化覆盖率检测模式仅设计用于应用程序级别的测试,不适用于单元测试。使用来自【测试配置】的【执行】选项卡检测特性面板的【高级选项】来启用优化的覆盖模式。这些设置在 执行选项卡设置-定义测试的执行方式中进行了描述。

【高级选项】部分使您能够:

  • 选择较低的测试代码执行时间开销或较低的 RAM 内存开销。
  • 初始化覆盖内存缓冲区
  • 防止覆盖数据缓冲区损坏

必须调用专用的初始化和终结函数才能运行优化的代码覆盖率监视会话:

void CppTest_InitializeRuntime(void)
void CppTest_FinalizeRuntime(void)

默认情况下,在主函数的开头和结尾(C 语言应用程序)或为此目的添加的特殊全局对象构造函数和析构函数(C++ 语言应用程序)调用这些函数。

如果您的应用程序没有主函数或者不支持全局对象的构造销毁,您可以在应用程序启动和结束期间在适当的位置手动地将调用注入到初始化和结束化函数中。

  • No labels