Messen Sie die Qualität Ihres .Net-Codes mit NDepend

Die Beurteilung der Qualität des Codes einer Anwendung ist häufig ein subjektiver Prozess. Aus diesem Grund wenden wir uns Code-Metriken zu - quantitativen Messungen, die wertvolle Einblicke in den Code unserer Anwendung liefern. Entwickler können Code-Metriken nutzen, um die Qualität des Codes zu verstehen, sich ein Bild von den potenziellen Problemen zu machen und zu ermitteln, welche Typen und Methoden zur Verbesserung der Qualität überarbeitet werden müssen.

Statische Code-Analyse-Tools werden verwendet, um die Qualität von Code in einer Anwendung zu messen, ohne die Anwendung ausführen zu müssen. Für .Net stehen viele Tools zur statischen Code-Analyse zur Verfügung. Dazu gehören FxCop, StyleCop, ReSharper, CodeIt.Right, NDepend usw. In diesem Artikel wird erläutert, wie wir NDepend verwenden können, um die Codequalität zu visualisieren und Maßnahmen zu ihrer Verbesserung zu ergreifen.

Was ist NDepend und warum wird es verwendet?

NDepend ist ein statischer Code-Analysator, der sich gut in Visual Studio integrieren lässt und wertvolle Metriken zur Bestimmung der Codequalität liefert. NDepend zeigt diese Metriken in Form von Listen, Matrizen, Diagrammen, Baumkarten und Diagrammen an. Zusammen mit diesen Metriken kann NDepend Ihren Code analysieren und Verstöße anhand einer großen Datenbank von Regeln melden.

NDepend speichert die Ergebnisse jeder Analyse, sodass Sie die Ergebnisse vergleichen können, nachdem Sie die Codeabdeckung oder die Codequalität verbessert haben. Es kann sowohl als eigenständige Anwendung als auch als Erweiterung in Visual Studio ausgeführt werden. Sie können die NDepend Azure DevOps-Erweiterung nutzen, um NDepend in Ihre Projekte in Azure zu integrieren.

Im Folgenden sind einige der auffälligen Merkmale von NDepend aufgeführt:

  • Große Menge an Code-Regeln zur Überprüfung der Konformität
  • Viele Diagramme und Diagramme zum Anzeigen von Codemetriken
  • Lässt sich gut in Visual Studio 2010, 2012, 2013, 2015 und 2017 integrieren
  • Ermöglicht es Ihnen, die Abhängigkeiten zwischen Modulen zu untersuchen
  • Bietet CQLinq (Code Query over LINQ) zum Anpassen der Analyse
  • Misst die Codeabdeckung
  • Identifiziert schwer zu pflegenden Code und schätzt die technische Verschuldung 
  • Erstellt Trenddiagramme

Erste Schritte mit NDepend

Um mit NDepend beginnen zu können, müssen Sie eine Kopie davon herunterladen und installieren. Sie können eine Testversion von NDepend hier herunterladen. Es wird als ZIP-Datei gepackt. 

Nachdem Sie die ZIP-Datei des NDepend-Installationsprogramms entpackt haben, finden Sie die folgenden Dateien darin:

  1. NDepend.Console - wird zur Integration in den Erstellungsprozess verwendet
  2. NDepend.PowerTools - eine Sammlung von Open-Source-Statikanalysatoren
  3. NDepend.VisualStudioExtension.Installer - Installiert die Visual Studio-Erweiterung für NDepend
  4. VisualNDepend - ein GUI-Client für NDepend

Sie können die Visual Studio-Erweiterung von NDepend auf eine der folgenden zwei Arten installieren:

  1. Führen Sie NDepend.VisualStudioExtension.Installer aus
  2. Führen Sie VisualNDepend aus und wählen Sie "Visual Studio Extension installieren".

Sobald Visual Studio Extension für NDepend installiert ist, können Sie die Metriken, Regeln, Berichte, Diagramme, Analyseergebnisse und Tools in der Visual Studio-IDE nutzen. Sie können Visual NDepend auch nutzen, um Ihre Lösungen und Projekte zu analysieren, ohne Visual Studio starten zu müssen.

Die Visual Studio-Erweiterung für NDepend ist für Visual Studio 2010 über Visual Studio 2017 verfügbar. Beachten Sie, dass ich sie mit Visual Studio 2017 verwende.

Analysieren des Quellcodes mit NDepend

Um mit der Analyse Ihres Quellcodes zu beginnen, klicken Sie auf "VS-Lösungen und VS-Projekte analysieren". Die anderen verfügbaren Optionen sind "Analysieren von .NET-Assemblys im Ordner", "Analysieren einer Reihe von .NET-Assemblys" und "Vergleichen von 2 Versionen einer Codebasis". Mit dieser letzten Option können Sie zwei Builds vergleichen - eine nette Funktion!

Der Einfachheit halber werde ich hier den Quellcode aus einem meiner letzten Artikel verwenden („Verwendung von Lamar in ASP.Net Core“). Sobald Sie auf "VS-Lösungen und VS-Projekte analysieren" klicken, wird ein neues Fenster angezeigt (siehe Abbildung 1 unten).

Sie können jetzt auf "Durchsuchen" klicken und die Lösungsdatei des Projekts angeben, das NDepend analysieren soll.

Klicken Sie abschließend auf "Einzelne .Net-Assembly analysieren", um die Analyse zu starten (siehe Abbildung 3 unten).

Dadurch wird eine Codeanalyse für das ausgewählte Projekt ausgeführt. Nach Abschluss der Analyse zeigt NDepend ein Fenster mit den folgenden Optionen an:

  • NDepend-Dashboard anzeigen
  • NDepend Interactive Graph anzeigen
  • NDepend-Code-Regeln des Browsers
  • Schließen Sie den Dialog

Lassen Sie uns das NDepend-Dashboard anzeigen. So sieht die Ausgabe aus: 

NDepend zeigt Ihnen die Codezeilen, Informationen zu Typen, Schulden, Kommentaren im Quellcode, Informationen zur Abdeckung, Komplexität der Methoden, Qualitätsgatter und die Regeln, gegen die verstoßen wurde, sowie andere Probleme.

NDepend-Funktionen

Abhängigkeitsgraph und Abhängigkeitsmatrix

NDepend zeigt Ihnen auch ein Abhängigkeitsdiagramm und eine Abhängigkeitsmatrix Ihres Codes. Während Ersteres eine grafische Ansicht der Abhängigkeiten in Ihrem Projekt bietet, bietet Letzteres eine tabellarische Ansicht Ihres Codes, die nach Abhängigkeiten von Namespaces und Typen organisiert ist.

Trenddiagramme

Trenddiagramme sind im Dashboard verfügbar. Diese Diagramme bieten eine Vorschau darauf, wie sich die Qualität des Quellcodes des Projekts im Laufe der Zeit geändert hat. Sie können auch Ihre eigenen benutzerdefinierten Trenddiagramme erstellen.

Zyklomatische Komplexität

Die zyklomatische Komplexität ist ein quantitatives Maß für die linear unabhängigen Pfade im Quellcode, mit dessen Hilfe Sie die Komplexität Ihres Programms verstehen und die Codeabdeckung verbessern können. Sie können NDepend nutzen, um die zyklomatische Komplexität im Code Ihrer Anwendung zu analysieren. Weitere Informationen zur zyklomatischen Komplexität finden Sie in diesem Artikel.

Abfragen mit CQLinq

CQLinq ist eine der auffälligsten Funktionen von NDepend. Mit CQLinq können Sie .NET-Code mit LINQ abfragen. Sie können CQLinq nutzen, um Code-Schulden, Probleme, Regeln und Qualitäts-Gates abzufragen.

Schauen wir uns ein Beispiel an. Die folgende CQLinq-Abfrage zeigt die Methodennamen und die zyklomatische Komplexität nicht abstrakter Methoden mit einer zyklomatischen Komplexität von mehr als 20 an, geordnet nach absteigender Reihenfolge des Werts der zyklomatischen Komplexität.

von m in Application.Methods

wobei m.CyclomaticComplexity> = 20 &&! m.IsAbstract

orderby m.CyclomaticComplexity absteigend

Wählen Sie neue {m, m.CyclomaticComplexity}

Hier ist ein weiteres Beispiel für eine CQLinq-Abfrage. Bei dieser Ausführung werden die Namen der Methoden mit mehr als 100 Codezeilen angezeigt.

von m in Methoden, bei denen m.NbLinesOfCode> 100 m auswählen

Weitere Informationen zu CQLinq finden Sie in der NDepend-Dokumentation hier. 

NDepend ist ein statisches Code-Analyse-Tool, mit dem Sie wertvolle Einblicke in den Code Ihrer Anwendung erhalten. Sie können NDepend als eigenständige Anwendung ausführen oder in Visual Studio integrieren. Obwohl NDepend nicht kostenlos ist, ist es angesichts seiner leistungsstarken Funktionen preisgünstig und für alle neueren Versionen von Visual Studio verfügbar.

Wenn Sie eine großartige Ressource zum Erlernen von NDepend suchen, empfehle ich den Pluralsight-Kurs „Practical NDepend“ von Eric Dietrich.