2016-10-24 15 views
11

Çok modüllü bir Android projem var ve jacoco'nun raporladığı kapsama ile Sonarqube'nin bildirdiği raporlar arasında bir tutarsızlık görüyorum. Proje aynı zamanda çok sayıda farklı değişken üreten çok amaçlı bir projedir. Tüm görevleri oluşturmama yardımcı olmak için this plugin kullanıyorum. Görevler, her varyant için bireysel bir rapor oluşturur. Benim jacoco raporları çalıştırdığınızdaSonarqube genel kapsamı jacoco rapor kapsama alanıyla eşleşmiyor

Bunu görmek:

jacoco report

Ben bunu görmek sonar tarayıcı çalıştırdığınızda: sonar coverage report

Projemde bazı dışlamaları var, ama bile olmadan % s kapsamı eşleşmiyor. Sonar Versiyon 5.6:

Ben

İşte benim alakalı bilgi olduğunu this question: içinde ima gibi aynı bayt kodu sağlamıyor olabilir gibi hissediyorum.

Gradle koşucu

plugins { id "org.sonarqube" version "2.0.1" } 

Sonar yapılandırma: (kök build.gradle)

sonarqube { 
    properties { 
     property "sonar.projectKey", "com.xxx.myApp" 
     property "sonar.projectName", "Android My App" 
     property "sonar.projectVersion", "3.0" 
     property "sonar.java.binaries", "build/classes" 
     property "sonar.coveragePlugin", "jacoco" 
     property "sonar.jacoco.reportMissing.force.zero", "false" 
    } 
} 
(app/build.gradle üzerine)

Sonar yapılandırma

sonarqube { 
    properties { 
     property "sonar.sources", "src/main/java" 
     property "sonar.tests", "src/test/java" 
     property "sonar.java.tests", "src/test/java" 
     property "sonar.junit.reportsPath", "build/test-results/myAppGoogleMobileDebug" 
     property "sonar.java.binaries", "build/intermediates/classes/myAppGoogleMobile/debug" 
     property "sonar.jacoco.reportPath", "build/jacoco/testMyAppGoogleMobileDebugUnitTest.exec" 
     property "sonar.coverage.exclusions", coverageExclusions 

    } 
} 

Jacoco yapılandırma ile ilgili (app/build.gradle)

def coverageExclusions = ['**/AEWatchApp.*', '**/**_Factory.*', 
          '**/QaSettingsActivity.*', 
          'com/aetn/android/tveapps/activities/**', 
          'com/aetn/android/tveapps/test/**', 
          'com/aetn/android/tveapps/app/injection/modules/**', 
          'com/aetn/android/tveapps/app/injection/components/**', 
          'com.aetn.android.tveapps.mock/**', 
          'com/aetn/android/tveapps/databinding/**'] 


jacocoAndroidUnitTestReport { 
    csv.enabled false 
    html.enabled true 
    xml.enabled true 
    excludes += coverageExclusions 
} 

cevap

10

Şube kapsama alanını görebildiğim kadarıyla: Her iki durumda da% 40'lık kısım ortaya çıkarıldı.

Ve "talimatlar" ın (JaCoCo raporunun ekran görüntüsünde gösterilen) başka bir şeyle karşılaştırılması, elma ve portakalların karşılaştırılması gibidir - aynı şeyi temsil etmezler. JaCoCo'nun sağladığı sayaçlarla ilgili olarak http://www.eclemma.org/jacoco/trunk/doc/counters.html numaralı bölüme bakın. Ve SonarQube'un gösterdiği hakkında http://docs.sonarqube.org/display/SONAR/Metric+Definitions. Talimatlar kapsamı sadece JaCoCo'da sunulmaktadır.

"lines" (SonarQube) ekran görüntüsünde gösterilen "% 27.1", "instructions" ile aynı şey değildir: Tek satırlık kod genellikle birçok bytecode komutu içerir. Örneğin, toplamda 10 satırda 100 talimatınız varsa ve 20 komutla 1 satırı kapladıysanız,% 80 eksik cevapları kaçırdı, ancak cevapsız satırlar% 90.

Sonuç olarak, hiçbir tutarsızlık yok veya en azından ekran görüntülerinde gösterilmiyor. Cevabınız için teşekkürler:

+0

. Lütfen açıklar mısın? Sonar'ın gösterdiği% 28'lik kapsama nedir? Sonar raporunda büyük% 28,8 "kapsama" dikkat edin. Bunun neyi temsil ettiğini ve jacoco raporuyla nasıl bir ilişki olduğunu anlamıyorum. Branşman kapsamı, neye dikkat etmeli ve gözden kaçırmama talimatları mı? –

+2

"28.8%" - Hat kapsamı ve Şube kapsamının bir karışımıdır, bkz. Sayfa http://docs.sonarqube.org/display/SONAR/Metric+Daha sonra nasıl hesaplandığı hakkında JaCoCo bunu hesaplamamaktadır. "% 27.1" - JaCoCo raporunda sunulması gereken ancak ekran görüntüsünde gösterilmemesi gereken hat kapsamıdır (örneğin, http://www.eclemma.org/jacoco/trunk/coverage adresindeki 5 sütun "cevapsız/satır" konusuna bakın) . "endişeli"? ne demek istiyorsun?İlk soru tutarsızlık ve kod kapsamı metriklerinin nasıl kullanıldığı farklı bir hikaye. SonarQube, her ikisinin de aynı anda izlenmesini kolaylaştırmak için şube ve hatların toplanmasını sağlar. – Godin

+0

cevabımı – Godin

İlgili konular