Anwenderbericht Landeszentralbank, München:

Zeiten des "hautnahen" Testens bald vorbei

09.12.1977

Der ständig wachsende Aufwand für die Entwicklung und Wartung von Software-Produkten, neue Anforderungen durch Datenschutz und Datensicherung und die damit verbundenen organisatorischen und programmtechnischen Maßnahmen Sowie die immer komplexer werdenden Anwenderprogrammsysteme, sind die Hauptargumente für die Forderung nach mehr Zuverlässigkeit und Sicherheit von Software-Produkten. So werden heute Maßnahmen und Methoden diskutiert, die bezüglich der Entwicklung zuverlässiger Programme besondere Relevanz haben.

Dabei ist nicht das fehlerfreie Programm das Gesamtziel (dies wäre derzeit utopisch), sondern allein durch die Beschäftigung mit Fehlerursachen und die Suche nach tauglichen Fehler-Erkennungs-Methoden soll die Voraussetzung dafür geschaffen werden, das Problem der Zuverlässigkeit zumindest segmentweise in den Griff zu bekommen. Die Bemühungen um Verfahren - teilweise computergestützt - von der Systementwicklung bis hin zum Test und der Dokumentation zu betreiben, scheiterten in der Vergangenheit in erster Linie an den dafür fehlenden Grundvoraussetzungen: Sie sind heute durch moderne Entwicklungsmethoden, wie etwa die Strukturierte Programmierung und verwandte Techniken, gegeben.

Im Gegensatz zur Hardwareentwicklung, wo es schon immer geeignete Testhilfen gibt (und Software-Testhilfen zur Verfügung stehen) beginnt man bei der Softwareentwicklung erst heute, sieh solcher Werkzeuge zu bedienen. Für das Testen von Software-Produkten gab es bisher nur das einzige Gebot: "Je mehr desto besser."

Welche Voraussetzungen sind notwendig, um sinnvoll zu testen und Testhilfen einsetzen zu können?

Für die Qualität der Software-Produkte ist die Technik der Entwicklungsmethoden entscheidend und die g daraus entstehenden Möglichkeiten ff neue Teststrategien und Testhilfen entwickeln zu können. "Ingenieurmäßiges" Vorgehen bei der Programmentwicklung muß auch das Testen implizieren.

Da sich Teststrategien auf die Überprüfbarkeit der Diagnosemethoden im gesamten Programmsystem beziehen muß diese Verifikation von kleinen Einheiten ausgehen und zum Gesamtsystem fortschreiten (Einzeltest - Integrationstest - Komponententest - Systemtest). Dabei bildet die Topdown-Entwicklungsmethode als logische Fortsetzung der Strukturierten Programmierung die besten Voraussetzungen, diese Probleme zu lösen, denn Programmierung und Test gehen nach der Top-down-Methode Hand in Hand.

Viel Testhilfen - selten effektiv

Wesentliche Bedingung für das Testen ist neben dem strukturellen Aufbau des zu testenden Software-Produkts das Vorhandensein eines entsprechenden Angebotes an Testhilfen. Diese sind heute zwar vielfältig zu finden, im praktischen Einsatz jedoch selten effektiver; die Einsatzmöglichkeiten hängen zudem vom eingesetzten Betriebssystem und den für die Programmierung verwendeten Programmiersprachen ab:

Da gibt es zum Beispiel die "konventionellen" Diagnosehilfen. Hierzu werden neben den Ausgaben der Übersetzer und Compiler alle Testhilfsmittel gezählt, durch die eine Beobachtung des Testobjekts unterstützt wird (Dumps, Traces, Backtraces etc.) Diese Hilfen sind, sieht man einmal von den Übersetzungsprotokollen ab, recht schwerfällig zu handhaben, da man zum Einsatz im Programm und auf Steuerkartenebene etliche Vorbereitungen treffen muß.

Mittels Konsistenzkontrollen - dafür gibt es viele Pakete - können wahlweise zusätzliche Kontrollen (wie Einhaltung von Feldgrenzen) dynamisch durchgeführt werden. Da diese Testhilfen das Laufzeitverhalten der Programme jedoch verschlechtern und Kernspeicher beanspruchen, sollten sie an- und abschaltbar bzw. nachladbar sein. Die dynamische Kontrolle ist immer dann notwendig und sinnvoll, wenn es nicht möglich ist, Inkonsistenzen statisch, das heißt zur Umwandlungszeit, zu erkennen.

Programmkriterienbank Voraussetzung

Die meines Erachtens effektivsten Testhilfen bietet die interaktive Programmierung. Da man davon ausgehen kann, daß die Zeiten des "hautnahen" Testens an der Anlage bald vollends vorbei sein werden (Datenschutz, Datensicherung, closed-job Revision), ergeben sich durch die interaktive Programmierung die besten Voraussetzungen für den Einsatz von Testhilfen. Der Vorteil liegt einfach darin, daß sich die Organisation der Testarbeit nicht mehr nach den Belangen des Rechenzentrums richten muß, sondern sich an den Anforderungen des Programmierers und des zu testenden Programms orientieren kann.

Für den logischen Test eines Programms stehen bereits heute Testdialoghilfen zur Verfügung, die das dynamische Testen eines Programms erlauben, also interaktiv auf bestimmte Aktionen eines Programmlaufes durch Testanweisung reagieren. Hier ist zu fordern, daß während des Programmtests auf symbolische Adressen Bezug genommen werden kann des weiteren, daß bei jedem Fehler bestimmte Daten auf frei wählbare Ausgabemedien ausgegeben sowie zum Testzeitpunkt die Simulation von Dateien vorgenommen werden kann.

Die oben beschriebene Testhilfe setzt das Vorhandensein einer Programmkriterienbank voraus. Kein größeres System ist kontrollierbar wenn nicht technische Hilfen für die Verwaltung sämtlicher programmspezifischer Kriterien sowie eine damit einhergehende Ablauforganisation für den Änderungsdienst, für Statuskontrolle und Testabwicklung vorhanden sind. Da die Verbindung zwischen Methoden und Daten in einem Programmsystem sehr eng sind, muß jede Datenstrukturänderung in einer Kriterienbank lückenlos beschrieben sein.

Damit ist dann auch die Basis für eine teilweise automatisierte Wartung vorhanden.

Die maschinelle Analyse beschränkt sich bei den meisten Übersetzern auf reine syntaktische Prüfung. Daß hier wesentlich mehr getan werden kann, beweisen einige fortschrittliche Systeme, die auch versuchen. semantische Fehler zu finden. Durch sogenannte Programmanalysatoren können Quellprogramme mit Hilfe des Rechners so geändert werden, daß diese einfache Kontrolle der Tests rechnergestützt ausgeführt werden kann und nach Beendigung des Tests Ergebnisse auf Quellcode-Ebene sofort zur Verfügung stehen.

Eine der erstrebenswertesten Testhilfen überhaupt wäre eine automatische Testauswertung. Dabei werden Ergebnisse früherer fehlerfreier Testläufe für den Testergebnisvergleich herangezogen (Regressionstest). Dieses Verfahren kann besonders im Programmwartungsdienst eingesetzt werden. Ein solches Verfahren einheitlich für mehrere Programmsysteme aufzubauen, setzt das Erstellen von sogenannten Testpools voraus, die es ermöglichen, Testdaten grundsätzlich, quasi als Bestandteil eines Programms oder der Programme eines Systems, für die gesamte Lebenszeit eines Programms aufzubewahren und mitzupflegen.

* P. Peifer ist Leiter der System- und Anwendungsprogrammierung bei der Landeszentralbank in München.