Jenkins-Code Coverage Analizi

Betül Aslan
2 min readJan 31, 2022

Coverage, yazılan unit testlerin, source kod’u ne kadar kapsayıp, kapsamadığını ölçmek için bir kullanılan bir tanımdır.

Programlama dillerine göre coverage tool’ları değişkenlik gösterebilir. C++ projesinde gcov,lcov,gcovr kullanılabilir. Java da jacoco vs.

Gcov ile generate edilen coverage raporu xml formatında oluşmaktadır.

Jenkins üzerinde Coverage raporu oluşturmak için plugin desteği sunulmaktadır. Ister free style’da ister jenkins declarative pipeline’da kullanılabilir. Projede kullanılan dile’e göre pluginlerde çeşitlilik gösterebilir. C++ projesinde Cobertura plugin ve Code Coverage API pluginleri kullanılabilir ve sayı daha fazla artırılabilir.

Bu yazımda asıl amacım bu pluginleri ve tam olarak işlevselliklerini incelemek olacaktır.

Cobertura Plugin

Xml formatındaki coverage raporunu pars ederek, belirlenen threshold değerlerine göre dosya bazlı bir coverage analizi yapar. Tek tek dosya bazlı analiz sonucu oluşturur ve hata durumda hangi dosyada eşik seviyesinin altında hata verdiğini söyler. Tüm dosyaların coverage değerinin belirtilen threshold seviyesinde olmasını bekler. Bu plugin ile threshold seviyesini otomatik olarak update edebiliriz. Ama bu özellik sadece free style için uyumludur. Jenkinsfile kullanılan job’larda bu özellik kullanılamaz.

Code Coverage API plugin

Birden fazla türde coverage rapor formatı sunmaktadır. Jacoco, Istanbul, Cobertura. Bu Pluginde xml formatındaki coverage raporunu pars ederek analiz yapar. Raporun sonucuna göre analiz yapar. Hata durumda raporun ortalamasına bakarak fail veya success değer döndürür. Analiz sonucu, ortalama eşik seviyesinin üstünde ise threshold değerinin altında kalan dosyalarda geçmiş olur.
“Apply threshold recursively” option ile dosya bazlı olarakta analiz yapılmasını sağlayabiliriz.

Bu plugin ile birden fazla coverage raporumuzu tek bir coverage raporuna merge edip, tek bir analiz sonucu oluşturabiliriz. Ayrıca diff analizi yapma imkanı da sağlar. Base olarak set edilen branch’in son build’indeki coverage analizi ile karşılaştırma yapar. Target base branch’deki değerlere göre daha düşük bir analiz sonucu çıktığında build fail olarak sonlanır.

Jenkins pipeline;

publishCoverage adapters: [coberturaAdapter(mergeToOneReport: true, path: 'GCC_test/coverage*.xml', thresholds: [[thresholdTarget: 'Line', unstableThreshold: 60.0]])], applyThresholdRecursively: true, failUnstable: true, globalThresholds: [[thresholdTarget: 'Line', unstableThreshold: 60.0]], sourceFileResolver: sourceFiles('STORE_LAST_BUILD')

--

--