Beiträge von Tino Schmidt

07Okt

Integration von PMD Rule Sets in den Build Prozess.

Teil I

Das im ersten Beitrag erwähnte Maven Plugin ‘PMD‘ soll nun genauer vorgestellt werden.
Nachdem man das Maven Plugin installiert hat und die Einstellungen

maven.pmd.failonerror=true
maven.pmd.failonruleviolation=true

in der project.properties Datei eines Maven (1) Projektes vorgenommen hat, kann der Test der Sourcen des Projektes durch den Aufruf maven pmd:report gestartet werden.

Das PMD Plugin enthält eine Menge verschiedener Regeln, an Hand derer der Source Code analysiert wird [Übersicht der PMD Rule Sets und Rules]. Dazu zählen Regeln, die beispielsweise in Gruppen wie Basic, Code Size, Design oder Strings zusammengefasst sind.

Wenn man einen PMD Report erstellt und keine weiteren Einstellungen an der project.properties Datei vorgenommen hat, werden alle Regeln, die in dem Plugin bereits enthalten sind, angewendet. Bei einem größeren Software Projekt, bei dem noch keine Metriken verwendet wurden, werden dann mit großer Wahrscheinlichkeit Hinweise ausgegeben.

Um in einen gewachsenen Software Projekt die Integration des PMD Plugins durchführen zu können bietet sich die Möglichkeit an, eigene Regeln zu definieren. Dies ist sehr einfach möglich.

Es genügt, eine eigene ruleset.xml Datei zu erstellen, in der dann die Regeln aufgenommen werden [Rahmen dieser Datei]. Die erstellte Datei wird in den project.properties unter dem Key maven.pmd.rulesetfiles registriert:

maven.pmd.rulesetfiles=${basedir}/ruleset.xml

Es gibt drei Möglichkeit, wie man eigene Regeln in der Datei aufnehmen kann:

1. Referenzieren eines PMD Rule Sets
Die Regeln des PMD Plugins sind in Gruppen (Sets) zusammengefasst. Durch den Eintrag

<rule ref=”rulesets/basic.xml
  message=”Handle all basic rules” />

in der ruleset.xml werden beim Erstellen des PMD Reports alle Regeln angewendet,
die in dieser Gruppe (basic) zusammengefasst sind.

2. Referenzieren einer PMD Rule aus einem PMD Rule Set
Es ist auch möglich, direkt einzelne Regeln eines Rule Sets zu definieren.

<rule ref=”rulesets/basic.xml/EmptyCatchBlock
  message=”Must handle exceptions” />

Im Beispiel handelt es sich um die Regel, die überprüft, ob im analysierten Source Code leere Catch Blöcke vorkommen.

3. Eigene Regeln erstellen
Eigene Regeln können mit Hilfe von Java und der Implementierung von Klassen erfolgen, die z.B. die Klasse AbstractRule erweitern. Neben dem Schreiben eigener Java Klassen ist es auch möglich, XPath Expressions zu verwenden, um Regeln zu hinterlegen. Für beide Fälle ist eine Einführung hier zu finden.

Technorati Tags: , ,

29Sep

Maven basierte Build-Prozesse haben sich in den letzten Jahren zunehmend zur Erzeugung der Entwicklungs- und Releasemodule etabliert. Neben dieser Aufgabe bieten sie auf sehr einfacheWeise die Möglichkeit, Reports (z.B. JUnit, PMD, u.a.) und Dokumentationen (Java Doc) der Softwaremodule zu erzeugen.

Vor allem die Checkstyle, PMD und FindBugs - Reports stellen wichtige Informationen bereit, die Aufschluss über die Qualität des Source Codes bieten. Letztendlich enthalten sie Richtlinien oder Wissen zu bestimmten Problemstellen im Source Code.

Da die Entwicklungszeiten in den Softwareprojekten knapp sind bleiben die per Nightly Build erzeugten Reports meist ungenutzt. Die manuelle Auswertung vor allem in der heißen Phase vor der Fertigstellung der Softwareprojekte wird meist aus Zeitgründen nicht mehr ausgeführt. So bleiben wichtige “Ratschläge” der Reports unberücksichtigt und potentielle Fehlerquellen werden mit in den Wirkbetrieb der Softwaremodule übernommen.

Um kontinuierlich von den Reports zu profitieren suchten wir nach einer Möglichkeit, die Ergebnisse der Reports automatisch zu berücksichtigen. Da bereits die technische Infrastruktur durch einen Continuous Integration Server vorhanden war und die Softwaremodule beim Einchecken durch die Entwickler gebaut wurden, lag die Unterbrechung des Builds im Fehlerfall am nächsten.

Und genau dafür bieten die genannten Maven Plugins (getestet mit Maven1) die Möglichkeit, den Buildprozess beim Auftreten von Fehlern zu unterbrechen.

PMD
maven.pmd.failonerror=true
maven.pmd.failonruleviolation=true

CheckStyle
maven.checkstyle.fail.on.violation=true

FindBugs
maven.findbugs.failOnError=true

Während man die Art der durchzuführenden Tests im Fall des PMD und FindBugs-Plugins sehr fein bestimmen kann, fehlt diese Abstufung im Falle des Checkstyle Plugins. In den kommenden Beiträgen wird mehr über die Konfiguration und die Möglichkeiten der Plugins zu lesen sein.

Technorati Tags: , , ,