新代码行的代码覆盖率质量门

时间:2017-06-28 16:55:29

标签: java sonarqube code-coverage jacoco

对于Java应用程序,是否有人建议如何构建质量门,以防止合并没有至少80%代码覆盖率的新代码?我们正在使用遗留代码库,虽然我们希望覆盖范围有所改进,但我们希望停止流失并对新代码执行适当的测试覆盖。

我已经看到了与SonarQube或JaCoCo一起使用git blame和排除/包含列表的建议,但是这会报告整个类的覆盖范围,而不仅仅是新的/更改的行,所以我们可能遇到由于缺乏传统覆盖而导致合并被阻止的问题。

2 个答案:

答案 0 :(得分:1)

您正在寻找的是新代码的覆盖率,该代码包含在默认质量门中,需要80%。

不幸的是,由于您希望将合并低覆盖率分支机构转换为主数据库,这意味着您需要进行强大的分支分析。它在计划中,但我们还没有。此外,PR分析(当你处理分支时总是第一个候选者)也无济于事,因为a)它没有看到覆盖范围b)它没有检查分支的质量门状态(技术上没有QG) PR的状态

作为一种(有点痛苦的可能自动化)解决方法:

  1. 为分支机构提供额外的SQ项目,并在分支拆分之前对master进行分析。
    • 使用{master} * sonar.version值。这确定了您的泄漏基线
    • 请务必使用sonar.branch分析属性将其与您对master的分析区分开来。
  2. 将分支项目的泄漏期配置为since_previous_version
  3. 更新您的分支项目分析工作以指向分支并将sonar.version重置为“分支” *
  4. 在合并前建立检查分支QG状态的流程
  5. 删除分支后删除分支SQ项目
  6. *或任何让你开心的价值

    对于记录,此上下文中的“新代码”表示自泄漏期开始以来添加的行和(旧)行已修改。泄漏周期可以定义为最后X天(次优),因为给定日期(更好但仍然不完美),因为特定版本,或自previous_version以来将给您一个浮动泄漏期版本更改。为了确保生产的新代码符合您的质量要求,建议使用最后一个代码,但这意味着需要保持最新的分析版本字符串。

答案 1 :(得分:0)

https://github.com/exussum12/coverageChecker

此工具支持Jacoco格式,只会在更改的行中出错。

这是用PHP编写的(所以你需要在CI服务器上安装PHP)

如果您正常生成Jacoco报告,请使用

git diff origin/master... > diff.txt

./diffFilter --jacoco diff.txt jacoco.xml 80

如果更改的行覆盖率低于80%(并显示错过的行列表),并且传递任何内容> 80%(如果适用,还显示错过的行列表)

如果修改旧代码,此工具也会因缺少旧版覆盖而失败。 (您可能应该至少对要更改的代码进行一次测试)。这可能会减慢一些变化,但是你将在所有修改后的领域获得报道,这将使未来的事情变得更好