Checkstyle, PMD, FindBugs için SonarQube Değişimi mi?


105

Sıfırdan bir web projesi üzerinde çalışıyoruz ve aşağıdaki statik kod analiz araçlarına bakıyoruz.

  • Kurallar (Checkstyle)
  • Kötü uygulamalar (PMD)
  • Olası hatalar (FindBugs)

Proje Maven üzerine inşa edilmiştir. Amaç için birden fazla araç kullanmak yerine tek bir esnek çözüme bakıyordum ve SonarQube ile karşılaştım.

SonarQube ile Checkstyle, PMD ve Findbugs sonuçlarına ulaşabileceğimiz doğru mu?

Yanıtlar:


99

Sonar, Java projeleri için varsayılan olarak CheckStyle, FindBugs ve PMD'nin yanı sıra Cobertura (kod kapsamı) gibi birkaç başka "eklentiyi" çalıştıracaktır. Ancak ana katma değer, geçmişi bir veritabanında saklamasıdır. Daha sonra eğilimi görebilirsiniz . Kod tabanını geliştiriyor musunuz yoksa tam tersini mi yapıyorsunuz? Bunu sadece hafızalı bir araç söyleyebilir.

Sonar'ı CI sisteminizde çalıştırmalısınız, böylece yürütülmesi biraz zaman alan şeyler (CPD - kopyala yapıştır dedektörü gibi) çalışabilir. Ve geçmişine sahip olacaksın. Örneğin, bir Eclipse eklentisi ile ihlalleri daha erken tespit edeceksiniz - ki bu harika - ancak çok uzun sürmeye başlarsa daha az sıklıkta çalıştırmaya veya daha az "kaliteli eklenti" (CPD'yi atlama veya kod kapsamı analizini atlama). Ve geçmişin olmayacak.

Ayrıca Sonar , "Gösterge Tablosu" tarzında görsel raporlar oluşturur . Bu da kavramayı çok kolaylaştırır. Jenkins'teki Sonar ile, geliştiricilere ve yönetiminize, son birkaç hafta ve ayda kod tabanının kalitesi üzerinde gerçekleştirilen çalışmanın etkilerini gösterebileceksiniz.


Kahverengi alan projeleri bağlamında bu faydalara katılıyorum. Sıfır hata politikalarına sahip yeşil alan projeleri bu belleğe ihtiyaç duymaz. Kod tabanınızı her zaman% 100 temiz tutun.
Christian Hujer

48

Sonar, bu 3 aracı eklenti olarak kullanır ve bu araçlardan grafikler ve benzerlerini göstererek ek değer veren üçünün de verilerini toplar. Yani sonarı tamamlarlar.


1
yup sonar üçünü de kullanıyor
frappuccino

27
Bu, 3.x sürümüne kadar geçerliyken, Sonar 4.x, en azından PMD ve CheckStyle'ı kendi dahili Squid analizörü lehine kullanmaktan uzaklaşıyor, çünkü onlara kural setini genişletmek ve mevcut sorunları düzeltmek için daha fazla özgürlük veriyor. bir süredir bu projeleri rahatsız ediyor. Örneğin, 150'den fazla PMD kuralı halihazırda kullanımdan kaldırıldı ve sonunda tamamen kaldırılacak.
haylem

1
Bu kuralları reddetme nedenleriyle ilgili ilginç gönderi: sonarqube.org/… .
Jhack

33

Evet ve hayır. Diğer cevaplara ek olarak.

SonarQube şu anda PMD, Checkstyle ve Findbugs'u kullanımdan kaldırma ve Java kodunu ( SonarJava olarak adlandırılır ) analiz etmek için kendi teknolojilerini kullanma yolunda . Bunu yaparlar çünkü zamanlarını bu kitaplıkları (örneğin, Java 8 için) sabitlemek, yükseltmek (veya beklemek) için harcamak istemezler, örneğin eski kitaplıkları kullanırlar.

Ayrıca kişisel IDE'niz için SonarLint adında yeni bir eklenti seti aldılar .


8

Sonar harikadır, ancak bahsedilen araçları ayrı ayrı kullanmak ve yine de güzel grafiklere sahip olmak istiyorsanız, Jenkins CI yapınızın bir parçası olarak Analiz Toplayıcı Eklentisini kullanabilirsiniz . Bunun küçük bir avantajı, PMD / Findbugs / Checkstyle konfigürasyonunuzu SCM'nize kontrol edebilmeniz ve ayrı bir Sonar sunucusuna güvenmek yerine Maven yapınıza entegre edebilmenizdir.


5

Sonar, bu araçlardan çok daha fazlasıdır. En büyük faydası, her şeyi kolayca yapılandırmanıza izin veren gui'dir. Sunduğu istatistikler çok ayrıntılıdır (kod satırları vb.). Ve hatta test kapsamı vb. İçin harika destek sunar :)

Burada iyice bir göz atabilirsiniz: http://nemo.sonarsource.org/


3

Yine de sonarın yanı sıra bu araçları kullanırdım çünkü birisi bir kuralı ihlal ettiğinde maven yapımında başarısız olabilirler. Sonarın daha geriye dönük olduğu yerde.


3

... birkaç yıl sonra: hayır, öyle değil! SonarQube, tüm kuralları kendi analizörü ile kapsayabileceğini varsayar, ancak yine de SonarQube tarafından kapsanmayan PMD veya CheckStyle kuralları vardır. Örneğin bkz .: PMD ReturnFromFinallyBlock.


Ayrıca PMD İhlali de eksik görünüyor: Varsayılan paket özel seviyesi yerine açık kapsam mı kullanıyorsunuz?
user7294900


2

En azından SonarQube 6.3+ sürümünden bu yana, Findbugs (şu anda) artık bir eklenti olarak desteklenmiyor gibi görünüyor. Sonarsource, Findbugs kurallarını kendi Java eklentisiyle değiştirmeye çalışıyor.

Her kuralın değiştirme durumu için burada bir liste bile var: http://dist.sonarsource.com/reports/coverage/findbugs.html

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.