Autorenarchiv

Bugs vermeiden

Freitag, 13. Juni 2008

Das Code-Review Tool PMD [1] kann als starker Partner an der Seite eines Programmierers eingesetzt werden. Natürlich versucht der Entwickler immer konzentriert alles richtig zu machen und keine Fehler einzubauen – leider gelingt es aber nicht immer, fehlerfreien Code zu schreiben. Hier kommen kleine Helfer wie PMD zum Einsatz, die den Entwickler unterstützen, indem sie nach typischen Fehlermustern suchen.
PMD durchsucht anders als andere Tools den Source-Code (nicht die compilierten Klassen) nach potenziellen Gefahrenquellen. Ein Beispiel ist das Muster des “MissingBreakInSwitch” – Es wird darauf hingewiesen, dass in einem case Zweig einer Switch-Anweisung kein break zu finden ist.
Die Regeln unterstützen neben dem Auffinden von Bugs, auch das Einhalten von OO-Prinzipien. Als Beispiel sei “LooseCoupling” genannt: es wird gefordert, mit Interfaces (wie List) und nicht mit Implementation (wie ArrayList) zu arbeiten.
Ein weiterer Punkt, in dem PMD dem Entwickler unter die Arme greift, ist die Lesbarkeit des Codes:
“ConfusingTernary” – in einem If-Audruck sollte der Testausdruck nicht negiert sein, da dies die Lesbarkeit mindert, wenn noch ein else folgt, z.B.:

if (!list.isEmpty()) {
    this.doSomething();
} else {
    this.doSomethingElse();
}

läßt sich nicht so fließend lesen wie

if (list.isEmpty()) {
    this.doSomethingElse();
} else {
    this.doSomething();
}

PMD kann individuell verschieden genutzt werden – einerseits als Tool, was immer mal wieder während der Implementation ausgeführt wird, andererseits kann es auch fest in einen Buildprozess integriert werden (z.B. Ant, Maven), um Fehlerquellen zu reporten oder sogar um den Build scheitern zu lassen.
Letzteres kann durch das Anpassen der Fehlerpriorität erreicht werden, so dass das Nicht-Einhalten einer Regel quasi zu einem Compilerfehler führt.
Ebenfalls lässt sich PMD in der Auswahl der zu prüfenden Regeln an die eigenen Bedürfnisse anpassen – so ist es z.B. nicht notwendig gegen J2EE Regeln prüfen zu lassen, wenn diese nicht relevant bzw. sogar störend für das aktuelle Projekt sind.

Für eine manuelle Prüfung des Codes bietet sich das Eclipse-Plugin [2] an. Hiermit können selbstgewählte “Pakete” durchsucht werden – ganze Projekte bis hin zu einzelnen Klassen.

Eclipse-Plugin

Nach der Installation des Eclipse-Plugins [2] kann es wie gewohnt über Window ->Preferences -> PMD für den gelegentlichen Einsatz konfiguriert werden.

Wie oben schon erwähnt, lassen sich die anzuwendenden Regeln einzeln auswählen und die Prioritäten auf die verschiedenen Bedürfnisse anpassen.
Sehr hilfreich für eine firmenweite Verteilung ist die Ex- und Import-Funktion. Hierüber können beispielsweise die von PMD bereitgestellten RuleSets geladen und dann als eigener Satz exportiert werden.

Zum Einsatz bringen kann man PMD über das Context-Menü der verschiedenen Resourcen – Projekt, Package, Klasse – durch die Auswahl von PMD -> Check Code With PMD. Eine Auswertung findet dann in einem Extra Tab statt, in dem die gefundenen potentiellen Fehler z.B. nach Priorität und Klasse aufgelistet werden. Zu den Regelverstößen ist auch eine Beschreibung verfügbar, die teilweise Hinweise gibt, wie das “Problem” zu lösen ist.

Weiteres

Für PMD können auch neue Regeln erstellt bzw. die existierenden modifiziert werden – es sei auf [1] verwiesen.
Neben PMD gibt es diverse weitere Code-Review Tools (z.B. FindBugs), die einem die “Käfer” vom Leib halten helfen.

[1] http://pmd.sourceforge.net/
[2] http://pmd.sf.net/eclipse


Andreas Siepert


Eclipse – Save Actions

Montag, 21. April 2008

In der Entwicklungsumgebung Eclipse gibt es einige Features, die mancher Entwickler zu schätzen weiß, so er sie denn auch entdeckt hat – dazu zählen z.B. die Save Actions, die in diesem Artikel vorgestellt werden.

Save Actions sind, wie es der Name erahnen läßt, Aktionen, die mit dem Speichern einer Java-Datei ausgeführt werden. Zu finden ist die Konfiguration entweder unter dem Menüpunkt Window -> Preferences… -> Java ->Editor -> Save Actions oder im Kontextmenü eines Projektes unter Properties -> Java Editor -> Save Actions. Über den zweiten Weg lassen sich nur die projektbezogenen Einstellungen ändern, nicht die globalen.
Die ersten beiden Punkte Format source code und Organize imports tun genau das, was zu erwarten ist: Den Code entsprechend dem vorgegebenen Code Style Formatter zu formatieren bzw. die Importanweisungen entsprechend dem Code Style zu ordnen. Beide können unter Code Style angepasst werden. Sehr interessant ist der Punkt Additional actions unter dem diverse Regeln zur Code-Änderung selektiert werden können. Hier ein Beispiel:
Wie gerne spart man sich die Klammerung einzeiliger Anweisungen nach einem if-Statement? Durch Aktivierung der entsprechenden Regel wird folgende Änderung im Code durchgeführt:

//vorher
if (condition)
    doSomething();
//nachher
if (condition) {
    doSomething();
}

Zur Warnung sei gesagt, dass es nicht unbedingt sinnvoll ist, alle Regeln zu aktivieren, da sie eventuell zu unerwünschten Änderungen führen können – ein Beispiel sind die Regeln unter Unnecessary Code: Sind diese Regeln aktiviert, könnte folgendes passieren: Wird zum Testen eine Code-Passage auskommentiert, so werden nur dort benutzte Variablen und Importe ungewollterweise entfernt – meist ist dies aber erst festzustellen, wenn nach dem Reaktivieren der Codepassage der Compiler Fehler meldet. Desweiteren sollten die Save-Actions natürlich mit dem Code Style des Projektes harmonieren.

Ein weiterer Aspekt, der bei der Einführung von Save Actions bedacht werden sollte: Wird das nützliche Tool erst später in einem Projekt aktiviert, so wird es sehr wahrscheinlich zu Problemen beim Nachvollziehen von “echten” Code-Änderungen zwischen zwei Versionsständen geben.

Save Actions gibt es seit der Eclipse Version 3.3 (Europa)


Andreas Siepert