Checkstyle vs. PMD

Lesezeit: 5 Minuten

Benutzer-Avatar
Johann Staufer

Wir führen statische Analysewerkzeuge in das Build-System für unser Java-Produkt ein. Wir verwenden also Maven2 Karostil und PMD Integration kostenlos. Es sieht jedoch so aus, als gäbe es eine große Funktionsüberschneidung zwischen diesen beiden Tools in Bezug auf die Durchsetzung grundlegender Stilregeln.

Gibt es einen Vorteil, wenn Sie beide verwenden? Ich möchte nicht 2 Tools pflegen, wenn eines funktioniert. Wenn wir uns für eines entscheiden, welches sollten wir verwenden und warum?

Wir planen auch die Verwendung von FindBugs. Gibt es andere statische Analysetools, die wir uns ansehen sollten?

Aktualisieren: Konsens scheint zu sein, dass PMD gegenüber CheckStyle bevorzugt wird. Ich sehe keinen triftigen Grund, beide zu verwenden, und ich möchte nicht zwei Sätze von Regeldateien verwalten, also werden wir wahrscheinlich ausschließlich auf PMD abzielen. Wir werden auch FindBugs und eventuell Macker einbringen, um architektonische Regeln durchzusetzen.

Benutzer-Avatar
Chris Vest

Solltest du unbedingt nutzen FindBugs. Meiner Erfahrung nach ist die False-Positive-Rate sehr niedrig, und selbst die am wenigsten kritischen Warnungen, die gemeldet werden, sind es wert, bis zu einem gewissen Grad angegangen zu werden.

Was Checkstyle vs. PMD betrifft, würde ich Checkstyle nicht verwenden, da es so ziemlich nur um Stil geht. Meiner Erfahrung nach wird Checkstyle über eine Menge Dinge berichten, die völlig irrelevant sind. PMD hingegen kann auch auf fragwürdige Codierungspraktiken hinweisen und seine Ergebnisse sind im Allgemeinen relevanter und nützlicher.

  • +1 für das Hinzufügen Ihrer Empfehlung von FindBugs. Ich bin jedoch mit Ihrer Meinung zu Checkstyle nicht einverstanden, es sei denn, Sie sind ein einsamer Entwickler mit einem eigenen, eigenwilligen Stil. Für Teams führt die Vereinbarung einer gemeinsamen sinnvollen Teilmenge von Regeln und die Verwendung eines automatisierten Tools wie Checkstyle zur automatischen Durchsetzung dieser Regeln zu einem Code, der für alle lesbar ist.

    – Johannes Tobler

    3. November 2011 um 21:53 Uhr


  • FindBugs ist zwar nicht perfekt, aber bei weitem das Beste. PMD und Checkstyle weisen Sie auf geradezu schlechte Praktiken hin. Um jeden Preis zu vermeiden, es sei denn, Sie wissen genau, welche Warnungen gültig sind und welche nicht.

    – DPM

    23. März 2012 um 19:34 Uhr

  • Seltsamerweise habe ich genau die gegenteilige Erfahrung mit PMD vs. Checkstyle gemacht. PMD meldet häufig falsch positive Ergebnisse, wenn Checkstyle oder Findbugs etwas nicht gefunden haben. 7 Jahre können jedoch eine Menge ausmachen.

    – Fremdenmord

    11. Mai 2016 um 23:56 Uhr


Beide Softwares sind nützlich. Checkstyle hilft Ihnen beim Programmieren, indem es Ihre Codierungsstil dh geschweiften Klammern, Benennung etc. Einfache Dinge, aber sehr zahlreich!

PMD hilft Ihnen bei der Überprüfung komplizierterer Regeln wie beim Design Ihrer Klassen oder bei spezielleren Problemen wie der korrekten Implementierung der Klonfunktion. Einfach, PMD wird Ihre überprüfen Programmierstil

Beide Softwares leiden jedoch unter ähnlichen Regeln, die manchmal schlecht erklärt werden. Bei einer schlechten Konfiguration können Sie Dinge zweimal oder zwei gegensätzliche Dinge überprüfen, dh “Unnötigen Konstruktor entfernen” und “Immer einen Konstruktor”.

  • Exakt. IMHO sind es zwei Tools, die darauf abzielen, verschiedene Dinge zu tun, daher bin ich mir nicht sicher, ob sie überhaupt vergleichbar sind. Wenn Sie in einem Entwicklungsteam einen Standard-Codierungsstil durchsetzen möchten, verwenden Sie Checkstyle. Wenn Sie Code auf Designprobleme oder schlechte Codierungspraktiken analysieren möchten, verwenden Sie PMD.

    – abweichend80

    3. Juli 2009 um 2:52 Uhr

Wenn wir uns für eines entscheiden, welches sollten wir verwenden und warum?

Diese Tools konkurrieren nicht, sondern ergänzen sich und sollten gleichzeitig verwendet werden.

Der Konventionstyp (Checkstyle) ist der Kitt, der es Menschen ermöglicht, zusammenzuarbeiten und ihrer Kreativität freien Lauf zu lassen, anstatt Zeit und Energie darauf zu verwenden, inkonsistenten Code zu verstehen.

Checkstyle-Beispiele:

  • Gibt es Javadoc für öffentliche Methoden?
  • Folgt das Projekt den Sun-Namenskonventionen?
  • Ist der Code in einem konsistenten Format geschrieben?

während PMD Sie an schlechte Praktiken erinnert:

  • Eine Ausnahme abfangen, ohne etwas zu tun
  • Mit totem Code
  • Zu viele komplexe Methoden
  • Direkte Verwendung von Implementierungen anstelle von Schnittstellen
  • Implementieren der Methode hashcode() ohne die Methode not equals(Object object).

Quelle:
http://www.sonarsource.org/what-makes-checkstyle-pmd-findbugs-and-macker-complementary/

  • Ich stimme zu, dass Checkstyle sich mehr auf das Codeformat konzentriert und den Entwickler zwingt, dem “Codestandard” zu folgen, aber es könnte auch viele schlechte Praktiken erkennen, werfen Sie einen Blick darauf hierund die Erweiterung von Checkstyle ist einfacher für die Entwicklung, aber ich stimme zu, dass es Einschränkungen hat und PMD und FindBug niemals überwinden wird.

    – Roman Iwanow

    9. November 2012 um 5:58 Uhr

Wir verwenden beides:

  • Checkstyle, um sicherzustellen, dass jeder im Team Code auf ähnliche Weise schreibt
  • PMD, um problematische Codebereiche und nächste Refactoring-Ziele zu finden

Wenn Sie hauptsächlich in Eclipse entwickeln, ist CodePro von Instantiations am besten geeignet. Früher war es ein kommerzielles Tool, aber jetzt hat Google Instantiations gekauft, sodass CodePro analytix jetzt kostenlos ist.

Kasse http://code.google.com/javadevtools/download-codepro.html

Benutzer-Avatar
Tomislav Nakic-Alfirevic

Wenn Sie sich die Regellisten von Checkstyle, PMD und Findbugs angesehen haben, haben Sie gesehen, dass alle drei wertvolle Ergebnisse liefern und sich alle drei bis zu einem gewissen Grad überschneiden und auch ihre eigenen, einzigartigen Regeln auf den Tisch bringen. Aus diesem Grund verwenden Tools wie Sonar alle drei.

Das heißt, Findbugs hat die spezifischsten oder Nischenregeln (z. B. “Dubioses Fangen von IllegalMonitorStateException” – wie oft werden Sie wahrscheinlich darauf stoßen?), so dass es mit wenig oder gar keiner Konfiguration verwendet werden kann und seine Warnungen ernst genommen werden sollten. Bei Checkstyle und PMD sind die Regeln allgemeiner und stilbezogener, daher sollten sie nur mit benutzerdefinierten Konfigurationsdateien verwendet werden, um das Team vor einer Lawine von irrelevantem Feedback zu bewahren (“Tab char on line 5”, “Tab char on line 6”, “Tab char on line 7″… du bekommst das Bild). Sie bieten auch leistungsstarke Werkzeuge, um Ihre eigenen fortgeschrittenen Regeln zu schreiben, zB den Checkstyle DescendentToken Regel.

Wenn Sie alle drei verwenden (insbesondere mit einem Tool wie Sonar), sollten alle separat konfiguriert werden (es dauert mindestens ein paar Tage, um alle Regeln abzudecken) und dabei darauf zu achten, dass Duplizierungen vermieden werden (alle drei Tools erkennen, dass hashCode() gewesen ist überschrieben und equals() nicht, zum Beispiel).

Zusammenfassend lässt sich sagen: Wenn Sie die statische Codeanalyse für wertvoll halten, macht es keinen Sinn, den Wert einer der drei zu verwerfen, aber um alle drei zu verwenden, müssen Sie Zeit investieren, um sie so zu konfigurieren, dass sie Ihnen brauchbares Feedback geben.

Benutzer-Avatar
DaveFar

Sonar (http://www.sonarsource.org/) ist eine sehr nützliche offene Plattform zur Verwaltung der Codequalität und umfasst Checkstyle, PMD, Findbugs und vieles mehr.

Das deutet auch darauf hin, dass alle 3 Tools ihre Daseinsberechtigung haben…

1257310cookie-checkCheckstyle vs. PMD

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy