Was sind die Unterschiede zwischen PMD und FindBugs?


107

Es gab eine Frage zum Vergleich von PMD und CheckStyle . Ich kann jedoch keine gute Aufschlüsselung der Unterschiede / Ähnlichkeiten zwischen PMD und FindBugs finden. Ich glaube, ein wesentlicher Unterschied besteht darin, dass PMD mit Quellcode arbeitet, während FindBugs mit kompilierten Bytecode-Dateien arbeitet. Aber sollte es in Bezug auf die Fähigkeiten eine Entweder-Oder-Wahl sein oder ergänzen sie sich?

Antworten:


151

Ich benutze beide. Ich denke, sie ergänzen sich.

Wie Sie sagten, arbeitet PMD mit Quellcode und findet daher Probleme wie: Verletzung von Namenskonventionen, Fehlen von geschweiften Klammern, falsch platzierte Nullprüfung, lange Parameterliste, unnötiger Konstruktor, fehlende Unterbrechung des Schalters usw. PMD informiert Sie auch über die Cyclomatic Komplexität Ihres Codes, die ich sehr hilfreich finde (FindBugs sagt nichts über die zyklomatische Komplexität aus).

FindBugs arbeitet mit Bytecode. Hier sind einige Probleme, die FindBugs findet, was PMD nicht tut: Die Methode equals () schlägt bei Subtypen fehl, die Klonmethode gibt möglicherweise null zurück, Referenzvergleich der Booleschen Werte, unmögliche Umwandlung, 32-Bit-Int um einen Betrag verschoben, der nicht im Bereich von 0-31 liegt. Eine Sammlung, die sich selbst enthält, entspricht immer der Methode true, eine Endlosschleife usw.

Normalerweise findet jeder von ihnen unterschiedliche Probleme. Verwende beide. Diese Tools haben mir viel darüber beigebracht, wie man guten Java-Code schreibt.


Was ist der spezifische Fehlercode, den Sie gesehen haben, als sich eine Sammlung selbst enthält, und warum ist dies ein wahrscheinlicher Fehler von FindBugs?
Geek

Nun, seit Sonarqube 6.3 nicht mehr ... Sonarqube braucht jetzt Java 8 und Findbugs unterstützt nur noch Java 7
Markus

22

Die beste Funktion von PMD sind die XPath-Regeln , die mit einem Regel-Designer gebündelt sind, damit Sie auf einfache Weise neue Regeln aus Codebeispielen erstellen können (ähnlich wie bei RegEx- und XPath-GUI-Buildern). FindBugs ist sofort stärker, aber es ist sehr wichtig, projektspezifische Regeln und Muster zu erstellen.

Zum Beispiel stieß ich auf ein Leistungsproblem mit 2 verschachtelten for-Schleifen, was zu einer Laufzeit von O (n ^ 2) führte, die leicht vermieden werden konnte. Ich habe PMD verwendet, um eine Ad-hoc-Abfrage zu erstellen und andere Instanzen von verschachtelten for-Schleifen zu überprüfen - // ForStatement / Statement // ForStatement. Dies wies auf zwei weitere Fälle des Problems hin. Dies ist überhaupt keine generische Regel.


2

PMD ist

  • berühmt
  • weit verbreitet in der Industrie
  • Sie können Ihre Regeln in XML hinzufügen
  • bietet Ihnen eine detaillierte Analyse der Fehler- und Warnstufen
  • Sie können Ihren Code auch nach "Zeilen kopieren und einfügen" durchsuchen. Doppelter Code. Dies gibt eine gute Vorstellung von der Implementierung von Java oops.

Spricht nicht mit FindBugs; Sie ergänzen sich, da ihre Problemstellungen nicht identisch sind.
Stevers
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.