Frage

Was ist code-Analyse-tools können Sie Ihre Java-Projekte?

Ich interessiere mich für alle Arten

  • tools für die statische Codeanalyse (FindBugs, PMD, und andere)
  • code-coverage-tools (Cobertura, Emma und alle anderen)
  • jede andere Besetzung-basierten tools
  • alles andere, wenn ich bin fehlt etwas

Falls zutreffend, auch angeben, welche build-tools Sie verwenden und wie gut diese tools integrieren, die sowohl mit der IDEs und build-tools.

Wenn ein tool verfügbar, nur eine bestimmte Art und Weise (wie ein IDE-plugin, oder, sagen wir, ein build-tool-plugin), die information ist auch erwähnenswert.

War es hilfreich?

Lösung

Für die statische Analyse-tools, die ich oft verwenden, CPD, PMD, FindBugs, und Checkstyle.

CPD ist der PMD "Copy/Paste Detector" - tool.Ich war mit PMD für eine kleine Weile, bevor ich merkte die "Suche nach Duplizierten Code" link auf der PMD web-Seite.

Ich möchte darauf hinweisen, dass diese Werkzeuge kann manchmal verlängert werden, über Ihre "out-of-the-box" - Regeln.Und das nicht nur, weil Sie sind open source, so dass Sie können schreiben Sie.Einige dieser Werkzeuge kommen mit Anwendungen oder "Haken", die es Ihnen ermöglichen, erweitert werden.Für Beispiel, kommt mit dem PMD "designer" - tool das können Sie neue Regeln erstellen.Auch, Checkstyle hat die DescendantToken überprüfen Sie, dass die Eigenschaften, die ermöglichen erhebliche Anpassung.

Ich integriere diese Werkzeuge mit eine Ant-basierte build -.Sie können dem link Folgen, um zu sehen, meine kommentierte.

Neben der einfachen integration in den build, den ich finde es hilfreich, konfigurieren Sie die Werkzeuge, um etwas "integriert" in ein paar andere Möglichkeiten.Nämlich, Bericht generation und Warnung Unterdrückung der Homogenität.Ich möchte noch hinzufügen, dass diese Aspekte in dieser Diskussion (die müssen wohl die "statische Analyse" - tag, auch):wie sind die Leute die Konfiguration dieser tools, um eine "einheitliche Lösung"?(Ich habe diese Frage gestellt, separat hier)

Erste, für Warnmeldungen, gestalte ich die Ausgabe so, dass jede Warnung hat einfach format:

/absolute-path/filename:line-number:column-number: warning(tool-name): message

Dies wird Häufig als der "Emacs " format" aber selbst wenn Sie nicht mit Emacs, es ist eine angemessene format für die Homogenisierung Berichte.Zum Beispiel:

/project/src/com/example/Foo.java:425:9: warning(Checkstyle):Missing a Javadoc comment.

Meine Warnung format-Transformationen von meinem Ant-Skript mit Ant filterchains.

Die zweite "integration", die ich Tue, ist für Warnung Unterdrückung.Durch Standard, jedes tool unterstützt die Kommentare oder eine Anmerkung (oder beides), können Sie die Stelle in Ihrem code zu schweigen, eine Warnung, die Sie ignorieren möchten.Aber diese verschiedenen Warnung Unterdrückung Anfragen, die tun nicht haben ein einheitliches Aussehen, das scheint etwas albern.Wenn man das unterdrücken einer Warnung, du bist das unterdrücken einer Warnung, also warum nicht immer schreiben "SuppressWarning?"

Für Beispiel, PMD Standard-Konfiguration unterdrückt die Warnung generation auf code-Zeilen mit der Zeichenkette "NOPMD"in einem Kommentar.Auch, PMD unterstützt Java @SuppressWarnings Anmerkung.Konfigurieren Sie die PMD zu verwenden, Kommentare mit "SuppressWarning(PMD."anstelle von NOPMD so, dass PMD Unterdrückung gleich Aussehen.Fülle ich in der Regel wird verletzt, wenn mit dem Kommentar-Stil-Unterdrückung:

// SuppressWarnings(PMD.PreserveStackTrace) justification: (false positive) exceptions are chained

Nur die "SuppressWarnings(PMD."ein Teil ist wesentlich für einen Kommentar, aber es ist konsistent mit der PMD-Unterstützung für die @SuppressWarning - Anmerkung, die nicht erkennen, einzelne Regel-Verstöße durch Namen:

@SuppressWarnings("PMD.CompareObjectsWithEquals") // justification: identity comparision intended

Ähnlich, Checkstyle unterdrückt die Warnung generation zwischen Paaren von Kommentaren (keine annotation-Unterstützung wird zur Verfügung gestellt).Standardmäßig Kommentare zu drehen Checkstyle ab und an enthalten die Saiten CHECKSTYLE:OFF und CHECKSTYLE:ON, beziehungsweise.Das ändern dieser Konfiguration (mit Checkstyle ' s "SuppressionCommentFilter") zu verwenden, die den String "BEGIN SuppressWarnings(CheckStyle."und "END SuppressWarnings(CheckStyle."macht die Steuerelemente Aussehen wie PMD:

// BEGIN SuppressWarnings(Checkstyle.HiddenField) justification: "Effective Java," 2nd ed., Bloch, Item 2
// END SuppressWarnings(Checkstyle.HiddenField)

Mit Checkstyle Kommentaren, die insbesondere zu prüfen Verletzung (HiddenField) ist bedeutsam, weil jede Prüfung hat Ihre eigenen "BEGIN/END"Kommentar-pair-Mädchen.

FindBugs unterstützt auch die Warnung generation Unterdrückung mit ein @SuppressWarnings Anmerkung, so dass keine weitere Konfiguration ist erforderlich, um zu erreichen, einige Niveau der Einheitlichkeit mit anderen tools.Leider, Findbugs hat, unterstützen Sie eine benutzerdefinierte @SuppressWarnings Anmerkung, da die built-in Java @SuppressWarnings annotation hat eine SOURCE Aufbewahrungsrichtlinie, die ist nicht stark genug, um behalten die annotation in der Klasse-Datei, wo FindBugs benötigt.Ich voll qualifizieren, FindBugs warnings Unterdrückung zu vermeiden Kollision mit Java @SuppressWarnings Anmerkung:

@edu.umd.cs.findbugs.annotations.SuppressWarnings("UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR")

Diese Techniken macht die Dinge Aussehen einigermaßen konsistent tools.Beachten Sie, dass jede Warnung Unterdrückung enthalten den string "SuppressWarnings"macht es einfach zu laufen eine einfache Suche nach allen Instanzen für alle Werkzeuge über eine gesamte code-Basis.

Andere Tipps

Ich benutze eine Kombination aus Cobertura, Checkstyle, (Ecl)und Emma Findbugs.

EclEmma ist ein genial Eclipse-plugin, das zeigt das code-coverage-durch färben der java-Quellcode in den editor (screenshot) - die Abdeckung, die ist erzeugt durch die Ausführung eines JUnit-test.Dies ist wirklich nützlich, wenn Sie versuchen, herauszufinden, welche Linien bedeckt sind, die in einer bestimmten Klasse ist, oder wenn Sie wollen, um zu sehen, welche Linien abgedeckt sind, durch einen einzigen test.Dies ist viel benutzerfreundlicher und nützlicher als Sie einen Bericht generieren und dann auf der Suche durch den Bericht, um zu sehen, welche Klassen haben eine geringe Reichweite.

Die Checkstyle und Findbugs Eclipse-plugins sind ebenfalls nützlich, generieren Sie Warnungen in den editor während der Eingabe.

Maven2 hat melden plugins, die die Arbeit mit den oben genannten tools zum generieren von berichten zur build-Zeit.Wir verwenden diese, um die gesamte Projekt-reports, welche die nützlich sind, wenn Sie möchten, aggregierte zahlen.Diese entstehen durch unsere CI-builds, die mit Kontinuum.

Alle folgenden, die wir verwenden, und integrieren easiy in unserem Maven-2.x baut und Eclipse/RAD 7:

  • Testing - JUnit/TestNG
  • Code-Analyse - FindBugs, PMD
  • Code-coverage - Clover

Zusätzlich, in unserem Maven-builds, die wir haben:

  • JDepend
  • Tag-checker (TODO, FIXME, etc)

Darüber hinaus, wenn Sie mit Maven 2.x, CodeHaus hat eine Sammlung von handlichen Maven-plugins in Ihrem Mojo project.

Hinweis:Klee hat out-of-the-box-integration mit Bamboo CI-server (da Sie beide von Atlassian-Produkten).Es gibt auch Bambus-plugins für FindBugs, PMD und CheckStyle aber, wie bereits erwähnt, die kostenlosen Hudson CI-server hat diese auch.

Ich kann die statische Analyse gebaut in IntelliJ IDEA.Perfekte integration.

Ich verwende die code-Abdeckung gebaut in Intellij IDEA (basierend auf EMMA).Wieder, die perfekte integration.

Diese integrierte Lösung ist zuverlässig, leistungsstark und einfach zu bedienen im Vergleich zu zusammensetzen-tools von verschiedenen Anbietern.

Checkstyle ist eine andere, die ich benutzt habe bei einem früheren Unternehmen...es ist vor allem für Stil geprüft werden, aber es kann einige statische Analyse zu.Auch, Clover für code-coverage -, aber bewusst sein, es ist kein kostenloses tool.

Wir sind mit FindBugs und Checkstyle sowie Klee für die Code-Coverage.

Ich denke, es ist wichtig zu haben eine Art von statischer Analyse, Unterstützung für Ihre Entwicklung.Leider ist es noch nicht verbreitet, dass diese Werkzeuge sind wichtig.

Wir verwenden FindBugs und JDepend integriert Ant.Wir verwenden JUnit, aber wir sind nicht mit einer coverage-tool.

Ich bin nicht mit integriert, um Rational Application Developer (die IDE, die ich verwende zum entwickeln von J2EE-Anwendungen), weil ich mag, wie ordentlich es aussieht, wenn Sie ausgeführt javac in der Windows-Konsole.:P

Ich habe Glück gehabt, mit Cobertura.Es ist ein code-coverage-tool ausgeführt werden kann über ant-Skript als Teil Ihrer normalen bauen und können integriert werden in Hudson.

Unser team PMD und Cobertura, eigentlich unserer Projekte mit maven-Projekten und es ist sehr einfach zu plug-ins für code-Analyse.Die eigentliche Frage wäre für das spezifische Projekt, die Analyse, die Sie verwenden müssen, meine Meinung ist, dass es Sie nicht verwenden die gleichen plugins für jedes Projekt.

in unserem Projekt verwenden wir Sonar vor checkstyle, pmd....zusammen mit der CI (Bamboo, Hudson), erhalten wir auch eine nette Geschichte unserer Quelle, was Qualität und Regie gehen wir.Ich weiß, wie Sonar, weil Sie ein zentrales Werkzeug in der CI-Stack, der es für Sie tut, und Sie können Sie leicht anpassen, die Regeln für jedes Projekt.

Struktur 101 gut ist auf code-Analyse und Suche nach der zyklischen Paket Abhängigkeiten.

Ich bin auf der Suche nach vielen Antworten zu lernen, über neue tools und festigen dieses wissen in einem Frage/thread, so bezweifle ich, es wird 1 wahre Antwort auf diese Frage.

Meine Antwort auf meine eigene Frage ist, dass wir verwenden:

  • Findbugs zu suchen häufigsten Fehler, die schlecht/Codierung - ausführen von maven, und auch die einfache Integration in Eclipse
  • Cobertura für unsere Berichterstattung Berichte - ausführen von maven

Hudson hat auch einen task-scanner-plugin, mit display, Anzahl der TODO-und FIXMEs, sowie zeigen, wo Sie sind in der source-Dateien.

Alle sind integriert mit Maven 1.x-in unserem Fall und Band in Hudson, läuft unsere builds on check-in sowie zusätzliche Dinge, die nächtliche und wöchentliche.Hudson trend-Graphiken unsere JUnit-tests, Abdeckung, findbugs, sowie offene Aufgaben.Es gibt auch eine Hudson-plugin, mit berichten und Diagrammen, unsere kompilieren Warnungen.Wir haben auch mehrere performance-tests mit Ihren eigenen Grafiken an der Leistung und Speichernutzung im Laufe der Zeit mit der Hudson plots plugin als gut.

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