Blog 3 Min. Lesezeit

Cppcheck optimal nutzen

Artikel teilen
Make the most of CppCheck.

Statische Codeanalyse bezeichnet das Erkennen von Schwachstellen und Fehlern im Quellcode einer Software. Werkzeuge zur statischen Analyse helfen dabei, häufige Programmierfehler frühzeitig aufzudecken. Zu ihren Vorteilen gehören unter anderem:

  • Den Quellcode lesbarer und wartbarer machen.
  • Unerwartetes Verhalten zur Laufzeit verhindern.
  • Die Ausführung optimieren.
  • Die Sicherheit des Codes erhöhen.

In der C++-Welt gehört Cppcheck zu den beliebtesten Werkzeugen, um Probleme in einer C++-Codebasis aufzuspüren. Die Ergebnisse von Cppcheck lassen sich auf verschiedene Arten auswerten.

  • XML-Format: Cppcheck kann XML-Dateien erzeugen. Diese lassen sich für individuelle HTML-Berichte verwenden oder von anderen Werkzeugen zur Auswertung der Analyseergebnisse einlesen.
  • HTML-Format: Ein HTML-Bericht ist eine praktische Möglichkeit, Cppcheck-Probleme darzustellen. Er kann auf einem Server abgelegt und mit dem Team geteilt werden.
  • IDE-Plugins: Für Cppcheck stehen zahlreiche Plugins zur Verfügung, mit denen sich Probleme direkt in der IDE untersuchen lassen.

Vor einigen Jahren haben wir CppDepend um die Möglichkeit erweitert, Ergebnisse anderer Werkzeuge zu importieren und direkt in CppDepend abzufragen. Wir fragten Daniel, den leitenden Entwickler von Cppcheck, ob wir sein Tool in CppDepend integrieren dürften. Seine Antwort lautete sinngemäß: „Eine ganze Werkzeugpalette ist besser als nur ein einziges Tool.“ Einer Einbettung stand somit nichts im Wege.

Sehen wir uns an, welche Möglichkeiten CppDepend Cppcheck-Anwendern bietet:

1. Probleme mit CQLinq abfragen

Mit CQLinq lassen sich die gefundenen Probleme ähnlich wie Daten in einer Datenbank abfragen. So können Sie beispielsweise alle Cppcheck-Probleme ermitteln:

cppcheck2

Oder die am häufigsten auftretenden Probleme:

cppcheck3

Ebenso hilfreich ist es, die Klassen mit den meisten Problemen zu identifizieren:

cppcheck4

Die vorherige Abfrage ist nützlich, zeigt aber nicht genau, welche Klassen die geringste Qualität aufweisen. Eine weitere aussagekräftige Metrik ist NBLinesOfCode. Wir können die Abfrage daher so anpassen, dass sie das Verhältnis zwischen der Anzahl der Probleme und NBLinesOfCode berechnet.

cppcheck6

Außerdem können wir nach besonders häufig verwendeten Methoden suchen, die Probleme enthalten. Fehler in solchen Methoden sollten bei der Behebung eine hohe Priorität erhalten.

cppcheck12

2. Entwicklung der Probleme verfolgen

Probleme in einem Projekt sind nichts Ungewöhnliches; praktisch jedes Projekt hat eine Reihe von Punkten, die behoben werden müssen. Entscheidend ist jedoch, die Qualitätsentwicklung des Projekts im Blick zu behalten. Steigt die Zahl der Probleme mit jeder Änderung und Weiterentwicklung, ist das ein schlechtes Zeichen. CppDepend bietet deshalb eine Trendüberwachung zur Erstellung entsprechender Diagramme.

Trenddiagramme basieren auf Metrikwerten, die bei den Analysen im Laufe der Zeit aufgezeichnet werden. Standardmäßig stehen mehr als 50 Trendmetriken zur Verfügung; eigene Metriken lassen sich ebenfalls unkompliziert definieren.

Mit diesem Trenddiagramm können wir die Entwicklung der von Cppcheck gemeldeten Probleme verfolgen:

cppcheck7

3. Individuelle HTML-Berichte erstellen

CppDepend ermöglicht es, dem HTML-Bericht zusätzliche Abschnitte hinzuzufügen, die ausgewählte CQLinq-Abfragen enthalten. Im Bereich „CQLinq Query Explorer“ wird eine als Bericht konfigurierte CQLinq-Gruppe durch einen orangefarbenen Rahmen hervorgehoben.

cppcheck10

Im HTML-Bericht sind diese zusätzlichen Abschnitte anschließend über das Menü erreichbar:

cppcheck11

4. Cppcheck in den Build-Prozess integrieren

CppDepend kennt das Konzept der „Critical CQLinq Rule“. Damit lassen sich Regeln mit hoher Priorität definieren, die niemals verletzt werden dürfen. Wird eine solche kritische Regel verletzt, kann der Build-Prozess automatisch abgebrochen werden.

Eine kritische Regel ist eine CQLinq-Regel, bei der die Option Critical Rule aktiviert ist:

Wird während des Build-Prozesses eine kritische Regel verletzt, gibt der Prozess CppDepend.Console.exe gibt einen Exit-Code ungleich null zurück. Dieses Verhalten kann genutzt werden, um den Build-Prozess abzubrechen, wenn eine kritische Regel verletzt wird.

So lässt sich problemlos eine kritische Cppcheck-Regel definieren, die den Build abbricht, sobald bestimmte Arten von Cppcheck-Problemen gefunden werden.

Fazit

CppDepend ist offen für andere Werkzeuge zur statischen Analyse. Auch eigene Tools lassen sich einfach integrieren, wie hier. beschrieben. Auf diese Weise können Sie sämtliche Funktionen von CppDepend nutzen, um die Ergebnisse etablierter Werkzeuge zur statischen C/C++-Analyse besser auszuwerten.

Ein besonderer Dank gilt Daniel dafür, dass wir sein hervorragendes Tool in CppDepend integrieren dürfen.

Artikel teilen