- Auto-Update Service
- Cloud Native
- Software-Modernisierung
Visualize IT: Komplexe Softwarearchitekturen sichtbar machen mit Gephi
Wie macht man komplexe Legacy-Software sichtbar?
In unserem neuesten Learning-Friday-Projekt haben wir mit dem Visualisierungstool Gephi gearbeitet – und zeigen, wie man damit Architektur, Abhängigkeiten und Zyklen in großen Softwaresystemen auf einen Blick erkennt.
Mit Beispielen, Tipps & einem praktischen Cookbook!
Warum Gephi?
In der Welt der Software-Modernisierung stehen wir oft vor der Herausforderung: Wir kommen in neue Projekte oder zu neuen Kund:innen und treffen auf komplexe Legacy-Softwaresysteme, die wir möglichst schnell durchdringen müssen. Bilder, Grafiken, Diagramme helfen sehr um ein Gefühl für das System, die Komplexität und eventuelle Problembereiche zu entwickeln. Neben Standarddarstellungen und bestehender Dokumentation wünschen wir uns oft einfache Graphen zu individuellen Fragestellungen zu erzeugen.
Beispiel: Eine Gesamtübersicht eines komplexen Softwareprojekts in Gephi, mit farblich hervorgehobenen Modulen und Abhängigkeiten.

Um genau solche Anforderungen zu erfüllen und um Visualisierungen für spezifische Fragestellungen zu erstellen, haben wir im Rahmen eines internen Learning-Friday-Projekts das Open-Source-Tool Gephi unter die Lupe genommen. Gephi ist eine führende Open-Source-Software zur Visualisierung und Analyse von Netzwerken und Graphen.
Unser Vorgehen
Ziel: Einen guten Überblick über die Funktionalität von Gephi zu bekommen und mögliche “Best-Practices” mit dessen Umgang zu erarbeiten, die uns und anderen Kolleg:innen (die evtl. noch nie mit Gephi gearbeitet haben) helfen würden, die Struktur und den Aufbau eines bestehendes Softwareprojekt möglichst rasch und einfach zu erfassen und darstellbar zu machen.
🎥 Neugierig? → Für eine kleine Demo unseres Vorgehens siehe auch das YouTube Video VisualizeIT: Gephi für die Visualisierung von Software-Architekturen – Hogarama Use Case
Video-Transkript hier.
Gephi in Aktion: Algorithmen, Formatierungen & Filter
Zu Beginn haben wir uns die von Gephi bereitgestellten Algorithmen angesehen, die dazu dienen, die in den Knoten und Kanten inhärente Information möglichst gut abzubilden.
Dabei sind die verschiedenen Algorithmen für unterschiedliche Anwendungsfälle geeignet:

Gephi bietet eine breite Palette an Algorithmen, die jeweils verschiedene Strukturen betonen:
- OpenOrd: Hebt Unterteilungen hervor – ideal bei Millionen Knoten.
- ForceAtas/ForceAtlas 2/Yifan Hu/Fruchterma-Reingold: Betont Komplementaritäten, ideal bis ca. 10.000 Knoten.
- Circular/Radial Axis: Hebt Hierarchien/Reihenfolgen hervor.
- GeoLayout: stellt geografische Verteilungen in den Fokus.
Zusätzlich sind die verschiedenen Algorithmen für verschiedene Anzahlen an Knoten geeignet.
Tipp: Der ForceAtlas2-Algorithmus ist unser Favorit für typische Projekte mit mehreren hundert Knoten – performant, klar und flexibel anpassbar, OpenOrd auf Datensätzen mit bis zu 1.000.000 Knoten.
Formatierung von Knoten und Kanten
Speziell für Knoten ist eine zusätzliche Formatierung hilfreich.

Im Tab „Appearance“ lassen sich Knoten visuell differenzieren:
- Farbe des Knotens: Verwenden wir gerne für eine zusätzliche Kategorisierung, die aus einem Attribut des Knotens erhalten werden
- Größe des Knotens: Gut für Metriken, wie Lines of Code, Anzahl der Verbundung zu anderen Knoten (Degree)
- Farbe der Beschriftung: Meist gleich wie Farbe des Knotens
- Größe der Beschriftung: Meist gleich wie Größe des Knotens
Nach jeder Änderung muss diese mit “Apply” aktiviert werden. (Es gibt auch Auto-Apply)
Damit kommt man schon recht weit, es gibt aber noch weitere Spezialoptionen, wie Splines für die Größe der Knoten.
Die Größe der Knoten kann auch bei einigen Algorithmen berücksichtigt werden, damit es zu keinen Überschneidungen kommt.
Filtermöglichkeiten mit Gephi
Gephi bietet eine große Anzahl an Filter, die sich in Kategorien unterteilen lassen und miteinander verknüpft werden können. Beim Verknüpfen ist je nach Anwendungsbeispiel zu beachten, dass die Art und Weise, wie sie ineinander verschachtelt werden, ausschlaggebend sein kann.
Um die ausgewählten Filter anzuwenden, hat man die Wahl, ob das gefilterte Ergebnis mittels “Auswählen” hervorgehoben werden soll und der vorherige komplette Graph im Hintergrund angezeigt wird oder ob mittels “filtern” nur der neue Graph angezeigt werden soll, der entstanden ist.
Des Weiteren besteht die Möglichkeit, den Graphen in einen neuen Arbeitsbereich zu exportieren.
Kategorien
- Topologien: Filtert die strukturellen Eigenschaften des Graphen, wie etwa Kanten, Knotengrade, vorhandene Schleifen und sogar den kürzesten Weg zwischen zwei Knoten.
- Operatoren: Logische Operatoren wie etwa Union, Intersection und Mask.
- Attribute: Filter zum Filtern von Attributen von Knoten und Kanten.
Filterbeispiel
Der Hogarama Datensatz dient als Grundlage, wurde jedoch minimal angepasst um zwei Cyclen zu haben.
In diesem Beispiel soll nach Zyklen im Domain Modul gefiltert werden. Da es sich um einen gerichteten Graphen handelt, wird zuerst nach dem Modulnamen gefiltert und anschließend nach den Knotengraden sowohl was ausgehende als auch eingehende Kanten anbelangt, da man davon ausgehen kann, dass ein Knoten ohne jeweils einen Grad nicht teil eines Zykluses sein kann.

Da Gephi von Haus aus keinen Filter oder Algorithmus verwendet, der Zyklen (Ausnahme sind Schleifen) findet bzw. herausfiltert, wurde das Plugin Lineage verwendet.

Dieses Plugin berechnet nach Angabe von einem Knoten und erweitert den Datensatz (Knoten) um die Spalten “istHerkunkft”, “istVorfahre”, “istNachkomme”, “DistanzNachkomme” und “DistanzVorfahre” erweitert.

Nach der Plugin Installation erscheint unter Statistik ein Eintrag lineage wodurch ein Knoten (nur ID!) angegeben und die Berechnung gestartet werden kann.

Weiters erscheint in den Filtern unter Attribute/Partitionierung der Filter Lineage (Node) der die bereits erstellte Filterung als Subfilter entgegennimmt und schaut wie folgt aus:

Als Input für den Filter kann man 4 Kategorien insgesamt auswählen, in diesem Fall jedoch nur folgende relevant:

Und führt anschließend zum nachfolgenden Graphen:

Cookbook: Schnelleinstieg für die Software-Modernisierung
Zum Erleichtern des Einstiegs haben wir auch ein Cookbook erstellt, das aus den Erfahrungen beruht, die wir während des Learning-Friday Projekts gesammelt haben. Dies geht von einem typischen Anwendungsfall im Rahmen der Software-Modernisierung mit einigen hundert Knoten aus und empfiehlt das Verwenden des ForceAtlas Algorithmus.
- Importieren der Daten
- Algorithmus Force Atlas auswählen
- Parameter Abstoßung/Repusion Stregth und Anziehung/Attraction Strength abwechselnd verdoppeln oder halbieren und dabei beobachten ob sich das Ergebnis verbessert
- Schalter wie Attraction Distribution ausprobieren
Folgende Konfiguration hat für uns gute Ergebnisse gebracht:
- Abstoßung: 1000
- Anziehung: 2
- Maximale Verdrängung: 10
- Stabilisierungsfunktion: Ja
- Gravitation: 50
- Größenanpassung: Ja (je nachdem, ob die Knoten überlappen oder nicht)
Basierend auf diesen Werten lässt sich in den meisten Fällen ein gut strukturierter Graph erstellen, der jedoch zur besseren Lesbarkeit noch überarbeitet werden muss.
Dazu können sowohl die Knoten, als auch die Kanten nach bestimmten Kriterien eingefärbt und vergrößert/verkleinert werden.
In unseren Tests haben wir zusätzlich zu den Knoten (die meist nur über einen Identifier verfügen) weitere Informationen ergänzt, wie z.B. das Modul, in dem sich eine Klasse befindet oder die Lines of Code (LoC) des entsprechenden Moduls oder der Klasse. Um diese Informationen aus einem bestehenden Projekt zu extrahieren, haben wir neben passendem Maven-Plugins auch selbst entwickelte Perl-Skripts eingesetzt.
So wurde z.B. das Maven Plugin “Source Lines of Code”eingesetzt, um die LoC eines Moduls oder einer Klasse in separate Textfiles zu extrahieren, die dann mittels Perl in ein für Gephi passendes Format zusammengefasst werden.
Um die Abhängigkeiten der Maven-Module untereinander zu extrahieren, wurde das Maven-Plugin “Depgraph” verwendet. Die Auswertung des Plugins liegt nach Anwendung in einem .dot File (zur Verwendung in GraphViz) vor. aus dem wieder mit Perl-Scripts nützliche Information gewonnen werden kann.
Datenquellen & Importe
Gephi kann etliche Graph-Formate importieren. Wir verwenden hauptsächlich DOT und CSV Formate.
Graphviz DOT Format
Graphviz ist ein weit verbreitetes OpenSource Visualisieungswerkzeug für Graphen. Etliche Werkzeuge im Java-Umfeld können Graphviz-Dateien (DOT-Format) erzeugen. Diese können von Gephi importiert werden, wobei wir teilweise Probleme mit formatierten Knoten hatten. In diesen Fällen haben wir die Formatierungen in der DOT-Datei (einfaches Textformat) gelöscht und nur die Kanten importiert. Der rohe Graph kann dann mit Gephi gestaltet werden.
CSV Format
CSV (Comma-Separated-Values) Formate werden von allen Tabellenkalkulationsprogrammen unterstützt und können sehr einfach auch mit Skripts erzeugt werden. Als einfachste Möglichkeit kann auch nur eine Kanten-Datei importiert werden:
Source,Target Applikation,Server Applikation,Repository Server,Repository
In diesem Beispiel werden Pfeile zwischen drei Knoten (Applikation, Server, Repository) gezeichnet. Wichtig ist, dass die Überschriften „Source“ und “Target” heißen.
Um zusätzliche Attribute zu Knoten hinzuzufügen, können Knotendateien definiert werden. Diese benötigen eine “Id” als Überschrift:
Id,type Applikation,app Server,server Repository,repo
Damit kann dann z.B. so ein Graph formatiert werden:

Datenbank
Gephi bietet die Möglichkeit, Datenbanken wie MySQL, SQLite, PostgreSQL oder SQL Server zu importieren. Dabei muss die Datenbank über die folgenden Spalten: eine ID für die Nodes und Source und Target für die Edges verfügen. Sind die Spalten nicht in der Datenbank vorhanden, können diese mittels SELECT Abfragen aus der Datenbank extrahiert werden.
In dem folgenden Beispiel extrahiert die erste SELECT Abfrage die Spalten für die Nodes und die zweite die Spalten für die Edges.

Wie bei dem folgenden Graph zu sehen ist, bestehen die Nodes aus User (Rosa) und Games (Grün) und die Edges aus den gespielten Matches.

Tipps und Tricks
Schließlich noch ein paar Funktionen, die wir nicht gleich gesehen haben.
Beschriftungen bearbeiten
In der Übersicht gibt es unter der Grafik rechts ein kleines Icon (siehe roten Pfeil):
Damit kann man erweiterte Optionen für Beschriftungen von Kanten und Knoten öffnen. z.B. kann man die Größe der Beschriftung an die Knotengröße anpassen, wodurch die “wichtigen” Knoten größer beschriftet werden.
Außerdem kann man mittels “Konfigurieren”-Icon (unter rotem Pfeil)

die Quelle der Beschriftung (welche Spalte) auswählen. Z.B. “Id” statt dem Default “Label”, der oft nicht befüllt ist:

Gesamten Graphen anzeigen
Hat man mal den Graphen in der Übersicht-Ansicht verloren, kann man ihn mittels “Auf Graph zentrieren” Icon (Lupe links unten neben dem Graphen) bildfüllend anzeigen

Graph exportieren (Vorschau an Übersicht anpassen)
Beim Exportieren von Graphen unterscheidet sich oftmals die Export-Vorschau mit der Übersicht. Um dieses Problem zu beheben kann man in den meisten fällen die folgenden Einstellungen vornehmen:
Presets > Default Straight
Proportional Size> false
Edges > Rescale weight> true
Edges > color > original
Nodes Labels > Font (Optional)
Edges > Thickness (Optional)
Diese Einstellungen können in einem Preset gespeichert werden. Dadurch kann dieses Preset auch bei anderen Graphen verwendet werden. Je nach Graphen müssen weitere Einstellungen vorgenommen werden.
Auflösung beim Exportieren erhöhen
Beim Speichern als PNG

Unter Optionen… die Breite und Höhe anpassen:

Exportieren von gefilterten Graphen
Wird ein Graph gefiltert, so kann dieser in einen neuen Workspace exportiert werden.
Damit die Export Funktion verfügbar ist, muss vorher der Filter entweder mittels Select oder Filter Button angewendet werden

Fazit
Gephi hat uns überzeugt: Es ist der perfekte Kompromiss zwischen einfacher Bedienung und starker Funktionalität. Die eine oder andere Funktion ist vielleicht ein wenig versteckt oder könnte einfacher sein (z.B. Export von Graphen), dennoch verwenden wir Gephi bereits gerne in unseren Projekten.
Du willst deine Software-Architektur sichtbar machen?
Meld dich bei uns – wir zeigen dir, wie du mit Gephi und Co. komplexe Systeme einfach visualisierst.



