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(节点)模块
您可以看到主模块和 java 模块报告的覆盖率相同,而 js 模块没有覆盖率。
我正在使用最新版本的 jacoco
、jacoco-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 工作不正常,但需要更多调查。
我有所有这些工具报告与 JaCoCo 相同的覆盖率:69% 的线路覆盖率和 23% 的分支覆盖率。
注意:截图是几天拍摄的,所以它们的值略有不同,但差异小于 1%
詹金斯:
行家:
日食:
但是 Sonar 报告了不同的值:
Maven项目结构如下:
- 主要(聚合器)
- java模块
- js(节点)模块
您可以看到主模块和 java 模块报告的覆盖率相同,而 js 模块没有覆盖率。
我正在使用最新版本的 jacoco
、jacoco-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 工作不正常,但需要更多调查。