【问题标题】:differential code coverage差异代码覆盖率
【发布时间】:2011-09-02 15:51:16
【问题描述】:

我们正在向以前未经测试的代码添加单元测试,因为需要修改该代码。由于已知任何包中的大部分代码都未经测试,因此很难获得有用的覆盖率指标。

是否有任何工具可用于测量差异代码覆盖率,即单元测试覆盖的给定变更集中修改的代码百分比?

【问题讨论】:

  • 对于.net,我使用了 NCoverCop sourceforge.net/projects/ncovercop,它比较了 ncover 的 xml 输出。也许它可以适应你的 java 输出或者有一个 java 等价物。

标签: java unit-testing code-coverage


【解决方案1】:

使用pycobertura。它是一个命令行工具,通过区分两个覆盖率报告来防止代码覆盖率回归。它会告诉您新代码比以前的版本好还是差,覆盖率方面。

$ pycobertura diff ./master/coverage.xml ./myfeature/coverage.xml

它与语言无关,因为它仅依赖于您的测试/覆盖工具生成的 Cobertura 报告(XML 文件)。

Pycobertura 还可以生成 HTML 报告,非常适合 Jenkins 等 CI/CD 工具。

https://github.com/aconrad/pycobertura

【讨论】:

    【解决方案2】:

    Jenkins 等持续集成工具可让您保留测试覆盖率的历史记录,并向您显示包含与之前构建相比的覆盖率趋势的图表。示例:Cobertura Jenkins Plugin

    【讨论】:

    • 我们正在使用 Cobertura 和 Jenkins,这在一定程度上很有帮助。但是我们希望能够看到新的/更改的代码的覆盖率(即 80% 的增量代码,而 1% 的所有代码)。能够深入了解单个包/类也有一些帮助,但前提是您知道哪些包/类已被修改。
    【解决方案3】:

    有一个 gradle 插件可以计算差异代码覆盖率

    https://github.com/form-com/diff-coverage-gradle

    您只需要向插件提供差异文件,或者您可以使用the example 中显示的git diff 工具

    【讨论】:

      【解决方案4】:

      看看 Sonar,它是分析整个应用程序质量和覆盖范围的非常好的工具。

      【讨论】:

        【解决方案5】:

        我最近正是这样做的,使用JaCoCoConQAT 框架进行代码分析。方法如下:

        1. 从基线版本和头版本(以及可能的中间版本,如果您还在中间进行过测试)加载源代码
        2. 逐个方法比较程序历史记录以确定更改发生的位置
        3. 为每个测试版本注释覆盖率信息
        4. 搜索自上次更改后未涵盖的方法

        还有一个 blog post 包含更详细的描述,包括可视化和更高级的主题,例如重构检测以仅识别值得测试的更改。

        【讨论】:

          【解决方案6】:

          您可以为此使用diff-test-coveragediff-test-coverage 是一个 Node.js 命令行工具,它根据(源代码控制)差异过滤测试覆盖率。

          它通过过滤覆盖率报告信息来工作,因此它可以报告新代码的覆盖率信息。

          它支持 Git 和 Mercurial 以及所有常见的覆盖率报告格式。

          【讨论】:

            猜你喜欢
            • 2016-06-22
            • 2021-04-16
            • 2018-09-02
            • 2020-05-17
            • 2011-05-27
            • 2012-06-30
            • 1970-01-01
            • 2011-03-18
            • 2018-01-11
            相关资源
            最近更新 更多