Sonar 报告的线路和分支覆盖率与 Idea、Eclipse、Maven 和 Jenkins 不同

Sonar reports different line and branch coverage than Idea, Eclipse, Maven and Jenkins

我有所有这些工具报告与 JaCoCo 相同的覆盖率:69% 的线路覆盖率和 23% 的分支覆盖率。

注意:截图是几天拍摄的,所以它们的值略有不同,但差异小于 1%

詹金斯:

行家:

日食:

但是 Sonar 报告了不同的值:

Maven项目结构如下:

您可以看到主模块和 java 模块报告的覆盖率相同,而 js 模块没有覆盖率。

我正在使用最新版本的 jacocojacoco-maven-plugin 和 Sonar 的 Java Plugin

以下是来自 mvn sonar:sonar 的相关构建日志片段——一切似乎都井井有条:

$ egrep -i 'jacoco|\[warn]' consoleText
[WARN] [04:34:29.569] 'sonar.dynamicAnalysis' is deprecated since version 4.3 and should no longer be used.
[WARN] [04:34:29.576] 'sonar.dynamicAnalysis' is deprecated since version 4.3 and should no longer be used.
[WARN] [04:34:29.593] 'sonar.dynamicAnalysis' is deprecated since version 4.3 and should no longer be used.
[INFO] [04:34:32.704] JaCoCoItSensor: JaCoCo IT report not found: /home/acme/workspace/example-Sonar-DSL/modules/example-main/target/jacoco-it.exec
[WARN] [04:34:32.952] Bytecode of dependencies was not provided for analysis of test files, you might end up with less precise results. Bytecode can be provided using sonar.java.test.libraries property
[WARN] [04:34:50.101] Cobertura report not found at /home/acme/workspace/example-Sonar-DSL/modules/example-main/target/site/cobertura/coverage.xml
[INFO] [04:35:03.391] Sensor JaCoCoSensor
[INFO] [04:35:03.406] Analysing /home/acme/workspace/example-Sonar-DSL/modules/example-main/target/jacoco.exec
[INFO] [04:35:03.712] Sensor JaCoCoSensor (done) | time=321ms
[INFO] [04:35:03.712] Sensor JaCoCoOverallSensor
[INFO] [04:35:03.714] Analysing /home/acme/workspace/example-Sonar-DSL/modules/example-main/target/jacoco.exec
[INFO] [04:35:03.762] Analysing /home/acme/workspace/example-Sonar-DSL/modules/example-main/target/sonar/jacoco-overall.exec
[INFO] [04:35:03.906] Sensor JaCoCoOverallSensor (done) | time=194ms
[INFO] [04:35:11.013] JaCoCoSensor: JaCoCo report not found : /home/acme/workspace/example-Sonar-DSL/modules/frontend/target/jacoco.exec
[INFO] [04:35:11.013] JaCoCoItSensor: JaCoCo IT report not found: /home/acme/workspace/example-Sonar-DSL/modules/frontend/target/jacoco-it.exec
[INFO] [04:35:11.179] JaCoCoSensor: JaCoCo report not found : /home/acme/workspace/example-Sonar-DSL/target/jacoco.exec
[INFO] [04:35:11.179] JaCoCoItSensor: JaCoCo IT report not found: /home/acme/workspace/example-Sonar-DSL/target/jacoco-it.exec

这是 Sonar 的 Java 插件中的错误吗? 我认为当不同人配置的其他 3 个工具始终显示不同的值时,声纳报告的指标不太可能是正确的。

下面是计算 "Unit Tests Coverage" 度量的方法:

  • NUMBER_OF_LINES = 行数 + 条件数。
  • COVERED_LINES = NUMBER_OF_LINES - (未覆盖行数 + 未覆盖条件数。

覆盖率 = (100 * COVERED_LINES) / NUMBER_OF_LINES.

覆盖率指标似乎已自行修复。它现在报告正确的值——顺便说一句,我们已经在同一天将 JDK 升级到最新的补丁版本 (8u92)。

这表明 JaCoCo 传感器根据 JRE 工作不正常,但需要更多调查。