Anbieter zum Thema
Fortgeschrittene Methoden finden knifflige Fehler

Aber es gibt auch viel schwieriger zu erkennende Situationen von unerreichbarem Code und anderen potentiellen Programmfehlern. Um diese zu erkennen, benötigt man moderne Methoden der Programmanalyse. Im Programmauszug im Bild 2 verbirgt sich ein sogenanntes „memory leak“. Das bedeutet, dass nicht aller allokierter Speicher auch wieder freigeben wird. Zu Beginn der Funktion func1() im Bild 2 wird zunächst mit dem Schlüsselwort „new“ Speicher allokiert, auf den der Zeiger p zeigt. Am Ende der Funktion func1() wird der Speicher wieder freigeben, aber nicht auf jedem möglichen Pfad. Goanna, ein Werkzeug zur statischen Analyse von Software, zeigt dies durch eine Meldung zu Zeile 17 des Programmauszugs in Bild 2 an.

Goanna behauptet nun, dass es mindestens einen Pfad durch das Ende von func1() gibt, auf dem kein Aufruf der Funktion dealloc() erfolgt. Der Einfachheit halber gibt Goanna diesen Pfad dann auch an (siehe Bild 3). Der Pfad beginnt in Zeile 17, in der der Zeiger p definiert und zugewiesen wird. Wenn dann in Zeile 21 die Variable ok unwahr ist; in Zeile 23 die Variable error1 wahr ist; in Zeile 24 die Variable keypressed unwahr ist; und in Zeile 26 die Variable error2 ebenfalls unwahr ist: Dann gibt es keinen Aufruf von dealloc() und der Speicher wird nicht freigeben.
Software mit Model Checking überprüfen
Um das herauszufinden, könnte man alle möglichen Pfade auflisten und für jeden Pfad untersuchen, ob in ihm dealloc() aufgerufen wird oder nicht. Im Beispiel könnte das sogar mit vertretbarem Aufwand durchgeführt werden, weil die Anzahl der Pfade überschaubar ist. Leider wächst jedoch die Anzahl der Pfade exponentiell mit der Anzahl der Bedingungen. Deshalb verwendet Goanna für Prüfungen dieser Art das „Model Checking“.
Bei diesem Verfahren wächst der Aufwand nur linear mit der Größe des Kontrollflussgraphen. Man kann Vorher-/Nachher-Bedingungen prüfen oder beispielsweise sicherstellen, dass auf jedes new in jedem Pfad mindestens ein delete erfolgt. Aber es gibt Einschränkungen: Beispielsweise lässt sich nicht zählen und prüfen, ob auf jedem Pfad genau so viel new wie delete vorkommen.
Goanna ist ein Werkzeug für Windows und Linux, das auf die neusten Methoden aufsetzt. Dabei handelt es sich um Model Checking, abstrakte Datenwertverfolgung und interprozedurale Analyse. Es werden Programme in C und C++ analysiert. Goanna Studio arbeitet mit Eclipse/CDT und Visual Studio zusammen; Goanna Central ist als Kommandozeilenversion für den Build-Prozess gedacht.
* Frank Büchner arbeitet als Senior Test Engineer bei Hitex Development Tools in Karlsruhe und Dr. Ralf Huuck leitet seit 2009 die Ausgründung der Goanna Technologie bei der Red Lizard Software Pty Ltd in Australien.
(ID:36419140)