Abhängigkeiten im Code aufzeigen mit NDepend 2020

NDepend ist ein praktisches Werkzeug zur statischen Codeanalyse. Die grosse Neuerung in der Version 2020 ist der komplett überarbeitete Abhängigkeitsgraph. Ich hatte bereits mehrmals über NDepend geschrieben (hier, hier und hier) und möchte nicht mehr darauf verzichten.

Der alte Abhängigkeitsgraph

Bisher konnte man die Grafik auf der obersten Ebene nur bedingt beeinflussen. Man konnte wählen zwischen «Allem» und «eigenem Code». Für eine Gesamtübersicht hat sich die Beschränkung auf den eigenen Code aufgedrängt, da schon bei mittleren Projekten die Details nur sichtbar waren, wenn man hineingezoomt hat:

Kompletter Abhängigkeitsgraph ist sehr unübersichtlich

Im Gegensatz dazu konnte man den eigenen Code meist ohne Probleme anschauen:

Reduktion auf den eigenen Code genügt meist für eine brauchbare Darstellung

Von hier aus konnte man sich über die Pfeile nach unten bewegen und so immer mehr Details erkunden. Dieses hin und her hat mir über Jahre hinweg gute Dienste erwiesen.

Der neue Abhängigkeitsgraph

Mit Version 2020 können wir die Auswahl viel granularer vornehmen und von Assemblies über Namespaces zu Typen bis hinunter zu den Methoden alles anzeigen lassen. Öffnet man nun den Graphen, so wird einem die Sicht auf die Typen angezeigt:

Die neue Darstellung ist deutlich besser

Man kann aber ganz leicht über die Navigation direkt oberhalb der Anzeige auf die Assemblies wechseln:

Nur die Assemblies zu zeigen ist weiterhin möglich

Die neue Darstellung hilft einem beim Abklären von Abhängigkeiten deutlich besser als es die alte Version tat. Man wechselt zwischen den gewünschten Sichten hin und her, ohne dabei Zeit zu verlieren. Sehr praktisch ist aus meiner Sicht auch die Exportfunktion, wo neben PNG auch SVG unterstützt wird. So bekommt man eine verlustfreie Darstellung zur Verwendung ausserhalb von NDepend.

Wo geht es zurück?

Wenn man sich durch den Graphen klickt möchte man irgendwann mal zurück zur Übersicht. Diese erreicht man über den Link «application map» ganz links in der Navigation:

Application map befindet sich ganz links

Hat man allerdings ein Element selektiert, sieht die Navigation anders aus und es fehlt der Link zur «application map». In dem Fall genügt es zuerst auf «unselect» zu klicken, damit man die initiale Navigation bekommt:

Mittels unselect bekommt man die initiale Navigation zurück

Zirkuläre Abhängigkeiten in Namespaces finden

Während Visual Studio und der Compiler einem vor zirkulären Abhängigkeiten zwischen Assemblies warnen kann, sind solche Abhängigkeiten in Namespaces schwer zu finden. Mit NDepend findet man zirkulären Abhängigkeiten dank der farblichen Hervorhebung sehr schnell und ohne lange zu suchen. Die rote Farbe auf dem Graph fällt auch bei komplexeren Projekten sofort auf:

Zirkuläre Abhängigkeiten werden in Rot hervorgehoben

Fazit

Der Abhängigkeitsgraph ist nicht die einzige Neuerung von NDepend 2020, doch für mich die wichtigste. Allein damit rechtfertigt sich aus meiner Sicht bereits ein Update auf die neuste Version. Die übrigen Verbesserungen und die neuen Regeln zur Qualitätskontrolle runden den guten Eindruck ab, auch wenn einem diese erst bei der längeren Benutzung auffallen.

Buch-Rezension zu „Java by Comparison“

Java by Comparison“ von Simon Harrer, Jörg Lenhard und Linus Dietz erschien 2018 bei The Pragmatic Programmers. Dieses Buch wagt sich an eine grosse Herausforderung: Wie kann man das über Jahre angeeignete Expertenwissen in einfacher Form Programmier-Anfängern zugänglich machen?

Buch-Rezension zu „Java by Comparison“ weiterlesen