PMD ve FindBugs arasındaki farklar nelerdir?


107

PMD ve CheckStyle'ı karşılaştıran bir soru vardı . Ancak, PMD ve FindBugs arasındaki farklılıklar / benzerlikler hakkında güzel bir döküm bulamıyorum. Bence temel bir fark, PMD'nin kaynak kodu üzerinde çalışırken, FindBugs derlenmiş bayt kodu dosyaları üzerinde çalışıyor. Fakat yetenekler açısından, bir ya / ya da seçim mi olmalı yoksa birbirlerini tamamlıyorlar mı?

Yanıtlar:


151

İkisini de kullanıyorum. Birbirlerini tamamladıklarını düşünüyorum.

Söylediğiniz gibi, PMD kaynak kodu üzerinde çalışır ve bu nedenle: adlandırma kurallarının ihlali, küme parantezlerinin olmaması, yanlış yerleştirilmiş boş kontrol, uzun parametre listesi, gereksiz kurucu, anahtarda eksik kesinti vb. Gibi sorunları bulur. çok yararlı bulduğum kodunuzun karmaşıklığı (FindBugs size Döngüsel karmaşıklıktan bahsetmez).

FindBugs , bayt kodu üzerinde çalışır. FindBugs'un PMD'nin bulamadığı bazı problemler şunlardır: equals () yöntemi alt türlerde başarısız olur, klon yöntemi boş döndürebilir, Boole değerlerinin referans karşılaştırması, imkansız çevrim, 32bit int 0-31 aralığında olmayan bir miktarda kaydırılır, kendini içeren bir koleksiyon, eşittir yöntemi her zaman true, sonsuz döngü vb. döndürür.

Genellikle her biri farklı bir dizi problem bulur. İkisini de kullan. Bu araçlar bana Java kodunun nasıl yazılacağı konusunda çok şey öğretti.


Bir koleksiyon kendisini içerdiğinde gördüğünüz belirli hata kodu nedir ve bu neden FindBugs tarafından olası bir hatayı işaretledi?
Geek

Sonarqube 6.3 artık olmadığından beri ... Sonarqube artık Java 8'e ihtiyaç duyuyor ve Findbugs henüz Java 7'yi destekliyor
Markus

22

PMD'nin en iyi özelliği, kod örneklerinden (RegEx ve XPath GUI oluşturuculara benzer) yeni kuralları kolayca oluşturmanıza olanak tanıyan bir Kural Tasarımcısı ile birlikte gelen XPath Kurallarıdır . FindBugs kutudan daha güçlüdür, ancak projeye özel kurallar ve kalıplar oluşturmak çok önemlidir.

Örneğin, iç içe geçmiş 2 döngü içeren bir performans sorunuyla karşılaştım ve bunun sonucunda kolayca önlenebilecek bir O (n ^ 2) çalışma süresi elde ettim. Döngülerin diğer örneklerini gözden geçirmek için geçici bir sorgu oluşturmak için PMD kullandım - // ForStatement / Statement // ForStatement. Bu, sorunun 2 örneğine daha işaret etti. Bu hiçbir şekilde genel bir kural değildir.


2

PMD

  • tanınmış
  • endüstride yaygın olarak kullanılmaktadır
  • kurallarınızı xml'de ekleyebilirsiniz
  • Hata seviyeleri ve uyarı seviyelerinde size ayrıntılı analiz sunar
  • kodunuzu "satırları kopyala ve yapıştır" için de tarayabilirsiniz. Yinelenen kod. Bu, java oops uygulamasına ilişkin iyi bir fikir verir.

FindBugs ile konuşmaz; problem setleri aynı olmadığından birbirlerini tamamlarlar.
Stevers
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.