Simon Koelsch coding software, using gadgets

19Okt/09Off

FindBugs – Eclipse Plugin zur Fehlererkennung

FindBugs ist ein Eclipse Plugin um häufig gemachte Fehler in seinem Quellcode zu finden. Entstanden ist dieses Projekt an der University of Maryland und wurde inzwischen nach eigenen Angaben ueber 700.000 mal heruntergeladen.
Um Fehler zu finden wird der Bytecode der kompilierten Java Klassen auf auffälligen Muster untersucht, welche haeufig auf einen Fehler schliessen lassen.

Das Plugin bringt dazu selbst im Moment 369 sogenannter "Bugpattern" mit. Eingeteilt sind diese Pattern in folgende Kategorien:

  • Bad Practice
  • Correctness
  • Experimental
  • Internationalization
  • Malicious code vulnerability
  • Multithreaded correctness
  • Performance
  • Security
  • Dodgy

In der Konfiguration ist es dann möglich, die einzelnen Pattern an/abzuwählen, nur schnelle Pattern prüfen zu lassen, das Reporting nach Kategorien zu beschränken oder mit Filtern spezielle Dateien von einer Pruefung auszuschliessen.

Hier ein kurzes Code Beispiel:

String str = new String("foo");
String str2 = new String();
if (str == str2) {
// ...

FindBugs kritisiert hier den String-Vergleich, welcher wahrscheinlich ueber die Equals-Methode des Strings gemacht werden sollte. Auch ist der explizite Aufruf des Konstruktors der Stringklasse in der ersten Zeile überflüssig.

Ein Beispiel für häufige Nullpointer Exception Fehler:

User user = Map.get("id3345");
if (user != null) {
user.refresh();
}
String pwd = user.getPassword();

Hier wird ausserhalb der Bedingung auf ein eventuell nicht vorhandenes Objekt zugegriffen. FindBugs markiert die entsprechende Stelle dann mit einer Warnung.

Implementiert eine Klasse das java.util.Iterator Interface ohne eine NoSuchElementException zu werfen, wird auch diese Klasse als Fehlerhaft makiert. So gibt es eine Unmenge an weiteren Beispielen im Handbuch, welches alle Pattern dokumentiert.

Wem die vorhanden Pattern nicht reichen, der kann relativ einfach selbst eigene Pattern erstellen und mit FindBugs benutzen. So lassen sich zum Beispiel auch Fehler in der falschen Benutzung von eigenen Frameworks finden. Chris Grindstaff von IBM hat ein kleines Tutorial dazu geschrieben: Writing custom bug detectors.
fb-contrib ist eine offene Sammlung eigener Pattern.

FindBugs muss übrigends nicht zwingend als Eclipse Plugin benutzt werden. Es gibt eine eigene GUI dafür und wer will kann es sogar als Ant-Task in seinem Deploymentprozess nutzen. Auch für Maven und Maven 2.0 gibt es inzwischen ein entsprechendes Plugin.
Hier ist der Download zu finden.
Plugin only: http://findbugs.cs.umd.edu/eclipse ist die offizielle Update Seite fuer den Eclipse Plugin Manager.

Kommentare (0) Trackbacks (0)

Die Kommentarfunktion ist hier derzeit deaktiviert.

Trackbacks are disabled.