Was ist SonarQube?

SonarQube ist eine Server-Anwendung, mit der die Qualität des Codes von Software-Projekten überprüft werden kann. Dabei werden viele Programmiersprachen unterstützt und es gibt für jede Sprache ein große Anzahl an Regeln, die überprüft werden. Regeln können dabei auch deaktiviert werden.

Ich will dieses Tool einsetzen, um meine Java-Projekte (JFXLibrary, JInfoViz und ThemeRiver) schrittweise auch von der Code-Qualität zu verbessern.

Installation und Start des Servers

Ich habe SonarQube auf Ubuntu Linux installiert und bin dabei folgendermaßen vorgegangen.

Wenn man mit der Analyse auf SonarQube fertig ist, kann man den Server wieder stoppen, in dem man im Terminal ./sonar.sh stop ausführt.

Eine Projekt-Analyse mit Ant starten

Da meine Projekte keine Maven-Projekte sind, sondern mit Ant kompiliert und gestartet werden, brauchte ich keine Projekte am SonarQube Server anlegen, sondern ging wie folgt vor:

In weiterer Folge legte ich für jedes meiner Projekte eine Datei an mit dem Namen build.xml_<ProjektName>. Diese Dateien hatten folgenden Inhalt:

      
      
          [ProjektName]
      

      
      <property name="sonar.host.url" value="http://localhost:9000" />
      
      <property name="sonar.projectKey" value="org.sonarqube:sonarqube-scanner-ant" />
      <property name="sonar.projectName" value="[ProjektName]" />
      <property name="sonar.projectVersion" value="1.0" />
      <property name="sonar.sources" value="[ProjektName]/src" />
      <property name="sonar.java.binaries" value="[ProjektName]/build" />


      
      

          
              
              <classpath path="sonar/sonarqube-ant-task-2.7.0.1612.jar" />
          


          
          <sonar:sonar />
      
    

Die Property <property name="sonar.java.libraries" value="lib/*.jar" /> musste ich entfernen, weil ich keine *.jar-Dateien habe, die ich referenziere und somit kam bei der Analyse die Exception java.lang.IllegalStateException: No files nor directories matching 'lib/*.jar'.

Leider konnte ich in meiner bestehenden Konfiguration die Analyse nicht auf den SVN Checkouts durchführen, weil SonarQube SVN erkannt hat, und BLAME-Informationen abrufen wollte, die aber bei meiner Konfiguration nicht unterstützt wurden. Es kam daher bei mir immer der Fehler java.lang.IllegalStateException: Error when executing blame for file Caused by: org.tmatesoft.svn.core.SVNException: svn: E200007: Retrieval of mergeinfo unsupported by

In weiterer Folge habe ich mir ein Skript für jedes Projekt geschrieben, das folgende Schritte ausführt:

Ablauf zur Aktualisierung der Projekt-Analysen

Nachdem alles eingerichtet worden ist, braucht man dann nur noch folgende Schritte durchführen, um die SonarQube-Analysen der Projekte zu aktualisieren.

Bei meiner Community Version von SonarQube wird immer nur die letzte Analyse angezeigt und es sieht für mich auch so aus, als könnte ich keinen automatisierten Bericht rausschreiben. Daher habe ich mir im nächsten Abschnitt Gedanken darüber gemacht, wie ich den Fortschritt der Code-Qualität meiner Projekte am besten aufzeichne.

Aufzeichnung der Code-Qualität

Ich habe mir eine Excel-Datei (hier zum Download) erstellt. Diese besteht aus zwei Arbeitsblättern. Auf dem ersten Namens Daten habe ich für jede Analyse eine Zeile eingetragen mit einem Datum. In den Spalten befinden sich die Werte, der für mich wichtigen Daten. Im zweiten Arbeitsblatt namens Differenzen befinden sich für jeden Wert die Differenz zwischen zwei aufeinanderfolgenden Analysen. Wurden die Werte schlechter so sind sie rot eingezeichnet.

Im folgenden noch eine kurze Aufstellung der Spalten: