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?
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.
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.
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.
quelle
PMD ist
quelle