代码之家  ›  专栏  ›  技术社区  ›  Thomi

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

  •  21
  • Thomi  · 技术社区  · 17 年前

    我有一个非常大的代码库,其中包含大量的单元测试(使用CppUnit)。 我需要计算出这些测试执行了多少百分比的代码 ,并且(理想情况下)生成某种报告,在逐库或逐文件的基础上告诉我执行了多少代码。

    关键在于:这必须完全不加标记地运行(最终在持续集成构建中运行),并且必须是跨平台的(至少是WIN32和*nix)。

    有人能推荐一个工具或一套工具来帮助我做到这一点吗?我不能离开CppUnit(我也不想离开——它太糟糕了),但除此之外,我很想听听你的任何建议。

    干杯,

    5 回复  |  直到 17 年前
        1
  •  14
  •   Community Mohan Dere    5 年前

    我应该使用哪个工具?

    article describes 另一个开发人员在寻找C++代码覆盖工具时感到沮丧。作者的最终解决方案是 Bullseye Coverage .

    牛眼覆盖率 特征:

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


    测试Linux与Windows?

    只要你的所有测试在两个环境中都能正确运行,你就可以很好地衡量其中一个环境的覆盖率。(虽然牛眼出现了 to support both platforms ).但是,为什么不在这两个环境中进行持续集成构建呢??如果您在这两种环境中都向客户交付,那么您 需要 两者都要测试。

    出于这个原因,听起来您可能需要设置两个连续构建服务器,一个用于linux构建,另一个用于windows构建。也许这可以通过一些虚拟化软件轻松实现,比如 vmware virtualbox 。您可能不需要在两个操作系统上运行代码覆盖率指标,但您绝对应该在两个系统上运行单元测试。

        2
  •  8
  •   Imbue    17 年前

    如果你能使用 GNU GCC 作为你的编辑,那么 gcov 这个工具工作得很好。整个过程很容易完全自动化。

        3
  •  4
  •   Jeremy Mayhew    16 年前

    如果您使用GCC工具链,gcov将为您获取源代码、功能和分支覆盖率统计数据。gcov在MinGW和Cygwin上运行良好。这将使您能够获得覆盖率统计数据,并发出插入指令的源代码,使您能够可视化未执行的代码。

    然而,如果你真的想用漂亮的报告把它打出来,结合gcov和 lcov 这是我们应该走的路。lcov将为您提供文件和目录范围的条形报告、功能覆盖率统计数据和颜色编码的源文件浏览,以显示覆盖率(绿色表示已执行,红色表示未执行…)。

    lcov在Linux上很容易,但可能需要在Cygwin上进行一些perl黑客攻击。我个人在Windows上执行脚本时遇到了一些问题(lcov是用perl实现的)。我已经得到了一个黑客版本,但要提前警告。

    另一种方法是在windows上执行gcov发射,并在Linux上执行lcov后处理,这肯定会开箱即用。

        4
  •  2
  •   Ira Baxter    10 年前

    查看我们的 SD C++ Test Coverage 工具。它可以用于GCC和MSVC6。

    它具有低开销的探测数据收集、覆盖在代码上的覆盖率数据的良好显示,以及跨方法/类/文件/目录级别的覆盖率汇总的完整报告生成。

    编辑:2015年8月:现在通过Visual Studio 2015支持GCC5和各种MS方言。要在Linux下使用这些工具,您需要Wine,但这些工具提供了Linux原生sh脚本和基于Linux/Java的UI,因此该工具感觉就像那里的原生Linux工具。

        5
  •  0
  •   Thomi    17 年前

    我想我应该指定编译器——我们在Linux上使用gcc,在WIn32上使用MSVC 6(是的,我知道,它很旧,但它(主要)对我们有效)。

    出于这个原因,gcov不适用于我们的Win32版本,Bullseye也不适用于Linux版本。

    再说一次,也许我只需要在一个操作系统中覆盖。..