Softwarearchitektur bestehender Projekte leicht visualisieren

13. September 2018

Schonmal den Überblick im eigenen Code verloren? Oder jemanden dafür verflucht, dass er seinen Code nicht verständlicher dokumentiert hat? Gerade wenn verschiedene Leute an einem Projekt zusammenarbeiten, ist Dokumentation etwas sehr Wichtiges. Aber nicht nur dann: Auch, wenn das Projekt sehr umfrangreich ist oder man nach längerer Zeit einen Bug fixen möchte, hilft es, sich in dem Projekt schnell (wieder) orientieren zu können. Und zwar auch den Entwicklern, die den Code geschrieben haben.

Klar, es gibt die Docs. Zum schnellen Einstieg empfiehlt es sich aber insbesondere, einen visuellen Überblick über die Softwarearchitektur des jeweiligen Projekts zu haben. Welche Klassen, Strukturen und Protokolle verwenden wir? Wie sind sie miteinander verknüpft? Was wir brauchen, ist ein Abhängigkeitsdiagramm des aktuellen Projektstatus.

Dafür gibt es mehrere großartige Tools, die ein Projekt als Grafiken oder Diagramme darstellen können:

  • Swift Relationship Graph 7
  • Swift Auto Diagramm 6

Leider weisen beide der genannten Programme Nachteile auf: Swift Relationship Graph 7 bietet keine interaktive Schnittstelle und zeigt nur die hierarchischen Beziehungen (Protokolle/Vererbung) an. Swift Auto Diagramm 6 ist sogar noch in der Beta-Phase und daher in einigen Projekten möglicherweise nicht oder nur eingeschränkt nutzbar. Somit brauchen wir ein anderes Tool, das diese Einschränkungen überwindet.

Objc Dependency Visualizer

Objc Dependency Visualizer ist eine Open-Source-Bibliothek von Paul Taykalo. Sie macht es möglich, schnell und einfach eine HTML-Seite mit interaktiven Grafiken zum aktuellen Projektstand zu erstellen.

So funktioniert's!

  1. Git-Repository klonen:
  $ git clone https://github.com/PaulTaykalo/objc-dependency-visualizer.git
  1. Erstellen unseres Zielprojekts in Xcode oder per Kommandozeile wie folgt:
  $ xcodebuild -project YOUR_PROJECT.xcodeproj
  1. Zum Ordner des Tools navigieren und Diagrammdefinitionen aus dem vorherigen Build generieren. Für weitere Befehle bitte in der Repo-Dokumentation nachschauen.
 # swift project
  $ ./generate-objc-dependencies-to-json.rb -w -s "SWIFT_PROJECT_NAME" > origin.js

  # objective-c project
  $ ./generate-objc-dependencies-to-json.rb -d -s "OBJC_PROJECT_NAME" > origin.js
  1. Seite öffnen und genießen:
 $ open index.html

Nachfolgend sind ein paar Beispiel-Screenshots von dem Alamofire-Projekt (Version 4.6.0). Der erste Screen gibt uns einen Überblick über den aktuellen Build des Projekts. Dank dieser umfassenden Darstellung können wir leicht erkennen, wie die einzelnen Elemente miteinander verbunden sind. Wir können auch mit dem Diagramm herumspielen, indem wir einen Knoten an eine beliebige Stelle auf der Seite ziehen oder für eine bessere Ansicht rein- oder rauszoomen.

Software-Architektur visualisiert

Will man einen Knoten genauer betrachten reicht ein Doppelklick. Dadurch wird die Grafik herangezoomt und alle Knoten, wie in der folgenden Abbildung dargestellt, neu angeordnet. Sobald alle Knoten in Position sind, können alle damit verbundenen Abhängigkeiten leicht nachvollzogen werden.

Detailansicht Software-Architektur

Vorteile

Dieser Visualizer hat mehrere Vorteile gegenüber anderen Tools:

  • Unterstützung für in Objective-C und Swift geschriebenen Code
  • Kompakt und handlich
  • Einfache Installation
  • Keine zusätzlichen Frameworks oder Bibliotheken erforderlich
  • Umfangreiche und interaktive Benutzeroberfläche bzw Benutzungsoberfläche

Nachteile

Eine Reihe von Einschränkungen können als Nachteile angesehen werden:

  • Animation verlangsamt sich, wenn die Anzahl der Knoten wächst
  • Keine Abhängigkeitsrichtung auf niedrigem Niveau, sie werden stattdessen farbig dargestellt
  • Nicht geeignet für sehr große Projekte, da die Anzahl der Knoten und Kanten extrem hoch wird
  • Build eines Projektes muss manuell erfolgen

Fazit

Dieses Tool kann für alle Objective-C- und Swift-Entwickler sehr nützlich sein - es gibt einen visuellen Überblick über den aktuellen Stand des Projekts. Auch um dem Team die Architektur des Projekts zu erklären ist der Objc Dependency Visualizer ein sehr leistungsstarkes Instrument.