2010-05-13 4 views
8

Ich habe mit verschiedenen statischen Analysatoren für Java experimentiert, insbesondere Findbugs und PMD.Mit welchen statischen Analysatoren können Sie Java-Code ausführen und warum?

Ich bin auf der Suche nach Beispielen für andere statische Analysatoren, die es wert sind, mit Java-Code ausgeführt zu werden.

+0

Ich habe jetzt zwei Antworten gehabt, die Findbugs vorschlagen, ich muss zugeben, dass es scheint, ziemlich gut zu sein. Ist das der allgemeine Konsens? – Finbarr

Antwort

12

Neben FindBugs und PMD gibt es auch Bandera, ESC/Java und JLint. Sie können einen Vergleich von ihnen here (PDF) finden. Hier ist ein Auszug aus Relevanz:

 
Bug Category - Example       | ESC | FindBugs | JLint | PMD 
--------------------------------------------------+-----+----------+-------+----- 
General - Null dereference      | V | V  | V | V 
Concurrency - Possible deadlock     | V | V  | V | V 
Exceptions - Possible unexpexted exception  | V |   |  | 
Array - Length may be less than zero    | V |   | V | 
Mathematics - Division by zero     | V |   | V | 
Conditional, loop - Unreachable code    |  | V  |  | V 
String - Checking equality using == or !=   |  | V  | V | V 
Object overriding - Equal objects/equal hashcodes |  | V  | V | V 
I/O stream - Stream not closed on all paths  |  | V  |  | 
Unused or duplicate statement - Unused local  |  | V  |  | V 
Design - Should be a static inner class   |  | V  |  | 
Unnecessary statement - Unnecessary return  |  |   |  | V 

Hinweis: Der Artikel aus dem Jahr 2004 ist die Werkzeuge in der Zwischenzeit verbessert worden sein.

Wie Sie sehen, Findbugs und PMD findet ziemlich viel und sind auch die beliebtesten statischen Analysetools. Einige Punkte werden heutzutage jedoch auch von einer intelligenten IDE abgedeckt, wie zum Beispiel Null-Dereferenzierung, ungenutzte Ortsnamen und unerreichbarer Code. Eclipse zum Beispiel kann auf sie warnen.

+1

Checkstyle ist auch großartig, es tut mehr als nur zu überprüfen, ob Ihr Code zu einem bestimmten Stil passt - sollte nicht von einer Liste weggelassen werden –

+0

Checkstyle ist mehr ein Stil-Checker als ein Logik-Checker. Aber wahr, es ist auch die Mühe wert. – BalusC

+0

Gute Antwort danke. – Finbarr

2

Findbugs ist so ziemlich der Standard, da es sehr robust ist (für ein Tool, das aus der Forschung gestartet wurde), regelmäßig gewartet wird und mit den neuesten Versionen wirklich die meisten Basen abdeckt. Es bietet außerdem eine hervorragende Eclipse-Integration und eine Vielzahl von Filter- und Sortieroptionen, mit denen Sie Ihr bevorzugtes Signal-Rausch-Verhältnis erreichen können.

Mein einziger Wunsch ist, dass es einen Workflow für Empfehlungen bieten könnte, so dass ich bestimmte Instanzen ignorieren konnte (z. B. für Code, auf den ich keine Kontrolle habe) und nur Änderungen sehe. Kontinuierliche Analyse wäre auch schön, wenn ich Ersatzkerne habe.

Ich kenne einige vielversprechende Forschungswerkzeuge, die statische Analyse für Dinge wie die Überprüfung der API-Konformität oder Threading-Analyse verwenden. Leider ist keine von ihnen wirklich Produktionsqualität und sie verlangen etwas Investition seitens des Entwicklers.

0

This page hat eine Liste (mit kleinen Beschreibungen) einiger Open-Source-Code-Analysatoren.

1

Ich würde vorschlagen, dass Sie den Code-Analysator in IntelliJ verwenden. Es hat über 600 Checks, die einfach ein- und ausgeschaltet werden können. Der Hauptgrund ist jedoch, dass viele Checks schnell behoben werden.

Wenn Sie nur einen Bericht ausführen, finden Sie möglicherweise 1000 oder 10.000 von markierten Problemen. Dies kann mühsam sein, wenn jedes Problem sehr wenig Wert hat, aber das Risiko besteht, dass Sie einen Fehler einführen. Mit IntelliJ können Sie jedoch Tausende von Problemen in wenigen Minuten auswählen und beheben, wobei das Risiko, einen Fehler zu verursachen, geringer ist.

Das IntelliJ CE ist Open Source und kostenlos und verfügt über diese Funktion.

Verwandte Themen