Architektur prüfen mit CodeCity


Flattr this
Wie an den meisten Wochenenden schmökere ich gerade wieder in den Fachzeitschriften. Am liebsten im JavaMagazin und dort habe ich in der Ausgabe 10/2010 einen interessanten Artikel gefunden.

Worum geht es?

Es geht darum die Kodequalität in Form einer Stadt zu visualisieren. Die Idee ist genial einfach. Packages werden zu Stadtbezirken, Klassen zu Häusern und Methoden zu Etagen. Die Grundfläche eines Hauses wird aus der Anzahl der Attribute einer Klasse abgeleitet. Damit ist klar was passiert. Klassen mit vielen Attributen besitzen große Grundflächen, Klassen mit vielen Methoden sind sehr hoch. Die Stadt wird zunächst einfarbig in blau gehalten. Um so mehr Lines of Codes ein Artefakt (Klasse, Methode) besitzt um so heller wird das blau. Historiendaten sollen auch ausgewertet werden können. Eine entfernte Methode wird als Loch im Gebäude dargestellt. Zusätzlich lassen sich spezielle Problemfelder (God Class, Data Class, Brain Class, Brain Method, Feature Envy und Shotgun Surgery)  benutzerdefinierten Farben zuordnen.

Was bringt es?

Was bringt das Ganze? Bestehende Großprojekte mit schlechter Wartbarkeit einem Codereview zu unterziehen, um jene Stellen zu finden welche wirkliche Probleme darstellen, dauert lange. In der Regel werden mehrere Personen herangesetzt, es sind tausende von Kodezeilen zu sichten. Jede Person hat eine leicht andere Meinung zur gerade betrachteten Kodestelle und in der verfügbaren Zeit kann unmöglich jeder Kodeabschnitt vollständig durchdacht werden. Letztlich geht es darum die wichtigsten Punkte für die Refaktorierung zu finden. Das geht mit CodeCity deutlich schneller. Alle Kodezeilen werden analysiert und in eine grafische Struktur gebracht. Abweichungen von einer regelmäßigen Struktur lassen sich so schnell erkennen und können dann gezielt analysiert werden. Dieses Vorgehen sollte eine deutlich effizientere Analyse bestehender Großprojekte ermöglichen.

Wie geht es?

Jetzt zum praktischen Teil. Natürlich wollte ich es sofort ausprobieren. Dazu benötigen wir inFusion und CodeCity. Diese laden wir uns zunächst aus dem Internet herunter. Beide habe ich unter Windows jeweils in ein eigenes Verzeichnis entpackt und die Startdateien mit einem Shortcut auf den Desktop gelegt. Das Startprogramm von inFusion nennt sich infusion.bat und das von CodeCity einfach codecity.exe.

Zunächst müssen wir inFusion starten um den Kode unseres Projektes analysieren zu lassen. Infusion startet und zeigt folgenden Dialog an.

Startscreen von Infusion

Infusion Start

Oben rechts in der Ecke das 2. Piktogramm von rechts öffnet einen Dialog über den wir unsere Projekt Sourcen auswählen können.

Dialog zum Auswählen der Java Quellen

Ich habe mir die Quellen des Gui4j Projektes ausgecheckt. Kann sein, dass ich aus Versehen lokal ein paar Änderungen vorgenommen habe. Das weiß aber ich nicht. Ist für unseren Test auch nicht weiter wichtig. Im Dialog den Ordner suchen in dem die Java Dateien abgelegt wurden. Im Beispiel ist es src, bei Projekten die per Maven gebaut werden ist er standardmäßig unter src/main/java zu finden. Den Dialog wie erwartet dann über die Load Schaltfläche schließen.

Die Analyse wird sofort durchgeführt

Wir sehen im unteren Teilfenster den src Ordner durch einen blauen Balken ausgewählt. Genau dort rufen wir per Rechtsklick auf die Maus ein Kontext Menü auf und exportieren die Daten über die Option Run Tools …/FAMIX 2.1 MSE Exporter. Ich habe mich für diese Option entschieden, da die 3.0 von der CodeCity Version 1.4 nicht fehlerfrei eingelesen werden konnte.

Das File bitte auf .mse enden lassen.

Export mit FAMIX 2.1 MSE Exporter

Die Analyse wäre damit erledigt. Generell kann man auch jetzt schon diverse Probleme feststellen. Schöner geht das aber evtl. mit der angestrebten Stadt. Diese bauen wir nun indem wir CodeCity starten.

Startscreen von CodeCity

Nach dem Start von CodeCity erscheinen drei Fenster. Wir benötigen das oben dargestellte um unseren MSE Export zu laden. Dazu Betätigen wir die Schaltfläche „an MSE file…“. Gleich darauf erfolgt das Einlesen der MSE Datei und dessen Verarbeitung. Als Ergebnis erscheint ein neuer Listeneintrag. Im Beispiel gui4j benannt (vermutlich einfach der Name der Exportdatei).

Quellen wählen und auf City drücken

Diesen Listeneintrag wählen wir aus und Betätigen dann die Schaltfläche „City„. Nun erscheint das Fenster mit unserer Stadt.

Eine farbenfrohe Stadt nach Auswahl aller Disharmonien

Wenn wir in diesem Fenster das Radioaktivitäts-Symbol betätigen und im sich öffnenden Dialog alle Auswahlboxen selektieren, dann wird unsere Stadt so farbenfroh wie hier dargestellt. Durch das Hinwegbewegen des Mauszeigers über interessante Bereiche, wird in der rechten oberen Ecke der Detailbereich aktualisiert. Hier lässt sich leicht ablesen wieviel Kodezeilen oder wieviel Methoden die Klasse besitzt und ähnliches.

Durch die Stadt bewegen ist auch möglich. Auf folgende Tasten wird im Artikel hingewiesen:

Zeichen Aktion
W, S Zoom
A, D Verschiebung waagerecht
Strg + Pfeil hoch/runter Rotation um die Horizontale
Strg + Pfeil links/rechts Rotation um die Vertikale
Taste + Shift Aktionen in kleineren Schritten ausführen

Zum Abschluss noch die im Artikel erwähnten Quellen:

  1. http://www.bibsonomy.org/bibtex/204bd07ba7388ba1edfc97617ca75d139/funthomas424242
  2. http://www.bibsonomy.org/bibtex/2377e6c82a1417ed9bfe494ce578bffdd/funthomas424242
  3. http://www.bibsonomy.org/bibtex/24d513cc73eb3a2f3e55295e595935c49/funthomas424242
  4. http://www.bibsonomy.org/bibtex/2587bde0b7ffa5d7fd9e9940eba7a4d58/funthomas424242
  5. http://www.bibsonomy.org/bibtex/29952e80cf589274cc96e02e67210a9c5/funthomas424242
  6. http://www.intooitus.com/infusion/download/inFusion.zip
  7. http://www.inf.usi.ch/phd/wettel/codecity-download.html
  8. http://www.inf.usi.ch/phd/wettel/codecity-tutorials.html
  9. http://www.inf.usi.ch/phd/wettel/activities.html

An dieser Stelle vielen Dank an Richard Wettel, der CodeCity erschaffen hat und natürlich auch an alle anderen Contributoren der beiden Programme inFusion und CodeCity.

Dann viel Spass beim Städtebau.

Post a comment or leave a trackback: Trackback URL.

Kommentare

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: