Viele Ressourcen erläutern die Vorteile statischer Analysewerkzeuge und wie sie dabei helfen können, eine Codebasis zu verbessern. Sie zeigen, was Sie durch ihren Einsatz gewinnen können. Aber haben Sie sich schon einmal gefragt, was Sie verlieren, wenn Sie sie nicht einsetzen?
Nehmen wir zum Beispiel eine Speicherbeschädigung, die dadurch entsteht, dass ein Zeiger zweimal freigegeben wird und zufällige Abstürze verursacht. Einen solchen Fehler zu finden, kann wenige Stunden bis mehrere Tage dauern. In C/C++ gibt es viele ähnlich riskante Probleme, insbesondere im Zusammenhang mit Speicherbeschädigungen. Ein einziges Problem kann wenige Dollar, aber auch viele Tausend Dollar kosten.
Die Auswirkungen eines Fehlers hängen außerdem von der Art des Programms ab: Ein Problem in einer Embedded-Anwendung, die eine Maschine steuert, hat nicht dieselben Folgen wie ein Absturz in einem Zeichenprogramm. Manchmal kann ein einziger Fehler Millionen oder sogar Milliarden Dollar kosten, wie im Fall von Ariane 5, bei dem ein Fehler 7 Milliarden US-Dollar kostete.
Was verlieren Sie, wenn Sie ein Werkzeug zur statischen Analyse einsetzen?
Let’s take Cppcheck als Beispiel. Es erkennt vor allem Fehlerarten, die Compiler normalerweise nicht finden. Das Werkzeug meldet zahlreiche interessante Probleme.
Der Download dauert weniger als eine Minute und die Konfiguration vielleicht 20 Minuten. Die Analyse selbst kann wenige Minuten bis viele Stunden dauern, doch währenddessen können Sie andere Aufgaben erledigen. Nach der Analyse liegen möglicherweise Tausende potenzielle Probleme vor; zunächst können Sie sich auf die Fehler mit der höchsten Priorität konzentrieren.
Letztlich verlieren Sie mit kostenlosen Werkzeugen zur statischen Analyse lediglich 30 Minuten und erhalten dafür eine Liste potenzieller Probleme, die Sie viele Tausend Dollar kosten könnten.
Bei kommerziellen Werkzeugen verlieren Sie mehr als nur Zeit: Sie müssen dafür bezahlen. Nehmen wir an, Sie kaufen ein Werkzeug für 1.000 US-Dollar und finden damit ein Problem, für dessen Suche ein Entwickler zwei oder drei Tage benötigen würde. Drei Arbeitstage eines C/C++-Entwicklers können – je nach Standort des Unternehmens – mehr als 1.000 US-Dollar kosten. Berücksichtigt man zusätzlich die versteckten Kosten eines einzelnen Fehlers, ist oft überraschend, wie teuer ein scheinbar einfaches Problem für ein Unternehmen werden kann. Im Web finden sich zahlreiche Beispiele dafür.
Hier sind einige kostenlose Werkzeuge zur statischen Analyse:
CppCheck (kostenlos): Cppcheck bietet zahlreiche Prüfungen, darunter:
- Prüfung auf Zugriffe außerhalb gültiger Grenzen
- Prüfung der Exception-Sicherheit
- Erkennung von Speicherlecks
- Warnung bei Verwendung veralteter Funktionen
- Prüfung auf ungültige Verwendung der STL
- Prüfung auf nicht initialisierte Variablen und ungenutzte Funktionen
Clang (kostenlos): ist ein C/C++-Compiler mit sehr interessanten Diagnosen. Die gemeldeten relevanten Probleme können unter anderem Folgendes betreffen:
- Verwendung veralteter Funktionen oder Konstrukte
- Probleme bei Typumwandlungen
- Initialisierungsprobleme
- OpenMP-Probleme und mehr.
Clang-tidy (kostenlos): ist ein auf Clang basierendes C++-Linter-Werkzeug. Es bietet ein erweiterbares Framework zum Diagnostizieren und Beheben typischer Programmierfehler, etwa Stilregelverletzungen, falscher Schnittstellennutzung oder Fehlern, die sich durch statische Analyse ableiten lassen. clang-tidy ist modular aufgebaut und bietet eine komfortable Schnittstelle zum Schreiben neuer Prüfungen. Hier finden Sie die Liste der Prüfungen von clang-tidy.
Es gibt viele weitere Werkzeuge zur statischen Analyse. Einige lassen sich unkompliziert ausprobieren, bei anderen müssen Sie den Anbieter kontaktieren und eine Testversion anfordern.
Wenn Sie nur 30 Minuten für einen Test von Cppcheck aufbringen können, ist diese Zeit sehr wahrscheinlich gut investiert.
Zusammenfassung
Am besten kombinieren Sie mehrere C++-Werkzeuge, um Probleme in Ihrer C++-Codebasis zu erkennen: Manche finden konkrete Fehler, andere zusätzlich fehleranfällige Situationen. Sie können mit kostenlosen Werkzeugen beginnen und die gemeldeten Probleme prüfen.
