对于Java应用程序,是否有人建议如何构建质量门,以防止合并没有至少80%代码覆盖率的新代码?我们正在使用遗留代码库,虽然我们希望覆盖范围有所改进,但我们希望停止流失并对新代码执行适当的测试覆盖。
我已经看到了与SonarQube或JaCoCo一起使用git blame和排除/包含列表的建议,但是这会报告整个类的覆盖范围,而不仅仅是新的/更改的行,所以我们可能遇到由于缺乏传统覆盖而导致合并被阻止的问题。
答案 0 :(得分:1)
您正在寻找的是新代码的覆盖率,该代码包含在默认质量门中,需要80%。
不幸的是,由于您希望将合并低覆盖率分支机构转换为主数据库,这意味着您需要进行强大的分支分析。它在计划中,但我们还没有。此外,PR分析(当你处理分支时总是第一个候选者)也无济于事,因为a)它没有看到覆盖范围b)它没有检查分支的质量门状态(技术上没有QG) PR的状态
作为一种(有点痛苦的可能自动化)解决方法:
sonar.version
值。这确定了您的泄漏基线sonar.branch
分析属性将其与您对master的分析区分开来。 since_previous_version
sonar.version
重置为“分支” * *或任何让你开心的价值
对于记录,此上下文中的“新代码”表示自泄漏期开始以来添加的行和(旧)行已修改。泄漏周期可以定义为最后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%(如果适用,还显示错过的行列表)
如果修改旧代码,此工具也会因缺少旧版覆盖而失败。 (您可能应该至少对要更改的代码进行一次测试)。这可能会减慢一些变化,但是你将在所有修改后的领域获得报道,这将使未来的事情变得更好