如何测量CppUnit测试覆盖率(在Win32和Unix上)?
我有一个非常大的代码库,其中包含大量的单元测试(使用CppUnit)。我需要弄清楚这些测试使用了多少百分比的代码,并且(理想情况下)生成了某种报告,告诉我每个库或者每个文件执行了多少代码。
这是一个关键:必须完全无人地运行(最终在持续集成构建中),并且必须跨平台(至少,WIN32和* nix)。
谁能建议一个工具或者一组工具来帮助我做到这一点?我不能离开CppUnit(我也不想让它踢屁股),但是否则,我很想听听我们可能有任何建议。
干杯,
解决方案
回答
我应该使用哪个工具?
本文介绍了另一位寻求C ++代码覆盖率工具的开发人员。作者的最终解决方案是Bullseye Coverage。
靶心覆盖功能:
- 跨平台支持(win32,unix和嵌入式),(支持linux gcc编译器和MSVC6)
- 易于使用(几个小时即可启动并运行)。
- 提供"最佳"指标:功能覆盖率和条件/决策覆盖率。
- 使用源代码检测。
至于是否要进行持续集成,取决于我们使用的CI解决方案,但是我们可能会将仪器/覆盖率测量步骤与用于自动测试的Make文件挂钩。
测试Linux与Windows?
只要所有测试都能在两种环境中正常运行,就可以很好地衡量一个或者另一个的覆盖范围。 (尽管Bullseye似乎支持两个平台)。但是,为什么不在两种环境中都进行持续集成构建呢?如果我们在两种环境中均交付给客户,则需要在两种环境中进行测试。
因此,听起来我们可能需要设置两个连续的构建服务器,一个用于Linux构建,一个用于Windows构建。也许可以使用某些虚拟化软件(例如vmware或者virtualbox)轻松完成此操作。我们可能不需要在两个OS上都运行代码覆盖率指标,但是我们绝对应该在两个OS上都运行单元测试。
回答
如果可以将GNU GCC用作编译器,则gcov工具可以很好地工作。完全自动化整个过程非常容易。
回答
我想我应该已经为WIn32指定了我们在Linux上使用gcc的编译器和MSVC 6(是的,我知道,它很旧,但是(对我们来说大多数))。
因此,gcov不适用于我们的Win32构建,而Bullseye不适用于我们的Linux构建。
再说一次,也许我只需要覆盖一个操作系统即可...
回答
如果我们使用的是GCC工具链,则gcov将为我们提供源,功能和分支覆盖率统计信息。对于MinGW和Cygwin,gcov可以正常工作。这将使我们能够获得覆盖率统计信息,并提供检测到的源代码,这些代码可让我们可视化未执行的代码。
但是,如果我们真的想通过漂亮的报告将它拒之门外,那么将gcov与lcov结合使用是可行的方法。 lcov将为我们提供条形图报告,范围涉及文件和目录,功能覆盖率统计信息以及使用颜色编码的源文件浏览以显示覆盖率(绿色表示已执行,红色表示未...)。
lcov在Linux上很容易,但是可能需要在Cygwin上进行一些perl破解。我个人在Windows上执行脚本(lcov在perl中实现)时遇到了一些问题。我有一个可破解的版本可以使用,但是请事先警告。
另一种方法是在Windows上进行gcov发射,并在Linux上进行lcov后处理,这肯定会在开箱即用的情况下进行。
回答
查看我们的SD C ++测试覆盖率工具。可以为GCC和MSVC6获得它。
它具有低开销的探针数据收集功能,可以很好地显示覆盖在代码上的覆盖率数据,并且可以通过方法/类/文件/目录级别的覆盖率汇总生成完整的报告。
编辑:2015年8月:现在通过Visual Studio 2015支持GCC5和各种MS方言。要在Linux下使用这些工具,我们需要Wine,但是那里的工具提供了Linux原生的sh脚本和基于Linux / Java的UI,所以感觉就像那里的本地Linux工具一样。