Open Source im professionellen Einsatz

Software testen, Fehler aufspüren

Debugging

,

Selbst die besten Programmierer machen Fehler - immer wieder. Je nach Erfahrung des Entwicklers, Komplexität des Projekts und Wichtigkeit des Endprodukts bedarf es unterschiedlicher Debugging- und Testmethoden sowie geeigneter Tools.

Inhalt

 

28

GDB-Workshop
Einführung in die Fehlersuche mit dem GNU-Debugger: So finden
Programmierer die versteckten Bugs.

36

Data Display Debugger
Das grafische GDB-Frontend gibt dem Entwickler Zugriff auf alle
Daten, die seine Applikation intern produziert.

40

Purify Plus
Gut und teuer: Das Qualitätssicherungs-Trio Purify
(Memory-Debugger), Quantify (Profiler) und Pure Coverage.

44

Mock-Objekt
Dieses Werkzeug für Unit-Tests simuliert eine
Produktionsumgebung, um C++-Klassen einzeln realitätsnah zu
prüfen.

50

Ruby-Modul »Test::Unit«
Die Skriptsprache Ruby enthält ein eigenes Framework für
Unit-Tests.

114

Perl-Snapshot
Passend zum Titelthema erklärt der Snapshot in der
Programmieren-Rubrik diesmal, wie der im Perl-Interpreter
eingebaute Debugger funktioniert.

Die menschliche Weise, logisch zu denken, funktioniert nachweislich gut[1]. Nur zum Programmieren eignet sie sich offenbar nicht besonders. Auch sehr erfahrene Entwickler machen wieder und wieder die gleichen Fehler. Rund 30 Prozent des Gesamtaufwands eines typischen Softwareprojekts entfallen darum auf Fehlersuche und Tests.

Einfache Fehler sind auch einfach zu finden

Die simplen Missgeschicke - Syntaxfehler, vertippte Variablennamen oder nicht eingebundene Bibliotheken - finden schon Compiler und Linker. Von einer schlecht gedachten Schleifenbedingung oder einem unerwarteten Rückgabewert einer Funktion erfährt der Programmierer so jedoch nichts. In ganz einfachen Fällen behilft er sich mit zusätzlich eingebauten Statusmeldungen, die beispielsweise Variableninhalte über die Konsole ausgeben.

Fehler in der Zeigerarithmetik oder ähnlich vertrackte Dinge sind so nicht zu finden - ein Debugger wie der Klassiker GDB (siehe Workshop ab Seite 28) oder der bedienerfreundliche DDD (Seite 36) müssen her. Eine sündteure Tool-Suite wie Purify Plus ist für die brettharten Fälle genau richtig.

Prävention statt Absturz

Test-getriebene Entwicklung [2] soll grobe Programmierfehler vorab vermeiden und damit den Einsatz des Debuggers seltener machen. Bei diesem Modell überprüfen Unit-Tests die Funktion kleiner, überschaubarer Programmeinheiten. Die Tests schreibt der Programmierer am Anfang seiner Arbeit und gibt damit den Entwicklungsweg des Produktionscode vor. Der Artikel auf Seite 50 gibt Einblick in diese Methode und zeigt einige Tests in der leicht verständlichen Skriptsprache Ruby.

Komplexere Testsituationen mit vielen Programmmodulen lassen sich aber nur mit viel Aufwand als Unit-Test nachstellen. Mock-Objekte, die so tun, als wären sie echte Objekte aus dem Produktionscode, können helfen - etwa das Mockpp-Paket unter C++ (Seite 44). Die Komplexität dieser Lösung zeigt auch, wie schnell der Programmieraufwand für die Testumgebung steigt - oft ist sie aufwändiger als der Produktionscode. Entsprechend vergrößert sich das Fehlerpotenzial der Tests selbst.

Letztlich gilt es, die Balance zwischen dem Aufwand für die Tests und ihrem Nutzen zu finden. Das Maß richtet sich dabei stark nach dem Anwendungsfeld. Wer eine Textverarbeitung programmiert, wird - die Endanwender mögen das verzeihen - weniger Aufwand in komplexe Tests stecken, als es der Entwickler einer kritischeren Anwendung tun muss.

Ein plastisches Beispiel unterlassener Test- und Debugging-Leistung lieferte am 4. Juni 1996 die Ariane-5-Rakete infolge eines unentdeckten Programmierfehlers in einem ihrer Bordcomputer [3]. Außerhalb der Reichweite jedes Debuggers und unbeeindruckt von menschlicher Logik explodierte der Stolz europäischer Raumfahrt in 3700 Meter Höhe.

Infos

[1] Verliehene Nobel-Preise: [http://www.nobelpreis.org]

[2] Test Driven Development: [http://c2.com/cgi/wiki?TestDrivenDevelopment]

[3] Ariane-5-Report: [http://www.esa.int/export/esaCP/Pr_33_1996_p_EN.html]

Diesen Artikel als PDF kaufen

Als digitales Abo

Als PDF im Abo bestellen

comments powered by Disqus

Ausgabe 07/2013

Preis € 6,40

Insecurity Bulletin

Insecurity Bulletin

Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...

Linux-Magazin auf Facebook