Wie man Code-Qualität mit Eclipse, Maven, Findbugs, PMD und Checkstyle erreichen kann

Heute möchte ich ein paar Worte über Code-Qualität loswerden, oder vielmehr über Tools, mit denen man Code-Qualität fördern kann. Und da das Thema für mich irgendwie so einen typisch deutschen Charakter hat, gibt es den Eintrag heute mal in deutsch. Nicht das man in anderen Ländern nicht auch auf Qualität achten würde, aber in Deutschland hat man meiner Meinung nach schon einen sehr starken hang zu Qualitätsmaßnahmen und formalen Methoden um diese zu spezifizieren und zu verifizieren.

Nun aber zum Inhalt, die Idee ist es ein paar Tools, welche die Code-Qualität enorm verbessern können, mittels Maven so in ein Projekt zu integrieren, dass eine Reihe von Tools automatisch bei den Entwicklern in der Eclipse IDE eingebunden werden. Voraussetzung hierzu ist natürlich, dass zum einen das Projekt auf Maven basiert und zum anderen, dass Eclipse als IDE verwendet wird.

Die Tools die hierbei eingebunden werden sollen sind: Checkstyle, Findbugs und PMD. Ersteres prüft Source-Code auf Styling-Conventions hin und die beiden letzteren führen eine statische Code-Analyes durch um eine Reihe bekannter Quellen für Bugs im Source-Code aufzudecken. Zu allen drei Tools existieren Eclipse-Plugins, die sich jeder Entwickler zunächst in seiner IDE installieren muss. Der Installationsprozess soll hier kein Thema sein, sondern vielmehr die Konfiguration von Maven um die Tools automatisch mit in die Eclipse Projektkonfiguration aufzunehmen. Alle Tools können auch direkt in den Maven-Build integriert werden, und dies ist auch in jedem Fall zu empfehlen. Es hat sich jedoch gezeigt, dass die wenigsten Entwickler regelmäßig auf den Build-Server gehen und sich die jeweiligen Reports ansehen. Daher die so wichtige Integration direkt in die Entwicklungsumgebung.

Nachdem die Plugins erfolgreich in Eclipse installiert wurden, muss das Projekt POM angepasst werden. Wer ein allgemeines Parent POM hat, dass von allen Projekten verwendet wird, kann die Anpassungen gleich hier vornehmen, so gelten sie in Zukunft für alle Projekte. Für das Erstellen der Eclipse-Projekt-Konfiguration ist das Maven-Eclipse-Plugin zuständig, und eben jenem Plugin müssen lediglich die drei zusätzlichen Projectnatures sowie Buildcommands hinzugefügt werden.

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-eclipse-plugin</artifactId>
            <configuration>
                <additionalProjectnatures>   
                    <nature>net.sf.eclipsecs.core.CheckstyleNature</nature>
                    <nature>edu.umd.cs.findbugs.plugin.eclipse.findbugsNature</nature>
                    <nature>net.sourceforge.pmd.eclipse.plugin.pmdNature</nature>
                </additionalProjectnatures>
                <additionalBuildcommands>
                    <name>net.sf.eclipsecs.core.CheckstyleBuilder</name>
                    <name>edu.umd.cs.findbugs.plugin.eclipse.findbugsBuilder</name>
                    <name>net.sourceforge.pmd.eclipse.plugin.pmdBuilder</name>
                </additionalBuildcommands>
            </configuration>
        </plugin>
    </plugins>
</build>

Wird nun das Maven-Eclipse-Plugin von einem Entwickler aufgerufen, und das Projekt anschließend in Eclipse importiert, verwendet dieses automatisch die drei Plugins für Checkstyle, Findbugs und PMD. Wer zusätzlich die Konfiguration zu den jeweiligen Tools anpassen und für alle Entwickler gesamtheitlich hinterlegen möchte, fügt ein paar weitere Zeilen in der Maven-Eclipse-Plugin Section hinzu. Exemplarisch sei hier gezeigt, wie eine Checkstyle-Konfiguration, die auf einem für alle Entwickler erreichbaren Server hinterlegt ist, eingebunden werden kann. Das Einbinden weiterer Konfigurations-Dateien erfolgt analog, Details zur Erstellung dieser Dateien finden sich auf den jeweiligen Tool Homepages.


    </additionalBuildcommands>
    <additionalConfig>
        <file>
            <name>.checkstyle</name>
            <content>
            <![CDATA[<?xml version="1.0" encoding="UTF-8"?>
            <fileset-config file-format-version="1.2.0" simple-config="true">
                <local-check-config name="meine-checkstyle-checks" location="http://someserver/somepath/checkstyle-config.xml" type="remote" description="">
                    <additional-data name="cache-file" value="false"/>
                </local-check-config>
                <fileset name="all" enabled="true" check-config-name="meine-checkstyle-checks" local="true">
                    <file-match-pattern match-pattern="." include-pattern="true"/>
                </fileset>
            </fileset-config>]]>
            </content>
        </file>
    </additionalConfig>
</configuration>

Das war auch schon alles, von nun an bekommt jeder Entwickler direkt in seiner IDE angezeigt, wenn er gegen Style-Conventions verstößt, oder potenzielle Fehlerquellen in den Source-Code einbaut. Die so erzeugten Informationen gehen also nicht irgendwo auf dem Build-Server verloren.

Nochmal in der Übersicht:

1. Plugins in Eclipse installieren
2. Project-Nature und Buildcommands in POM eintragen
3. Individuelle Konfigurationen zur Verfügung stellen und ebenfalls im POM verlinken