Testhilfen

04.11.1977

Dr. Werner Dirlewanger, Institut für Informatik, Universität Stuttgart.

II. Teil

Der vorliegende Aufsatz stellt Fortsetzung und Abschluß einer Beispielsammlung guter Testhilfen dar, wie sie heute an jeder Rechenanlage selbstverständlich sein sollten, es leider aber nicht sind. Es handelt sich dabei um einen frommen Wunschkatalog schöner Dinge, sondern um funktionelle Leistungen, deren praktischer Nutzen längst erweisen ist und deren leichte Realisierbarkeit in einigen sehr modernen Systemen aufgezeigt wird.

- Trace: Er gibt eine genaue Verfolgung des Programmlaufes auf Quellesprachebene. Dabei werden entweder einzelne Programmbereiche oder das ganze Programm im Ablauf protokolliert. Angegeben werden etwa: GOTO-Anweisungen (Sprünge), Wertweisungen an Variablen oder Fehlelemente, Unterprogrammaufrufe, IF-Anweisungen (Bedingungen) oder Kombinationen solcher Ereignisklassen.

- Backtrace: Er spart gegenüber dem Trace Rechenzeit und Druckseiten. Dies geschieht dadurch, daß wie beim Trace der Ablauf mitverfolgt wird, wobei aber jeweils die letzten Meldungen (etwa n = 50) gepuffert bleiben und nicht ausgegeben werden. Nur im Alarmfall oder auf explizite Anweisung des Benutzers wird der Pufferinhalt zum Druck aufbereitet und ausgegeben.

- Kontrollepunkte: Durch besondere Angaben im Kompiliere-Komando können beliebige Programmzeilen mit zusätzlichen Marken versehen werden, ohne daß der Quelltext verändert wird. Diese Marken ("Kontrollpunkte") sind der beiden Zustände "passiv" und "aktiv" fähig. Aktivsetzen und Passivsetzen kann im Execute-Kommando oder durch besondere Kommandos erfolgen. Wird im Lauf des Programmes eine Quellzeile mit einem aktivgesetzten Kontrollpunkt erreicht, dann wird derb Lauf unterbrochen und es ist Gelegenheit ,per Kommando in den Lauf einzugreifen, während alle passivgesetzten Kontrollpunkte ohne Programmunterbrechung übergangen werden. Als Eingriff kommen etwa in Frage (und sind in Form von Kommandos bei Batch vorzudefinieren): a) Es soll (auf Quellebene!) eine variable, ein Feldelement, ein Feld gedumpt werden; b) es sollen die momentane Aufrufverschachtelung oder Teilangaben dazu ausgegeben werden; c) alle Variablen eines Unterprogrammes sollen gedumpt werden; d) ein Backtrace mit n Schritten soll ausgegeben werden; e) eine oder mehrere Trace-Versionen sollen eingeschaltet werden (oder aus, falls ein); f) gewisse aktive Kontrollpunkte sollen passivgesetzt werden und/oder gewisse passive Kontrollpunkte sollen aktivgesetzt werden, wobei es möglich sein soll, daß dies erst geschieht, wenn der Kontrollpunkt soundsoviele Male durchlaufen ist) g) logische Geräte- und Datei-Nummern sollen umbenannt werden, so daß zum Beispiel mit einer Testdatei (statt Realdatendatei) weitergerechnet wird. Nach dem Eingriff soll das Programm weiterlaufen. Die Job-Control-Language muß ausreichende Sprach mittel haben, um solche Eingriffe für Batchjobs effizient und bequem formulieren zu können. Weiterhin müssen diese Leistungen im interaktiven Betrieb - so wie dies nachfolgend beschrieben wird - voll zugänglich sein.

- Anweisungen an ein laufendes Programm im interaktiven Betrieb: Zum interaktiven Austesten eines Programmes muß es möglich sein , daß dessen Lauf unterbrochen und nach einem Eingriff wieder fortgesetzt wird. Als Grund zum Unterbrechen kommen in Frage: a) Ein bestimmter Zeitpunkt (etwa sofort anhalten); b) an einer bestimmten Stelle anhalten (etwa wenn Quellzeile 4711 zum 41sten mal erreicht ist, oder wenn Unterprogramm SUSI zum erstenmal aufgerufen wird); c) es soll angehalten werden, wenn eine bestimmte Bedingung erfühlt ist (etwa "G1 größer 3,417" und gleichzeitig "BOOL1 = true"). Die Job-Control-Language muß geeignete Hilfen für diese Fälle des Anhaltes geben, wobei im Falle "b)" Kontrollpunkte mitzuverwerden sind. Hat ein Programm nun angehalten, dann soll eine Interaktion des Benutzers mit dem Programm möglich sein, bevor es wieder weitergestartet wird, oder aber vom Benutzer endgültig abgebrochen wird. Interaktionen sind zum Beispiel. Dumpen, Variablenwerte anzeigen, Wert einzelner Feldelemente anzeigen, Rückverfolger starten und Aufrufverschachtelung ermitteln, Aktivsetzen und Passivsetzen von Kontrollpunkten, Backtrace ausgeben, Werte von Variablen oder einzelnen Feldelementen verändern ( Neusetzen), Trace ein/ausschalten, andere Traceversion wählen und vieles andere mehr. Damit kann der Dynamische Lauf des Programmes versuchsweise beliebig abgeändert werden beziehungsweise sehr detailliert auf Quellsprachebene beobachtet werden.