Checkstyle vs. PMD
Führen wir statische Analyse-tools in den build-system für Java-Produkt. Wir sind mit Maven2 so Checkstyle und PMD integration zum Nulltarif. Aber wie es aussieht gibt es große überschneidungen in der Funktionalität zwischen diesen beiden tools in Bezug auf die Durchsetzung der grundlegenden style-Regeln.
Ist es ein profitieren von der Nutzung der beiden? Ich will nicht behaupten 2 tools, wenn man. Wenn wir einen auswählen, welches sollten wir verwenden und warum?
Planen wir auch auf mithilfe von FindBugs. Gibt es andere tools zur statischen Analyse sollten wir uns anschauen?
Update: Konsens scheint zu sein, dass PMD ist bevorzugt über CheckStyle. Ich sehe nicht ein fester Grund, beide zu verwenden, und ich will nicht behaupten, dass 2 Sätze-Regel-Dateien, so werden wir wahrscheinlich Ziel für PMD ausschließlich. Wir werden auch bringen, FindBugs, und vielleicht, irgendwann, Ausgestattet durchzusetzen architektonischen Regeln.
InformationsquelleAutor der Frage John Stauffer | 2008-10-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie auf jeden Fall nutzen FindBugs. In meiner Erfahrung, die falsch-positiv-rate ist sehr gering, und auch die am wenigsten kritische Warnungen Berichte sind es Wert, Adressierung zu einem gewissen Grad.
Als für Checkstyle vs. PMD, würde ich nicht verwenden, Checkstyle, da es ziemlich viel ist, nur um Stil. In meiner Erfahrung, Checkstyle-Bericht wird auf eine Tonne Sachen, die sind völlig irrelevant. PMD auf der anderen Seite ist auch in der Lage, darauf hinweisen, fraglich Codierung Praktiken und Ihr Ausgang ist in der Regel mehr relevant und nützlich sind.
InformationsquelleAutor der Antwort Chris Vest
Beide Software sind hilfreich. Checkstyle hilft Ihnen bei der Programmierung, indem Sie Ihre coding style ich.e Klammern, Namensgebung etc. Einfache Dinge, die aber sehr zahlreich!
PMD wird Ihnen helfen, durch die Prüfung komplizierter Regeln wie bei der Gestaltung Ihrer Klassen oder weitere spezielle Probleme wie die Umsetzung richtig die Klon-Funktion. Einfach, PMD, ob Ihr Programmierung Stil
Aber sowohl die Software leidet unter ähnlichen Regeln manchmal schlecht erklärt. Mit einer schlechten Konfiguration, können Sie überprüfen, Dinge zweimal oder zwei entgegengesetzte Dinge, ich.e "Entfernen nutzlos Konstruktoren" und "Immer einen Konstruktor".
InformationsquelleAutor der Antwort
Diese tools sind nicht miteinander konkurrieren, sondern ergänzen sich und sollten gleichzeitig verwendet werden.
Des übereinkommens Typ (Checkstyle) ist der Leim, der es Menschen ermöglicht, gemeinsam zu arbeiten und zu befreien, Ihre Kreativität anstatt Zeit und Energie auf das Verständnis unvereinbar code.
Checkstyle Beispiele:
während PMD erinnert Sie schlechte Praktiken:
Quelle:
http://www.sonarsource.org/what-makes-checkstyle-pmd-findbugs-and-macker-complementary/
InformationsquelleAutor der Antwort Lucas
Verwenden wir sowohl:
InformationsquelleAutor der Antwort Ilya Kochetov
Wenn Ihr primärer Einsatzort ist während der Entwicklung in eclipse, dann CodePro von Instantiierungen wird am besten. Früher war es ein kommerzielles tool, aber jetzt von Google gekauft Instanziierungen so CodePro analytix ist jetzt frei.
Check-out http://code.google.com/javadevtools/download-codepro.html
InformationsquelleAutor der Antwort Naveen
Wenn Sie überprüft Checkstyle, PMD und Findbugs-Regel-Listen, die Sie gesehen haben, dass alle drei liefern wertvolle Ausgabe und alle drei überschneiden sich zu einem gewissen Grad, und bringen auch Ihre eigenen, einzigartigen Regeln auf den Tisch. Dies ist der Grund, warum tools wie Sonar alle drei.
Sagte, Findbugs hat die meisten spezifischen Nischen oder Regeln (z.B. "Zweifelhafte Fang von IllegalMonitorStateException" - wie oft sind Sie wahrscheinlich zu laufen?) so, es ist verwendbar mit wenig oder gar keine Konfiguration und seine Warnungen sollten ernst genommen werden. Mit Checkstyle und PMD, die Regeln sind allgemein und style-bezogene, also sollten Sie nur verwendet werden, benutzerdefinierte Konfigurationsdateien zu ersparen das team von einer Lawine von irrelevanten feedback ("Tab char in Zeile 5", "Registerkarte char in Zeile 6", "Registerkarte char on line 7"... Sie erhalten das Bild). Sie bieten auch leistungsfähige Werkzeuge, um zu schreiben Ihre eigenen erweiterten Regeln, z.B. Checkstyle DescendentToken Regel.
Wenn alle drei (vor allem mit einem tool wie Sonar), Sie alle sollen separat konfiguriert werden (dauert mindestens ein paar Tage, um alle Regeln betreffen), während die Aufmerksamkeit auf überschneidungen zu vermeiden (alle drei tools erkennen, dass hashCode() überschrieben wurde und equals() nicht, zum Beispiel).
In der Zusammenfassung, wenn man bedenkt, statische code-Analyse wertvolle Ablehnung der Wert jeder der drei bietet keinen Sinn macht, aber alle drei Programme verwenden, müssen Sie investieren Zeit, um zu konfigurieren, geben Ihnen brauchbare feedback.
InformationsquelleAutor der Antwort Tomislav Nakic-Alfirevic
Sonar (http://www.sonarsource.org/) ist ein sehr nützliches offene Plattform für die Verwaltung von code-Qualität und enthält Checkstyle, PMD, Findbugs und vieles mehr.
Dies bedeutet auch, dass alle 3 tools haben Ihre Daseinsberechtigung...
InformationsquelleAutor der Antwort DaveFar
Checkstyle und PMD beide sind gut auf die Prüfung coding-standards und sind einfach zu erweitern.
Aber PMD hat zusätzliche Regeln zu überprüfen, für die zyklomatische Komplexität,Npath Komplexität,etc, das können Sie schreiben gesund-code.
Weiterer Vorteil bei der Verwendung der PMD-CPD ist (Copy/Paste Detector).Findet es heraus code-Duplizierung zwischen Projekten und ist nicht eingeschränkt auf JAVA.Es funktioniert für JSP zu.
Neal Ford hat eine gute Präsentation auf Metriken-Getriebene Agile Entwicklung, die Gespräche über viele tools, die hilfreich für die Java - /Java EE-Entwicklung
InformationsquelleAutor der Antwort
Finde ich Checkstyle und PMD sind am besten für die Durchsetzung der Stil der Fragen und die einfachen, offensichtlichen Codierung Fehler. Obwohl ich habe festgestellt, dass ich gerne mit Eclipse und alle Warnungen, die es bietet, besser für diesen Zweck. Setzen wir Sachen durch, die mit freigegebenen Präferenzen und markieren Sie als wirkliche Fehler. Dass Weise, Sie nie überprüft in den ersten Platz.
Was würde ich stark begeistert und empfehlen ist die Verwendung von FindBugs. Weil es funktioniert auf der bytecode-Ebene überprüfen zu können, Dinge, die unmöglich sind, auf der source-Ebene. Während es spuckt seinen fairen Anteil an Dschunken, es hat gefunden, dass viele aktuelle und wichtige Fehler in unserem code.
InformationsquelleAutor der Antwort Alex Miller
Beide tools sind konfigurierbar und können einfach über die gleichen Dinge. Das heißt, wenn wir reden über out-of-the-box-Zeug, es gibt eine Menge überschneidungen, aber es gibt bestimmte Regeln/Kontrollen als gut. Zum Beispiel, Checkstyle hat eine stärkere Unterstützung für die überprüfung von Javadoc und die Suche nach magischen zahlen, zu nennen ein paar. Darüber hinaus Checkstyle ist ein "import control" - Funktion, ähnlich wie in der Funktionalität Ausgestattet (ich habe nicht verwendet Ausgestattet).
Wenn es Dinge gibt, die für Sie wichtig sind, dass Checkstyle nicht out-of-the-box, die PMD nicht, sollten Sie erwägen, eine minimale Checkstyle-Konfiguration nur mit diesen Prüfungen. Dann Institut eine Politik, die Checkstyle-Konfiguration kann nicht wachsen, entfernen Sie einfach überprüft, wie Sie ähnliche Funktionen implementieren, mit, sagen wir, benutzerdefinierte PMD Regeln.
Bedenken Sie auch, dass, wenn Sie entscheiden, dass die Checkstyle "import control" - Funktion beschreibt, was Sie wollte, aus Ausgestattet ist, dann könnte man implementieren PMD/Checkstyle statt PMD/Ausgestattet. So oder so wird es zwei tools, aber mit Checkstyle, Sie bekommen würde, die Sachen, die PMD nicht out-of-the-box "for free".
InformationsquelleAutor der Antwort Greg Mattes
Einem Punkt, den ich nicht gesehen habe bisher ist, dass es plugins für IDEs erzwingt CheckStyle-Regelsätze auf Ihrem code, während PMD plugins werden nur Berichte über Verletzungen. Zum Beispiel, in einer multi-site-Projekt über mehrere Programmier-teams, ist es wichtig, aktiv standards zu erzwingen, statt nur über Sie berichten.
Beide tools sind plugins für IntelliJ, NetBeans und Eclipse (aus meiner Sicht deckt die meisten Nutzung). Ich bin nicht so vertraut mit NetBeans, so kann nur kommentieren, IntelliJ und Eclipse.
Sowieso die PMD plugins für IntelliJ und Eclipse, erstellen Berichte auf Nachfrage auf PMD Verletzungen innerhalb der Projekt-Basis zu nutzen.
Des CheckStyle plugins, auf der anderen Seite, markieren Sie Verletzungen auf der fliege, und kann (zumindest für IntelliJ habe ich weniger Erfahrung mit Eclipse) konfiguriert werden, um automatisch konvertieren einige Probleme (z.B. für 'OneStatementPerLine', wird statt CR-LF zwischen Aussagen, für 'NeedBraces' in Klammern hinzufügen, wo Sie fehlen, etc.). Natürlich, nur die einfachere Verstöße können automatisch behoben, aber es ist immer noch eine Hilfe, die auf legacy-Projekte oder Projekte, die sich über mehrere Standorte.
'On-demand' für PMD bedeutet, dass der Entwickler muss sich bewusst entscheiden, um den Bericht auszuführen. In der Erwägung, dass Checkstyle Verstöße werden automatisch berichtete Ihnen, wie Sie sich entwickeln. Während PMD hat enthalten ein umfangreicher Regelsatz, in meinem Kopf die automatische enforecement/Meldung von Verstößen im IDEs lohnt sich der Aufwand der Pflege 2 Sätze von Regeln.
Also für alle Projekte, die ich auf zu arbeiten, wir verwenden beide tools Checkstyle durchgesetzt in der IDE, PMD berichtet in der IDE, und beide berichtet und gemessen in baut (durch Jenkins).
InformationsquelleAutor der Antwort GKelly
Werfen Sie einen Blick auf qulice-maven-plugindie zusammen kombiniert Checkstyle, PMD, FindBugs und ein paar andere statische Analysatoren, und vor-konfiguriert. Die Schönheit dieser Kombination ist, dass Sie nicht brauchen, um zu konfigurieren Sie individuell in jedem Projekt:
InformationsquelleAutor der Antwort yegor256
Ich würde echo den Kommentar, dass PMD ist das aktuellere Produkt für Java-Stil/- übereinkommens prüfen. Mit Bezug auf FindBugs, viele kommerzielle Entwicklung Gruppen sind mit Coverity.
InformationsquelleAutor der Antwort Steve Moyer
Ich habe gerade begonnen, Checkstyle und PMD. Zu mir, PMD ist einfacher zu erstellen Sie benutzerdefinierte Regeln für solche Dinge, ob es System.gc(), Runtime.gc(), so lange wie Sie können schreiben Sie die XPath-Abfrage, die ist auch gar nicht schwer. Allerdings PMD nicht hat mir gezeigt, dass es hat die Funktion Spalte anzeigen Anzahl. Also für Dinge wie überprüfen Sie in der Spalte Grenzen. Sie möglicherweise verwenden möchten, Checkstyle.
InformationsquelleAutor der Antwort J.P.
- Und 10 Jahre später ...
Im Jahr 2018 habe ich alle in Checkstyle, PMD und FindBugs.
Start mit FindBugs. Vielleicht hinzufügen, PMD und Checkstyle später.
Nie blind durchzusetzen, die Standard-Regeln !
Schritte:
Im Idealfall kann jedes Projekt haben unterschiedliche Regeln.
Ich mag das ausführen der Regeln über das bauen (via maven plugins) und Fehler in der Regel Fehler, wenn ich weiß, ein Projekt übergibt alle Regeln, die ich festgelegt.
Dies zwingt Entwickler, Maßnahmen zu ergreifen, weil Berichterstattung ist nicht genug,.
Von diesem Punkt an Ihrem Projekt ist ziemlich kugelsicher, und man könnte sogar hinzufügen, mehr Regeln, die später und/oder schreiben von benutzerdefinierten Regeln.
InformationsquelleAutor der Antwort Christophe Roussy
PMD ist es, was ich finde, mehr Menschen beziehen. Checkstyle wurde, was die Leute wurden unter Bezugnahme auf 4 Jahre her, aber ich glaube PMD mehr kontinuierlich gepflegt wird und was andere IDEs/plugins wählen, um mit zu arbeiten.
InformationsquelleAutor der Antwort anjanb
PMD ist das beste Werkzeug, wenn Sie vergleichen mit checkstyles. Checkstyles möglicherweise nicht die Fähigkeit haben, zu analysieren, den code während der PMD bietet viele Funktionen, dies zu tun! Offcourse PMD noch nicht veröffentlicht Regeln für javadoc Kommentare, Einrückungen und etc. Und übrigens ich bin der Planung und Implementierung dieser Regeln.......danke
InformationsquelleAutor der Antwort janasainik