Visual C++ gehört zu den am weitesten verbreiteten Entwicklungsumgebungen für C++ und bietet Entwicklern zahlreiche nützliche Funktionen. Jede neue Version bringt bedeutende Verbesserungen mit sich, und viele Erweiterungen helfen dabei, die Entwicklungsarbeit noch effizienter zu gestalten. In diesem Beitrag stelle ich einige nützliche Funktionen von CppDepend.
Ihre Codebasis visualisieren
Abhängigkeitsgraph
Ein Abhängigkeitsgraph gehört zu den gebräuchlichsten Darstellungen von Abhängigkeiten zwischen Codeelementen, und Visual Studio bietet dafür bereits eine nützliche Implementierung. Der von CppDepend bereitgestellte Graph legt den Schwerpunkt stärker auf die Codequalität: Die Größe der Knoten und die Stärke der Kanten können proportional zu verschiedenen verfügbaren Metriken dargestellt werden.

Abhängigkeitsmatrix
Die DSM (Dependency Structure Matrix) ist eine kompakte Möglichkeit, Abhängigkeiten zwischen Komponenten darzustellen und darin zu navigieren. Sie bildet dieselben Informationen wie ein Graph ab, ist jedoch besonders praktisch, wenn:
- viele Codeelemente beteiligt sind.
- Sie die Stärke der Abhängigkeiten zwischen Elementen bestimmen möchten.
- Sie Abhängigkeitszyklen zwischen Codeelementen schnell erkennen möchten.

Treemap
In der Metrikansicht wird die Codebasis mithilfe einer Treemap. Treemapping ist eine Methode zur Darstellung baumartig strukturierter Daten mithilfe verschachtelter Rechtecke. Als Baumstruktur wird die übliche Code-Hierarchie verwendet:
- C/C++-Projekte enthalten Namespaces
- Namespaces enthalten Typen
- Typen enthalten Methoden und Felder
Die Größe jedes Rechtecks ist proportional zur ausgewählten Metrik; standardmäßig handelt es sich dabei um NbLinesOfCode. Die Metric View kann außerdem eine zweite Metrik durch Einfärben der Treemap-Elemente darstellen, sodass zwei Code-Metriken gleichzeitig visualisiert werden können.
In dieser Treemap steht beispielsweise die Größe der Rechtecke für die Anzahl der Codezeilen, während die Farbe die zyklomatische Komplexität darstellt. Dadurch lassen sich die größten und komplexesten Methoden auf einen Blick erkennen.

Metrikinformationen
Für Projekte, Namespaces, Klassen, Methoden und Felder stehen zahlreiche Metriken zur Verfügung. Die Informationsansicht zeigt einige davon direkt an und erleichtert so die Beurteilung der Implementierungsqualität während der Entwicklung.

Regeln definieren
CQLinq ist möglicherweise die leistungsfähigste Funktion von CppDepend. Damit lassen sich anspruchsvolle Abfragen einfach definieren und gezielt bestimmte Codeelemente finden. Der CQLinq-Editor bietet zahlreiche hilfreiche Funktionen zum Erstellen eigener Regeln; die Ergebnisse werden dabei in Echtzeit berechnet.

Diagnosen abrufen
Mit CppDepend können Sie die von Clang, Cppcheck und Vera++ gemeldeten Probleme bequem abrufen. Über die API lassen sich außerdem weitere Werkzeuge integrieren.

Trenddiagramme
Trenddiagramme helfen dabei, die Entwicklung einer Metrik im Verlauf von Codeänderungen nachzuverfolgen. Viele Diagramme sind bereits standardmäßig vorhanden; eigene lassen sich ebenfalls unkompliziert erstellen.

Erweiterte Suche
Manchmal ist es sinnvoll, Methoden anhand ihrer Codegröße, zyklomatischen Komplexität, ihres Kommentaranteils, ihrer Kopplung oder anderer Metriken zu suchen.
CppDepend bietet genau diese Möglichkeit und erlaubt die Suche nach Codeelementen anhand einer großen Bandbreite von Metriken.

Fazit
CppDepend kann Ihnen helfen, Ihre Codebasis besser zu verstehen und Schwächen in Implementierung und Design aufzudecken. Der große Funktionsumfang kann den Einstieg allerdings zunächst etwas anspruchsvoll machen. Nach einigen Stunden lassen sich die wichtigsten Möglichkeiten des Werkzeugs jedoch gut beherrschen.
