Formale Erfassung un... Examensarbeiten Spezifikation, Entwu...

Studienarbeit

Statische und dynamische Analyse der Bedingungsüberdeckung objektorientierter Java-Programme

 

Zusammenfassung

Moderne Software ist heutzutage sehr komplex. Diese Komplexität ist auch der Grund dafür, dass immer wieder Fehler in größeren Softwareprojekten auftreten bzw. Projekte vollständig scheitern. Ein aktuelles Beispiel ist die ALG-II-Software der Bundesagentur für Arbeit: Anfang 2005 mussten Hunderttausende Arbeitslosengeld-II Empfänger auf ihr Geld warten da Kontonummern, die weniger als 10 Stellen hatten, auf der falschen Seite (rechtsbündig statt linksbündig) mit Nullen aufgefüllt wurden. Alleine bei der Postbank waren 200.000 Empfänger betroffen.
In fast allen Software-Lebenszyklusmodellen existiert eine Test-Phase, in der versucht wird möglichst alle derartige Fehler zu finden. Diese Phase stellt eine Art 'Qualitätssicherung' der Software dar. Die in dieser Phase angewandten Prüftechniken können gemäß Liggesmeyer allgemein in statische und dynamische Testverfahren klassifiziert werden. Statische Testverfahren bestimmen durch statische Analyse die Korrektheit des Programms, ohne es ausführen zu müssen. Ein Beispiel ist das Model-Checking Verfahren, das anhand eines Software-Modells versucht, die Korrektheit gegenüber der Spezifikation zu beweisen. Dieses Verfahren liefert bei einer Verletzung der Spezifikation gleich ein Gegenbeispiel für den Nachweis des Fehlers.
Im Gegensatz dazu wird bei den dynamischen Testverfahren das Programm mit korrekten Eingaben ausgeführt. Da die Eingaben als korrekt vorausgesetzt werden können vorhandene Fehler durch fehlerhafte Ausgaben erkannt werden. Auch ein fehlerhaftes Verhalten des Programms weist auf einen Fehler in der Software hin. Die dynamischen Verfahren verwenden dazu den Kontroll- bzw. Datenfluss des Programms, der zur Laufzeit überwacht wird. Ein Vertreter kontrollflussorientierter Tests ist der Bedigungsüberdeckungstest, der zum adäquaten Testen komplexer Bedingungen verwendet wird. Die verschiedenen Ausprägungen des Bedingungsüberdeckungstests, deren Eigenschaften sowie eine mögliche Implementierung für die Sprache Java ist Gegenstand dieser Arbeit.
Die vorliegende Arbeit gliedert sich wie folgt: In Kapitel 2 werden die fünf Bedingungsüberdeckungskriterien anhand einer Beispielbedingung näher beschrieben und der Überdeckungsgrad definiert, der die Vollständigkeit eines Tests bezogen auf ein bestimmtes Testkriterium angibt. In Kaptitel 3 werden Konzepte vorgestellt, wie die klassischen Bedingungsüberdeckungskriterien auf die Sprache Java übertragen werden können und was dabei speziell beachtet werden muss. Der Hauptteil bildet Kapitel 4, in dem das implementierte Werkzeug näher vorgestellt wird. Das Kapitel 5 schließt durch eine kurze Zusammenfassung und einen Ausblick auf mögliche Verbesserungen und Erweiterungen des Werkzeugs die Arbeit ab.

Bearbeiter: Dominik Schindler

Betreuer: Dr.-Ing. Norbert Oster