FindBugs
Der dritte im Bunde der „magischen drei“ ist FindBugs. FindBugs hat eine fantastische Fehlererkennung. Wir hatten intern bereits öfter Diskussionen zu den angezeigten Meldungen und mussten im Allgemeinen am Ende immer die Meldungen von FindBugs bestätigen. Im Gegensatz zu den anderen Tools analysiert FindBugs den Byte-Code.
Besonderheiten
- bestes Werkzeug für Fehlerprüfungen (NPE, …)
- Prüfung logischer Ausdrücke
Integration
- IDE
- Maven-Build (Ausführung und Erzeugen von Basisdaten)
- Jenkins (GUI und Grenze für ungültige Artefakte)
Ein (einfacher) SVN Pre-Commit Hook Einsatz ist hier natürlich nicht möglich, da FindBugs den Byte-Code analysierert, der erst erzeugt werden müsste.
False/Positive
- Parametrisierung
- Codestellen über Annotation von der Prüfung ausschließen
- Ausschluss von Projekten / Packages
Regelerweiterung
- Externe Erweiterungen: z.B. Security Regeln http://find-sec-bugs.github.io/
- Eigene Regeln in Java mit Wissen über ByteCode erstellen
- https://www.ibm.com/developerworks/library/j-findbug2/
Beispiel Blacklist für Regeln
<?xml version="1.0" encoding="UTF-8"?>
<FindBugsFilter>
<Match>
<Bug code="EI,EI2,Se,SECSQLIJPA,SECHCP,SECPTI,SECCI,SECPTO,SECUR" />
</Match>
<Match>
<Class name="~.*\.R\$.*" />
</Match>
<Match>
<Class name="~.*\.Manifest\$.*" />
</Match>
</FindBugsFilter>
Stand bis hierher
Mit den bis hier vorgestellten Werkzeugen haben wir die Pflicht der QS sichergestellt. Mit der Grundausstattung Open Tasks, FindBugs, PMD und Checkstyle können eine Vielzahl technischer Schulden vermieden und automatisch gefunden werden. Die Regeln sind bei allen Tools konfigurierbar und können sukzessive eingeführt werden.
Aus meiner Sicht sollte niemand auf dies Tools verzichten. Wenn im aktuellen Projekt noch zu viele Probleme existieren, kann mit kleinen Regelsätzen gearbeitet werden. Wenn die Integration in den Build-Prozess nicht möglich ist, können die Werkzeuge auch nur in der IDE eingesetzt werden.