我该如何测量CppUnit测试覆盖率(在win32和Unix上)?

21
我有一个非常庞大的代码库,其中包含了大量使用CppUnit编写的单元测试。我需要计算这些测试覆盖了多少代码百分比,并且最好能够生成某种报告,告诉我每个库或文件基础上覆盖了多少代码。
关键在于:这必须是完全无人干预的(最终在持续集成构建中运行),并且必须跨平台(至少支持WIN32和*nix)。
请问是否有任何工具或一组工具可以帮助我完成这项任务?虽然我不能放弃使用CppUnit(也不想这样做),但我很愿意听取您的任何建议。
5个回答

14

我应该使用哪个工具?

这篇文章描述了另一个开发者在寻找C++代码覆盖工具时的挫败感。作者最终选择了Bullseye Coverage

Bullseye Coverage特点:

至于如何融入您的持续集成,这取决于您使用的CI解决方案,但您可能会将仪表化/覆盖度测量步骤连接到您用于自动化测试的make文件中。


在Linux和Windows上进行测试?

只要所有测试在两个环境中都能正确运行,您可以在其中一个环境中测量覆盖率。(虽然Bullseye似乎支持两个平台)。但是为什么不在两个环境中进行持续集成构建呢?如果您的客户在两个环境中都有交付,那么您就必须在两个环境中进行测试。

因此,听起来你可能需要设置两个连续构建服务器,一个用于Linux构建,另一个用于Windows构建。也许可以通过一些虚拟化软件(如vmwarevirtualbox)轻松实现。你可能不需要在两个操作系统上都运行代码覆盖率指标,但你应该确保在两个操作系统上运行单元测试。


8
如果你能使用GNU GCC作为编译器,那么gcov工具就可以很好地工作。这样可以非常容易地全自动化整个过程。

4
如果你正在使用GCC工具链,gcov将为你提供源代码覆盖率、功能覆盖率和分支覆盖率统计信息。gcov适用于MinGW和Cygwin。这将允许你获得覆盖率统计信息,并发出带有仪表化源代码的代码,使你可以可视化未执行的代码。
然而,如果你真的想要漂亮的报告,那么与lcov一起使用gcov是最好的选择。lcov将为你提供针对文件和目录的柱状图报告、功能覆盖率统计和颜色编码的源文件浏览,以显示覆盖范围(绿色表示已执行,红色表示未执行)。
在Linux上使用lcov很容易,但在Cygwin上可能需要进行一些perl修改。我个人在Windows上执行脚本(lcov是用perl实现的)时遇到了一些问题。我已经让一个修改后的版本能够工作了,但请提前知道。
另一种方法是在Windows上进行gcov发射,在Linux上进行lcov后处理,那里肯定会开箱即用。

今天,如果您使用MSYS2和pacman软件包管理器,在Windows上安装LCOV非常容易。来自Archlinux的PKGBUILD完全可以正常工作。我在我的博客上放了一个逐步指南,告诉您如何运行它:http://txt.arboreus.com/2015/05/29/howto-get-lcov-test-coverage-on-windows.html - sastanin

2
检查我们的SD C++ Test Coverage工具。它可以获得GCC和MSVC6版本。
它具有低开销的探针数据收集,漂亮的覆盖数据显示在您的代码上,并且可以生成完整的报告,包括方法/类/文件/目录级别的覆盖范围汇总。
编辑:2015年8月:现在支持GCC5和通过Visual Studio 2015支持各种MS方言。要在Linux下使用这些工具,您需要Wine,但是在那里,这些工具提供了本地的Linux sh脚本和基于Linux / Java的UI,因此该工具在那里感觉像一个本地的Linux工具。

0

我想我应该明确指定编译器 - 我们在Linux上使用gcc,而在WIn32上使用MSVC 6(是的,我知道它很老,但对我们来说它(大多数情况下)有效)。

因此,gcov无法用于我们的Win32构建,Bullseye无法用于我们的Linux构建。

不过,也许我只需要在一个操作系统中进行覆盖率测试...


1
除非您有大量特定于操作系统的代码,否则在Linux上测量覆盖率应该足够了。 - philant
这个回答实际上是一条评论,但它太旧了,我不确定当时是否支持评论 :-)。无论如何,以防像我这样的其他人路过,Bullseye在Linux上可以使用,并且看起来“使用Bullseye”是被接受的答案,所以要么这个评论对此有误解,要么就是有其他原因导致它对你不起作用。 - Peter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接