2016-04-29 3 views
4

Ich habe alle diese Tools, die die gleiche Abdeckung mit JaCoCo melden: 69% Leitungsabdeckung und 23% Zweigabdeckung.Sonar meldet unterschiedliche Zeilen- und Zweigabdeckung als Idea, Eclipse, Maven und Jenkins

Hinweis: Screenshots hatte über mehrere Tage genommen worden, so dass sie leicht unterschiedliche Werte haben, aber die Varianz ist < 1%

Jenkins: jenkins

Maven: maven

Eklipse : eclipse

jedoch berichtet Sonar unterschiedliche Werte:

sonar

Maven Projekt ist wie folgt aufgebaut:

  • main (Aggregator)
    • Java-Modul
    • js (node) -Modul

Sie können die gleiche Berichterstattung über Main und Java-Module gemeldet, und keine Abdeckung für die Js.

Modules

Ich verwende die neuesten Versionen von jacoco, jacoco-maven-plugin und Sonar Java Plugin.

Hier sind die relevanten Buildprotokoll Fragmente von mvn sonar:sonar - alle scheinen in Ordnung zu sein:

$ 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 

Ist das ein Fehler in Java Plugin Sonar? Ich denke, es ist sehr unwahrscheinlich, dass die von Sonar gemeldete Metrik korrekt ist, wenn drei andere Tools, die von verschiedenen Benutzern konfiguriert wurden, durchgehend unterschiedliche Werte anzeigen.

+1

Betrifft dies ein Multimodulprojekt? Wenn ja, haben Sie Tests in einigen Modulen, die Code in anderen Modulen abdecken? – benzonico

+0

Ich zweite Benzonico ... Ich bin auf Projekte gestoßen, die Testfall für alle Module in 1 Modul hat. In diesem Fall die meisten Tests löst Fehler und Abdeckung wird berichtet für 1 Modul, das Testfälle in ihm hat – Shiva

+0

Nein, es ist ein Multi-Modul-Projekt, aber es hat nur ein Java-Modul und ein anderes für Fronted, so dass alle JUnit-Tests sind im selben Modul wie der zu testende Code. –

Antwort

0

Es scheint, wie die Abdeckung Metrik hat sich festgelegt es jetzt. meldet korrekte Werte - nebenbei haben wir am selben Tag JDK auf die neueste Patch-Version (8u92) aktualisiert

Dies deutet darauf hin, dass der JaCoCo-Sensor abhängig von JRE falsch arbeitet, aber mehr Untersuchung benötigt.

coverage trend

2

Hier ist, wie wird die Berechnung der "Unit-Tests Coverage" Maßnahme:

  • NUMBER_OF_LINES = Anzahl der Zeilen + Anzahl von Bedingungen.
  • COVERED_LINES = NUMBER_OF_LINES -.. (Anzahl der nicht abgedeckten Linien + Anzahl der nicht abgedeckten Bedingungen

COVERAGE = (100 * COVERED_LINES)/NUMBER_OF_LINES

+1

Ich sehe nicht, wie ist das relevant Vant zu meinem Problem von ** Zeile ** und ** Zweig ** Deckung nicht mit den anderen Berichten überein? –

+0

Es hilft Ihnen zu verstehen, wie die Abdeckung in SonarQube berechnet wird. Die anderen Berichte verwenden eine andere Methode zur Berechnung dieser Kennzahl. Aus diesem Grund haben Sie ein anderes Ergebnis. –

+0

Sagen Sie, dass die in Sonar angegebene "Linien" - und "Bedingungs" -Bereitstellung nicht mit der "Linien" - und "Zweig" -Deckung in anderen JaCoCo-Berichten übereinstimmt? –

Verwandte Themen