如何测量 C++ 中执行部分的代码覆盖率

How to measure code coverage of the part of execution in C++

我有两个 C++ 二进制文件(A 和 B),两个二进制文件之间有套接字连接。
二进制文件 A 正在侦听 B。并且,B 连接到 A。

A接受B的消息,并根据消息内容执行一些功能。
我们创建了一种单元测试来测试各种消息类型。

从这些测试中,我想从我们的测试消息中测量 A 的执行行。
我搜索了测量代码覆盖率的工具,我找到了 lcov.

但是,lcov 测量了执行的代码行总数,包括初始化和其他无用的代码块。
我可能会创建一个新代码来测试没有套接字连接的功能。
但是代码结构复杂,所以实现测试需要很长时间。

所以,我想跳过 lcov 中的那些行,以 获得由 我们的测试消息 引起的纯执行行 .

如果实在不行又有更好的工具,请推荐合适的工具来衡量。

谢谢。

在您的测试用例之前调用 __gcov_reset 以丢弃从初始化收集的数据。

了解“覆盖范围”是源代码位置的集合 很重要。 您可以对集合进行“算术运算”:并集(“加”)、补集、差集(“减”)。

关键是获得一个工具,它将(设置)减去测试覆盖率数据集。

然后您收集 starting/stopping 您的程序的测试覆盖率。这包括初始化和设置。称这个集合为 I.

现在为执行感兴趣活动的程序收集测试覆盖率, 例如,“通信”部分。称这个集合为 X.

你要的是X减I得到的集合:集合表示法中的"X-I"。

这意味着您需要一个工具来收集这些集合并进行计算。

我相信你可以用 lcov 收集 X 和 I。但我认为 lcov 不会为您提供计算集合差异的方法。如果是,宾果游戏,你在做生意。

如果没有,您可以考虑使用我公司的测试覆盖率工具。它们提供了一种明确的方法来收集测试覆盖集,并进行任意操作 在用户界面中进行集合计算,例如集合并集、集合补集、集合差分。您无需更改代码即可执行此操作。

http://www.semdesigns.com/Products/TestCoverage/