Stilisierte Visualisierung eines Netzwerks mit dem Schriftzug GEPHI – abstrahiertes Titelbild zur Netzwerkanalyse.
  • 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.

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

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:

Vergleich verschiedener Layout-Algorithmen in Gephi: OpenOrd, ForceAtlas 2, Radial Axis und GeoLayout.

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.

Farbige Partitionierung von Knotentypen im Gephi Appearance-Panel zur besseren visuellen Unterscheidung.

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.

eispiel für verschachtelte Filter in Gephi zur Erkennung von Zyklen im Domain-Modul.

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

Beschreibung des Lineage-Plugins in Gephi zur Analyse von Vorfahren- und Nachfolger-Knoten in gerichteten Graphen.

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.

Statistikansicht in Gephi mit auswählbaren Node-Metriken wie Clustering Coefficient, Eigenvector Centrality und Lineage.

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:

Anwendung des Lineage-Filters in Gephi mit Fokus auf bestimmte Knotenarten und Filterlogik im Domain-Modul.

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

Übersicht der Lineage-Partitionseinstellungen in Gephi zur farblichen Unterscheidung von Knotentypen wie Origin, Hybrid und Ancestor.

Und führt anschließend zum nachfolgenden Graphen:

Darstellung zweier Zyklen im Domain-Modul eines Softwareprojekts mit Gephi visualisiert.

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.

  1. Importieren der Daten
  2. Algorithmus Force Atlas auswählen
  3. Parameter Abstoßung/Repusion Stregth und Anziehung/Attraction Strength abwechselnd verdoppeln oder halbieren und dabei beobachten ob sich das Ergebnis verbessert
  4. 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 Codeeingesetzt, 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 “Depgraphverwendet. 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:

Visualisierung eines einfachen gerichteten Graphen in Gephi mit den Knoten Applikation, Server und Repository.

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.

SQL-Abfragen zur Extraktion von Knoten und Kanten aus einer relationalen Datenbank für den Import in Gephi.

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.

Visualisierung eines gerichteten Graphen in Gephi basierend auf Nutzern und ihren gespielten Spielen.

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):

Gephi-Oberfläche zur Anpassung von Knotenbeschriftungen mit Hinweis auf erweitertes Konfigurationsmenü.

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)

Schaltfläche „Konfigurieren“ in Gephi zur Auswahl der Datenquelle für Knotentexte und Beschriftungen.

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

Dialogfenster in Gephi zur Auswahl von Attributen für die Knotentext-Beschriftung wie ID, Label, Modul und Lines of Code.

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

Gephi-Funktion zum Zentrieren des gesamten Graphen in der Ansicht für bessere Übersichtlichkeit.

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

Exportmenü in Gephi zur Auswahl von Formaten wie SVG, PDF oder PNG für den Graphenexport.

Unter Optionen… die Breite und Höhe anpassen:

PNG-Exportoptionen in Gephi mit einstellbarer Bildgröße, Rand und Hintergrundtransparenz.

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

Kombination aus Lineage-Partitionseinstellungen und Exportfunktion für gefilterte Graphen in Gephi.

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.

Termin vereinbaren
geschrieben von:
Aleksandar, Chiara, Egor, Erhard, Jaroslav, Mattias, Simon Gartner, Thomas
WordPress Cookie Plugin von Real Cookie Banner