Statische Code Analyse #2: FindBugs Neu

  • FindBugs analysiert mit Hilfe von Statischer Codanalyse den Bytecode eines Programms um mögliche Fehler zu finden, bevor diese überhaupt zu Stande kommen können. Fehler können einfach vermieden werden, in dem man sich an verschiedene Praktiken hält. Dieses unterstützt die die Statische Codeanalyse mit verschiedenen Tools.
    Eines davon ist FindBugs, welches ich in diesem Lexikoneintrag ein bisschen näher erläutern werde.

    Fehler im Quellcode hat selbst der beste Entwickler. Aber einiger dieser Fehler lassen sich natürlich auch schon im Voraus vermeiden.

    Eine große Fehlerart sind die Null-Values (oder auch "dead store" genannt) auf welche ich hier ein bisschen genauer eingehen werden. Hier kommt die statische Codeanalyse in den Vordergrund, die genau auf diese Aspekte ausgerichtet ist. Dieser Lexikoneintrag wird in einigen kleinen Aspekten auf meinen vorherigen Eintrag (Statische Code Analyse #1: Cyclomatic Complexity) aufbauen.


    1 Was ist eigentlich FindBugs?

    FinsBugs ist eine Software, die im Byte-Code des Quellcodes nach Fehlermustern sucht. Solche Fehlermuster deuten oft auch tatsächliche Fehler hin.

    Dabei kann das Analysetool duzend von möglichen Fehlern schon im Voraus erkennen, bevor die überhaupt durch Testen entdeckt werden können.

    FindBugs unterstützt eine relativ große Anzahl an Pattern, welche getestet werden.


    2 Entdecken von Fehlern

    Um einen möglichen Fehler zu finden, brauchen wir natürlich wieder erst einmal ein Stück Quellcode. Im Folgenden habe ich 3 kleine Fehler eingebaut, welche die IDE nicht von sich aus als Fehler betrachtet, aber dennoch Fehler sind.

    Fangen wir mal mit dem ersten Fehler an, welcher sich sogar schon in der Methode everyTimeTrue() versteckt. Eine Boolean Objekt auf null zu setzten wird als Bad Practice angesehen. Booleans sollen laut Dokumentationen immer nur den Wert false oder true haben.

    Der zweite Fehler ist der schon erwähne Null-Value Fehler. [ref][/ref]this.getArgument() liefert null zurück und wir versuchen im Nachhinein auf eine weitere Methode von null zuzugreifen. Die IDE denkt, dass es sich hier um einen String handelt, berücksichtigt aber nicht, dass der String auch null sein könnte.

    Der letzte Fehler findet sich im Casten von eines Longs zu einem Int wieder (int smallerNumber = (int) bigNumber;). Ein Integer hat eine Maximale Größe von 232. Ein Long hingegen kann die doppelte Größe von Zahlen beinhalten 264.

    Was ist also nun, wenn wir versuchen ein große Kiste in eine kleine Kiste zu strecken? Genau, sie passt nicht und die kleine Kiste geht kaputt. Das gleiche passiert auch in der Programmierung, nur dass das Programm an dieser stelle abstürzen wird.

    3 Einbindung in IntelliJ IDEA

    Wie schon im vorherigen Lexikoneintrag erwähnt, werde ich hier wieder nur auf die Einbindung in den Jetbrains IDE's eingehen. Für Eclipse und weitere IDE's gibt es natürlich ach Addons zu downloaden.Das Plugin um welches es sich hier handelt ist FindBugs-IDEA. Dieses kann man sich über den eingebauten Marketplace downloaden oder über die verlinkte Webseite.


    Nach dem Installieren und Neustarten der IDE kann dieses auch schon benutzt werden.

    Einfach mit einem Rechtsklick in einer geöffneten Datei das Menü Analyze -> FindBugs -> Analyze Current File auswählen und schon geht die Analyse los.

    Daraufhin bekommen wir in einer schönen Übersicht den Report angezeigt, welche möglichen Fehler gefunden wurden.


    Quellen

    http://findbugs.sourceforge.net/

    https://de.wikipedia.org/wiki/FindBugs

    https://spotbugs.readthedocs.i…l-bug-reports-for-a-class

Teilen