Frage

Wir führen statische Analyse -Tools in das Build -System für unser Java -Produkt ein. Wir verwenden Maven2 also Checkstyle und PMD Integration kostenlos. Es sieht jedoch so aus, als ob die Funktionalität zwischen diesen beiden Tools eine große Überschneidung gibt, um grundlegende Stilregeln durchzusetzen.

Gibt es einen Vorteil, wenn Sie beide verwenden? Ich möchte keine 2 Tools pflegen, wenn man funktioniert. Wenn wir eine auswählen, welche sollten wir verwenden und warum?

Wir planen auch, Findbugs zu verwenden. Gibt es andere statische Analyse -Tools, die wir uns ansehen sollten?

Aktualisieren: Konsens scheint zu sein, dass PMD gegenüber Checkstyle bevorzugt wird. Ich sehe keinen soliden Grund, beides zu verwenden, und ich möchte 2 Sätze von Regeldateien nicht verwalten, daher werden wir wahrscheinlich ausschließlich PMD anstreben. Wir werden auch Findbugs und vielleicht schließlich Macker einbringen, um architektonische Regeln durchzusetzen.

War es hilfreich?

Lösung

Sie sollten auf jeden Fall verwenden Findbugs. Nach meiner Erfahrung ist die falsch-positive Rate sehr niedrig, und selbst die am wenigsten kritischen Warnungen, die sie meldet, sind es wert, in gewissem Maße angesprochen zu werden.

Was Checkstyle vs. PMD betrifft, würde ich Checkstyle nicht verwenden, da es sich so gut wie nur mit Stil befasst. Nach meiner Erfahrung wird Checkstyle über eine Menge Dinge berichten, die völlig irrelevant sind. PMD hingegen kann auch auf fragwürdige Codierungspraktiken hinweisen und seine Ausgabe ist im Allgemeinen relevanter und nützlicher.

Andere Tipps

Beide Software sind nützlich. CheckStyle hilft Ihnen während Ihres Programms, indem Sie Ihre überprüfen Codierungsstil dh Zahnspangen, Namen usw. Einfache Dinge, aber sehr zahlreich!

PMD hilft Ihnen, indem Sie mehr kompliziertere Regeln wie während des Designs Ihrer Klassen oder für spezielle Probleme wie die korrekte Implementierung der Klonfunktion überprüfen. Einfach prüft PMD Ihre Programmierstil

Beide Software leiden jedoch unter ähnlichen Regeln, die manchmal schlecht erklärt werden. Mit einer schlechten Konfiguration können Sie die Dinge zweimal oder zwei entgegengesetzte Dinge überprüfen, dh "nutzlose Konstruktoren entfernen" und "immer ein Konstruktor".

Wenn wir eine auswählen, welche sollten wir verwenden und warum?

Diese Tools sind nicht konkurrieren, aber komplementär und sollten gleichzeitig verwendet werden.

Der Konventionstyp (Checkstyle) ist der Kleber, der es den Menschen ermöglicht, zusammenzuarbeiten und ihre Kreativität freizugeben, anstatt Zeit und Energie zu verbringen, um inkonsistenten Code zu verstehen.

CheckStyle -Beispiele:

  • Gibt es Javadoc für öffentliche Methoden?
  • Ist das Projekt nach der Namenskonventionen nach Sonneneingang?
  • Wird der Code mit einem konsistenten Format geschrieben?

Während PMD Sie schlechte Praktiken erinnert:

  • Eine Ausnahme fangen, ohne etwas zu tun
  • Dead Code
  • Zu viele komplexe Methoden
  • Direkte Verwendung von Implementierungen anstelle von Schnittstellen
  • Implementierung der HashCode () -Methode ohne die nicht gleiche Methode (Objektobjekt)

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

Wir verwenden beide:

  • Checkstyle, um sicherzustellen, dass jeder im Team Code in einem ähnlichen Maner schreibt
  • PMD, um problematische Codebereiche zu finden und als nächstes die Ziele zu refaktieren

Wenn Ihr Hauptnutzungsort während der Entwicklung in Eclipse ist, ist CodePro von Instanziationen am besten. Früher war es ein kommerzielles Tool, aber jetzt kaufte Google Instanziationen, sodass CodePro Analytix jetzt kostenlos ist.

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

Wenn Sie CheckStyle-, PMD- und Findbugs -Regellisten überprüft haben, haben Sie festgestellt, dass alle drei wertvolle Ausgaben und alle drei Überschneidungen bis zu einem gewissen Grad liefern und auch ihre eigenen, einzigartigen Regeln auf die Tabelle bringen. Deshalb verwenden Werkzeuge wie Sonar alle drei.

Das heißt, Findbugs hat die spezifischsten oder nischen Regeln (z. B. "zweifelhaftes Fangen von IllegalMonitorStateException" - wie oft werden Sie wahrscheinlich darauf eingehen?), Damit es mit wenig oder ohne Konfiguration verwendet werden kann, und seine Warnungen sollten ernst genommen werden. Mit CheckStyle und PMD sind die Regeln allgemeiner und stilvoller, sodass sie nur mit benutzerdefinierten Konfigurationsdateien verwendet werden sollten, um das Team vor einer Lawine irrelevanter Feedback ("Registerkarte in Zeile 5", "Registerkarte in Zeile 6", zu ersparen. "Tab char in Zeile 7" ... Sie erhalten das Bild). Sie bieten auch leistungsstarke Tools, um Ihre eigenen erweiterten Regeln zu schreiben, z. B. der Checkstyle DescendentToken Regel.

Wenn alle drei (insbesondere mit einem Tool wie Sonar) verwendet werden, sollten alle separat konfiguriert werden (mindestens einige Tage, um alle Regeln abzudecken), während sie aufmerksam werden, um die Doppelarbeit zu verhindern (alle drei Tools erkennen, dass HashCode () war. überschrieben und gleich () nicht, zum Beispiel).

Zusammenfassend lässt sich sagen, dass wenn Sie die statische Codeanalyse als wertvoll betrachten, das Ablehnen des Werts eines der drei liefert keinen Sinn macht. Um jedoch alle drei zu verwenden, müssen Sie Zeit investieren, um sie zu konfigurieren, um Ihnen ein nutzbares Feedback zu geben.

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.

Dies weist auch darauf hin, dass alle 3 Tools ihr Recht haben, zu existieren ...

Checkstyle und PMD sind beide gut darin, die Codierungsstandards zu überprüfen und leicht zu erweitern. PMD verfügt jedoch über zusätzliche Regeln, um die zyklomatische Komplexität, die Komplexität von NPath usw. zu überprüfen, mit denen Sie einen gesunden Code schreiben können.

Ein weiterer Vorteil der Verwendung von PMD ist CPD (Kopieren/Einfügen von Detektor). Es findet die Code -Duplikation über Projekte hinweg und ist nicht auf Java beschränkt. Es funktioniert auch für JSP. Neal Ford hat eine gute Präsentation über Metriken angetriebene agile Entwicklung, was über viele Tools spricht, die für Java/Java EE -Entwicklung hilfreich sind

Ich finde Checkstyle und PMD eignen sich am besten zur Durchsetzung von Stilproblemen und einfachen offensichtlichen Codierungsfehlern. Obwohl ich festgestellt habe, dass ich gerne Eclipse und alle Warnungen verwende, bietet es für diesen Zweck besser. Wir setzen Sachen durch, indem wir gemeinsame Vorlieben verwenden und sie als tatsächliche Fehler markieren. Auf diese Weise werden sie überhaupt nie eingecheckt.

Was ich stark und begeistert empfehlen würde, ist Findbugs zu verwenden. Da es auf der Bytecode -Ebene funktioniert, kann es Dinge überprüfen, die auf der Quellebene unmöglich sind. Während es seinen angemessenen Anteil an Junks ausspuckt, hat es viele tatsächliche und wichtige Fehler in unserem Code gefunden.

Beide Tools sind konfigurierbar und können genau die gleichen Dinge tun. Das heißt, wenn wir über außerhalb des Boxs sprechen, gibt es eine Menge Überschneidungen, aber es gibt auch unterschiedliche Regeln/Überprüfungen. Zum Beispiel hat CheckStyle eine stärkere Unterstützung für die Überprüfung von Javadoc und die Suche nach magischen Zahlen, um ein Paar zu nennen. Darüber hinaus verfügt CheckStyle über eine "Importsteuerung" -Funktion, die der Funktionalität von Macker ähnelt (ich habe Macker nicht verwendet).

Wenn es Ihnen Dinge gibt, die Ihnen wichtig sind, dass CheckStyle außerhalb des Boxs, die PMD nicht tun, können Sie eine minimale CheckStyle-Konfiguration nur mit diesen Schecks in Betracht ziehen. Geben Sie dann eine Richtlinie ein, dass die CheckStyle -Konfiguration nicht wachsen kann. Entfernen Sie einfach Überprüfungen, wenn Sie ähnliche Funktionen mit beispielsweise benutzerdefinierten PMD -Regeln implementieren.

Beachten Sie auch, dass Sie, wenn Sie entscheiden, dass die Funktion "Checkstyle -Importsteuerung" das von Macker gewünscht hat, PMD/Checkstyle anstelle von PMD/Macker implementieren können. In beiden Fällen sind es zwei Tools, aber mit Checkstyle würden Sie das Zeug bekommen, das PMD nicht kostenlos "aus dem Feld" macht.

Ein Punkt, den ich bisher noch nicht gesehen habe, ist, dass es Plugins für IDEs gibt, die CheckStyle -Regeln in Ihrem Code durchsetzen, während PMD -Plugins nur über Verstöße berichten. In einem Multi-Site-Projekt über mehrere Programmteams ist es beispielsweise wichtig, Standards aktiv durchzusetzen, anstatt nur darüber zu berichten.

Beide Tools stehen Plugins für Intellij, Netbeans und Eclipse zur Verfügung (meiner Ansicht nach deckt dies die meisten Gebrauchsgebäude ab). Ich bin mit NetBeans nicht so vertraut, kann also nur zu Intellij und Eclipse kommentieren.

Wie auch immer, die PMD -Plugins für Intellij und Eclipse werden Berichte generieren auf Nachfrage Bei PMD -Verstößen innerhalb der Projektcodebasis.

Die CheckStyle-Plugins hingegen werden Verstöße im laufenden Fliegen hervorheben und kann (zumindest für Intellij, ich habe weniger Erfahrung mit Eclipse) so konfiguriert werden, dass einige Probleme automatisch konvertiert werden (z. Zwischen Aussagen, für 'Needbraces', fügt sie Klammern hinzu, wo sie fehlen usw.). Offensichtlich können nur die einfacheren Verstöße automatisch behoben werden, aber es ist immer noch eine Hilfe bei Legacy -Projekten oder Projekten, die sich an mehreren Standorten befinden.

'On Demand' für PMD bedeutet, dass der Entwickler bewusst beschließen muss, den Bericht auszuführen. Während der Entwicklung von Checkstyle -Verstößen automatisch gemeldet wird. Während PMD tut Enthält eine umfangreichere Regeln, meiner Meinung nach ist die automatische Durchsetzung/Berichterstattung von Verstößen in IDES den Aufwand für die Aufrechterhaltung von 2 Regelnsätzen wert.

Für alle Projekte, an denen ich arbeite, verwenden wir beide Tools, CheckStyle in der IDE durchgesetzt, berichtete PMD in der IDE, und beide gemeldet und gemessen in Builds (durch Jenkins).

Und 10 Jahre später ... 2018 verwende ich alle Checkstyle, PMD und Findbugs.

Beginnen mit Findbugs. Vielleicht fügen Sie PMD hinzu und überprüfen Sie später.

NIEMALS blind die Standardregeln durchsetzen !

Schritte:

  • Führen Sie ein Tool mit Standardregeln für ein Projekt aus, das viel Code enthält
  • Passen Sie die Regeln an dieses Projekt an und kommentieren Sie nutzlose Regeln mit einigen Notizen
  • Konzentrieren Sie sich auf die Regeln für niedrige Hänge von Früchten (NPE, Logger -Überprüfungen, nicht abgestellte Ressourcenprüfungen, ...)
  • Führen Sie einige Korrekturen für Regeln durch, die Sie lohnen (jeweils einzeln!)
  • Tun Sie dies für jedes Werkzeug, aber nicht alle auf einmal!
  • Wiederholen Sie diesen Vorgang

Idealerweise kann jedes Projekt getrennte Regeln haben. Ich mag es, die Regeln über den Build (über Maven -Plugins) auszuführen und bei Regelfehlern zu fehlen, sobald ich weiß, dass ein Projekt alle von mir definierten Regeln übergibt. Dies zwingt Entwickler, Maßnahmen zu ergreifen, weil Die Berichterstattung reicht nicht aus. Ab diesem Zeitpunkt ist es so ziemlich kugelsicher, und Sie können später sogar weitere Regeln hinzufügen und/oder benutzerdefinierte Regeln schreiben.

Sich ansehen Qulice-Maven-Plugin Das kombiniert Checkstyle, PMD, Findbugs und einige andere statische Analysatoren und konfiguriert sie vor der Konfiguration. Das Schöne an dieser Kombination ist, dass Sie sie in jedem Projekt nicht einzeln konfigurieren müssen:

<plugin>
  <groupId>com.qulice</groupId>
  <artifactId>qulice-maven-plugin</artifactId>
  <version>0.15</version>
  <executions>
    <execution>
      <goals>
        <goal>check</goal>
      </goals>
    </execution>
  </executions>
</plugin>

Ich würde den Kommentar wiederholen, dass PMD das aktuellere Produkt für die Überprüfung von Java -Stilen/Kongress ist. In Bezug auf Findbugs verwenden viele kommerzielle Entwicklungsgruppen die Deckung.

Ich habe gerade begonnen, Checkstyle und PMD zu verwenden. Für mich ist PMD einfacher zu erstellen, dass maßgeschneiderte Regeln für Dinge so erstellt werden, dass es system.gc (), runtime.gc () existiert, solange Sie die XPath -Abfrage schreiben können, die ebenfalls überhaupt nicht schwierig ist. PMD hat mir jedoch nicht gezeigt, dass es die Funktion zum Anzeigen der Spaltennummer hat. Für Dinge wie die Überprüfung der Spaltengrenzen. Möglicherweise möchten Sie Checkstyle verwenden.

PMD ist das, worauf ich mehr Leute finde. Checkstyle war das, worauf sich die Leute vor 4 Jahren bezogen, aber ich glaube, PMD wird kontinuierlicher gehalten und was andere IDEs/Plugins für die Arbeit entscheiden.

PMD ist das beste Tool, wenn es sich um Checkstyles verglichen. Checkstyles kann den Code möglicherweise nicht analysieren, während PMD viele Funktionen dazu bietet! Offcourse PMD hat keine Regeln für Javadoc, Kommentare, Einkerbungen und usw. veröffentlicht und plane durch die Art und Weise, wie ich diese Regeln implementieren soll.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top