Statische Code Analyse mit NDepend 6

Die neue Version 6.2 von NDepend ist nun seit einigen Tagen verfügbar. Grund genug um zu überprüfen was sich seit meinem letzten Beitrag im April 2014 alles in Sachen statischer Code Analyse bei NDepend verändert hat.

 

Statische Code Analyse?

Mittels statischer Code Analyse kann man seine Programme sehr einfach auf häufig gemachte Fehler hin untersuchen. Ob es sich um falsch implementierte Patterns wie IDisposable oder verschwendeten Arbeitsspeicher handelt wird genauso erkannt wie Methoden mit zu vielen Parametern.

Die einzelnen Fehler sind für sich alleine genommen kein Grund zur Panik. Ignoriert man diese Anzeichen für fehlendes Verständnis oder mangelndes Wissen, so kumulieren sich diese sehr schnell zu einem grossen Problem. Regelmässige Refactoring-Iterationen sind dann teure Symptombekämpfung, deren Ursache mit einer geschickt eingesetzten statischen Code Analyse früher (und damit auch günstiger) entdeckt werden kann.

 

Installation und erste Schritte

Am Installationsprozess von NDepend hat sich nichts geändert. Dieser besteht aus dem extrahieren der heruntergeladenen Zip-Datei, einem hineinkopieren der Lizenzdatei (die unverändert 299€ kostet) und dem Ausführen des Installers.

Ist dieser Vorgang abgeschlossen, kann man über den NDepend-Knopf im Menü von Visual Studio das geöffnete Projekt analysieren. Je nach Projektgrösse und Ausstattung des Rechners kann dies einige Minuten dauern. Sobald dies erfolgt ist, kann man die Auswertung im Dashboard ansehen.

 

Viele hilfreiche Verbesserungen

Wer bereits eine ältere Version von NDepend kennt wird sich sehr schnell zurechtfinden. Die Neuerungen liegen vor allem in besser umgesetzten Details, die einem einen grossen Mehrwert bieten.

Bessere Regeln mit weniger Falschmeldungen sind ein solcher Mehrwert. Damit lohnt es sich die als kritisch markierten Verstösse genau anzuschauen. Mit der integrierten Erklärung und einer Anweisung wie man dieses Problem behebt kommt man zudem viel schneller zur gewünschten Verbesserung.

NDepend Regel und wie man es verbessern kann

Bei Version 5 verwirrte mich besonders die unterschiedlichen Einstiegspunkte. Nehme ich nun das Dashboard, das NDepend-Tool oder den HTML-Report? Die neue Version hat die Unterschiede bereinigt und so spielt es nun keine Rolle mehr wo man ist.

NDepend_6_VisualNDepend

NDepend_6_VS_Dashboard

Neu kann man die eigenen Regel-Dateien einfach über Projekte hinweg verwenden und austauschen. Dies ist gerade für Firmen mit zahlreichen verschiedenen Projekten eine zentrale Voraussetzung, um überhaupt Zeit für eigene Regeln zu investieren.

Eine detaillierte Übersicht zu den neuen Funktionen findet man neben der Dokumentation auch im Blog von NDepend. Die dort beschriebenen Tipps und Tricks helfen einem NDepend noch besser an die eigenen Bedürfnisse anzupassen.

 

Lohnt sich der Kauf?

Bei einem grossen Projekt konnte ich dank NDepend innert weniger Minuten einige Fehler finden, die bei der nächsten Migration sehr viele Probleme verursachen würden. Da diese Probleme nun in Ruhe und ohne Überlappung mit anderen Migrationsfehlern behoben werden können, hat sich der Einsatz für mich bereits gelohnt.

Ob sich der Kauf für einem selber lohnt, hängt vor allem davon ab, wie gut man die eigenen Projekte kennt. Ist man sehr vertraut und hat alle Bereiche mit regelmässigen Reviews im Griff, so wird man kaum solch schnelle Erfolge mit NDepend feiern können.
Anders sieht es aus, wenn man Projekte von externen Firmen entwickeln lässt. Hier kann NDepend bei jeder Lieferung den Code analysieren und man sieht gleich wie sich der Code über die Zeit hinweg verändert.

Sobald man eigene Abfragen mittels CQLinq definieren möchte, führt aus meiner Sicht kein Weg an NDepend vorbei. Die Abfragesprache ist sehr mächtig und ermöglicht einem die speziellsten Kombinationen zu finden. Um allerdings effizient arbeiten zu können darf man den Einarbeitungsaufwand nicht unterschätzen.

 

Fazit

Aus meiner Sicht machte NDepend 6 einen grossen Schritt zu einem einfacher zu bedienenden Werkzeug. Mit den Standardauswertungen kommt man bereits sehr weit und wenn man sich nicht davor scheut, kann man mit CQLinq noch tiefer in den Code abtauchen.