Java Static Analysis Tools in Eclipse und IntelliJ IDEA

1. Übersicht

In unserer Einführung in FindBugs haben wir uns mit der Funktionalität von FindBugs als statisches Analysetool befasst und wie es direkt in IDEs wie Eclipse und IntelliJ Idea integriert werden kann.

In diesem Artikel werden einige der alternativen statischen Analysetools für Java vorgestellt - und wie diese in Eclipse und IntelliJ IDEA integriert werden.

2. PMD

Beginnen wir mit PMD.

Dieses ausgereifte und recht gut etablierte Tool analysiert den Quellcode auf mögliche Fehler, suboptimale Codes und andere schlechte Praktiken. Es werden auch fortgeschrittenere Metriken wie die zyklomatische Komplexität für die von ihm analysierte Codebasis untersucht.

2.1. Integration mit Eclipse

Das PMD-Plugin kann direkt vom Eclipse Marketplace installiert werden. Das Plugin kann hier auch manuell heruntergeladen werden. Nach der Installation können wir die PMD-Prüfung direkt von der IDE selbst ausführen:

Es ist erwähnenswert, dass wir PMD auf Projektebene oder auf Einzelklassenebene ausführen können.

Die Ergebnisse sind nachstehend aufgeführt - mit unterschiedlichen Farben für unterschiedliche Befundniveaus, die von „Warnung“ bis „Blocker“ in aufsteigender Reihenfolge des Schweregrads reichen:

Wir können die Details jedes Eintrags untersuchen, indem wir mit der rechten Maustaste darauf klicken und im Kontextmenü die Option "Details anzeigen" auswählen. Eclipse zeigt eine kurze Beschreibung des Problems und mögliche Lösungen zur Behebung des Problems an:

Es ist auch möglich, die Konfiguration des PMD-Scans zu ändern. Dies können Sie im Menü unter Fenster -> Einstellungen -> PMD tun, um die Konfigurationsseite zu starten. Hier können wir Scanparameter, Regelsätze, Einstellungen für die Ergebnisanzeige usw. konfigurieren.

Wenn wir bestimmte Regeln für das Projekt deaktivieren müssen, können wir sie einfach aus dem Scan entfernen:

2.2. Integration mit IntelliJ

Natürlich hat IntelliJ ein ähnliches PMD-Plugin, das im JetBrains-Plugin-Store heruntergeladen und installiert werden kann.

Auf ähnliche Weise können wir das Plugin direkt in der IDE ausführen - indem Sie mit der rechten Maustaste auf die Quelle klicken, die gescannt werden soll, und PMD-Scan aus dem Kontextmenü auswählen:

Die Ergebnisse werden sofort angezeigt. Wenn wir jedoch versuchen, die Beschreibung zu öffnen, wird im Gegensatz zu Eclipse ein Browser mit einer öffentlichen Webseite zum Auffinden von Informationen geöffnet:

Sie können das Verhalten des PMD-Plugins auf der Einstellungsseite festlegen, indem Sie auf Datei -> Einstellungen -> Andere Einstellungen -> PMD gehen, um die Konfigurationsseite anzuzeigen. Auf der Einstellungsseite können wir den Regelsatz konfigurieren, indem wir einen benutzerdefinierten Regelsatz mit unseren eigenen Testregeln laden.

3. JaCoCo

Weitergehen - JaCoCo ist ein Testabdeckungstool, mit dem die Unit-Testabdeckung in der Codebasis verfolgt wird. Einfach ausgedrückt berechnet das Tool die Abdeckung mithilfe einer Reihe von Strategien, z. B. Linien, Klassen, Methoden usw.

3.1. Integration mit Eclipse

JaCoCo kann direkt vom Marktplatz installiert werden. Ein Installationslink wird auch auf der offiziellen Website gehostet, die hier verfügbar ist.

Das Tool kann von der Projektebene bis zur einzelnen Methodenebene ausgeführt werden. Das Eclipse-Plugin verwendet verschiedene Farbschemata, um festzustellen, welcher Teil des Codes von den Testfällen abgedeckt wird und welcher nicht:

Unsere Methode teilt zwei bereitgestellte ganzzahlige Parameter und gibt das Ergebnis zurück. Wenn der zweite Parameter Null ist, wird ein Maximalwert für den ganzzahligen Datentyp zurückgegeben.

In unserem Testfall testen wir nur das Szenario, in dem der zweite Parameter Null ist:

In diesem Fall können wir sehen, dass Zeile 6 gelb gefärbt ist. In unserem einfachen Test wird nur ein Zweig der 'if'-Bedingung getestet und ausgeführt. Daher ist es nicht vollständig getestet und gelb markiert.

Darüber hinaus hat Zeile 7 eine grüne Farbe - dies bedeutet, dass sie vollständig getestet wurde. Schließlich wird Zeile 9 mit einer roten Farbe hervorgehoben, was bedeutet, dass diese Zeile durch unsere Komponententests überhaupt nicht getestet wird.

Wir können eine Zusammenfassung der Testabdeckung sehen, in der angezeigt wird, wie viel Code unter Unit-Tests auf Klassen- und Paketebene abgedeckt ist:

3.2. Integration mit IntelliJ IDEA

JaCoCo wird standardmäßig mit der neuesten IntelliJ IDEA-Distribution gebündelt, sodass das Plugin nicht separat installiert werden muss.

Bei der Ausführung von Komponententests können wir auswählen, welchen Coverage Runner wir verwenden möchten. Wir können die Testfälle entweder auf Projektebene oder auf Klassenebene ausführen:

Ähnlich wie bei Eclipse zeigt JaCoCo Ergebnisse mit unterschiedlichen Farbschemata für die Abdeckung an.

In der Zusammenfassung der Testabdeckung wird angezeigt, wie viel Code unter Komponententests auf Klassen- und Paketebene abgedeckt ist.

4. Cobertura

Schließlich ist Cobertura zu erwähnen - dies wird in ähnlicher Weise verwendet, um die Abdeckung von Komponententests in der Codebasis zu verfolgen.

Die neueste Version von Eclipse unterstützt das Cobertura-Plugin zum Zeitpunkt des Schreibens nicht. Das Plugin funktioniert mit früheren Eclipse-Versionen.

Ebenso verfügt IntelliJ IDEA nicht über ein offizielles Plugin, mit dem die Cobertura-Abdeckung ausgeführt werden kann.

5. Schlussfolgerung

Wir haben die Integration mit Eclipse und IntelliJ IDEA für drei weit verbreitete statische Analysewerkzeuge untersucht. FindBug wurde in einer früheren Einführung in FindBugs behandelt.

Der Quellcode dieses Tutorials befindet sich im GitHub-Projekt - dies ist ein Maven-basiertes Projekt, daher sollte es einfach zu importieren und auszuführen sein.