7.2 Der Debugger
Wie bei jeder komplexen Entwicklung wird es ab einem gewissen Punkt nötig sein, Probleme in einer Testsuite zu debuggen, die nicht mehr einfach durch Analysieren der Elemente und der Struktur einer Testsuite zu lösen sind. Zu diesem Zweck verfügt QF-Test über einen intuitiven Debugger. Sollten Sie bereits mit dem Debuggen von Programmen in Java oder anderen Programmiersprachen vertraut sein, werden Sie sich mit seiner Funktionsweise und Bedienung schnell zurechtfinden.
7.2.1 Aktivieren des Debuggers
Der QF-Test Debugger kann direkt aufgerufen werden, indem ein oder
mehrere Knoten selektiert und der "Einzelschritt ausführen"
oder der "Gesamten Knoten ausführen" Button
gedrückt werden. Die zugehörigen Tastaturkürzel und
Menüeinträge sind F7 und F8 bzw.
»Debugger«-»Einzelschritt ausführen«
und
»Debugger«-»Gesamten Knoten ausführen«
Diese Operationen werden in "Debugger Kommandos" näher
erläutert.
Wenn Sie einen Test normal über den "Wiedergabe" Button starten (siehe "Abspielen von Tests"), wird der Debugger nur aktiv, wenn eine der folgenden Bedingungen eintritt:
- Ein benutzerdefinierter Breakpoint wird angetroffen. Näheres zu Breakpoints finden Sie in "Breakpoints setzen und löschen".
- Der Testlauf wird manuell durch Drücken des "Pause" Buttons, von F9 oder über den »Wiedergabe«-»Pause« Menüeintrag unterbrochen.
- Eine Exception wird geworfen oder ein Fehler oder eine Warnung tritt auf und die entsprechende Option zum automatischen Unterbrechen ist gesetzt (vgl. Option Automatisch unterbrechen).
Wenn der Debugger die Ausführung des Tests anhält, wird der Knoten, der als nächster ausgeführt wird, mit einem farbigen Rahmen um das Icon markiert. Die Farbe des Rahmens signalisiert den Grund der Unterbrechung. Nach manuellem Eingreifen, einem Breakpoint oder bei schrittweiser Ausführung ist der Rahmen schwarz. Orange, rot und fett rot signalisieren einen Stopp nach einer Warnung, einem Fehler oder einer Exception, entsprechend der Fehlermarkierung im Protokoll.
Hinweis Wird der Debugger aufgrund einer Warnung, eines Fehlers oder einer Exception betreten, wird die Ausführung auf den Beginn des fehlerhaften Knotens zurückgesetzt, so dass Sie die Möglichkeit haben, die Ursache zu beseitigen und den Knoten erneut auszuführen. Wenn das nicht gewollt oder nicht möglich ist, können Sie den Knoten einfach überspringen (vgl. "Debugger Kommandos").
In der Standardansicht (Workbench-Ansicht) kann der Debugger direkt vom normalen Testsuitefenster aus bedient werden. Informationen zum Öffnen des Debugger-Fensters in der Einzelfensteransicht finden Sie in Das separate Debugger-Fenster.
7.2.2 Anzeige der aktuellen Variablenwerte
Im Debug-Modus zeigt der untere Teil des Testsuite-Fensters eine Liste der Variablen mit ihren Werten für den aktuellen Ausführungsstand. Die Liste ist in einen Primärstapel (oberer Teil) und in einen Sekundärstapel darunter aufgeteilt. Variablen mit dem gleichen Namen können an beliebig viele der Knoten gebunden sein. Der tatsächlich von QF-Test verwendete Wert ergibt sich durch die Reihenfolge der Knoten von oben nach unten. Das heißt, wenn Variablen mit dem gleichen Namen an mehrere Knoten gebunden wurde, wird der Wert derjenigen verwendet, deren Knoten sich am weitesten oben in der Liste befindet.
Ein Klick auf einen der Knoten übernimmt die Variablendefinitionen eines Knotens in den rechten Teil des Fensters, wo sie bearbeitet, neue Variablen hinzugefügt oder bestehende Variablen gelöscht werden können. Diese Änderungen wirken sich sofort auf den aktuellen Testlauf aus, sind aber temporärer Natur, das heißt sie werden nicht in die Variablendefinitionen des zugehörigen Knotens übernommen. Der Variablenwert ist nach der Bearbeitung immer eine Zeichenkette. Mit einem Doppelklick auf den Knoten in der Variablenlist können Sie schnell zu dem Knoten in seiner Testsuite navigieren und dort den Wert permanent setzen.
Die Werte der Variablen sind im Normalfall Zeichenketten. Falls dies nicht zutrifft, wird der Typ des Variablenwerts in runden Klammern vor dem tatsächlich Wert dargestellt. Falls Sie solche Werte in der Variablenliste bearbeiten, werden sie automatisch in Zeichenketten umgewandelt - erkennbar daran, dass der Typ nicht mehr angezeigt wird.
Für den primären Stapel werden alle Knoten dargestellt, selbst wenn sie keine Variablen binden, für den sekundären Stapel nur solche, an die Variablen gebunden wurden.
Über die Einstellung »Ansicht«-»Terminal«-»Baum dem Terminal vorziehen« können Sie steuern, ob die Variablendefinitionen über die ganze Fensterbreite gehen oder nur den rechten Teil unter der Detailanzeige einnehmen.
7.2.3 Debugger Kommandos
Die meisten Debugger Kommandos entsprechen denen anderer Debugger. Einige Kommandos gehen dabei über die übliche Funktionalität hinaus.
Das schrittweise Debuggen einer Testsuite wird durch folgende drei Operationen ermöglicht:
-
Der "Einzelschritt ausführen" Button
(F7, »Debugger«-»Einzelschritt ausführen«) führt den aktuellen Knoten aus und setzt die
Ausführungsmarke auf den nächsten auszuführenden Knoten, egal wo
sich dieser in der Baumstruktur befindet. Diese Funktion ist z.B.
hilfreich, um eine Prozedur oder eine Sequenz zu
debuggen.
-
Der "Gesamten Knoten ausführen" Button
(F8, »Debugger«-»Gesamten Knoten ausführen«) führt den aktuellen Knoten und alle seine
Kindknoten aus und setzt die Ausführungsmarke anschließend auf den
nächsten Knoten der selben Ebene. Hiermit können Sie eine
Prozedur oder eine Sequenz als ganzes ausführen,
ohne sich einzeln durch ihre Kindknoten zu arbeiten.
-
Der "Bis Knotenende ausführen" Button
(Strg+F7,
»Debugger«-»Bis Knotenende ausführen«) führt den aktuellen Knoten und alle
folgenden Knoten auf der selben Ebene aus (inklusive ihrer
Kindknoten) und setzt dann die Ausführungsmarke auf den nächsten
Knoten der nächsthöheren Ebene. Diese Operation erlaubt es z.B.,
beim Debuggen einer Prozedur oder einer Sequenz
diese ohne weitere Unterbrechung bis zum Ende auszuführen.
Die folgenden Funktionen erweitern den QF-Test Debugger um die Möglichkeit, Knoten einfach zu überspringen, ohne sie auszuführen.
-
Der "Knoten überspringen" Button
(Shift+F9, »Debugger«-»Knoten überspringen«)
springt ohne Ausführung über den aktuellen Knoten und verschiebt die
Markierung auf den nächsten Knoten der selben Ebene.
-
Der "Aus Knoten herausspringen" Button
(Strg+F9, »Debugger«-»Aus Knoten herausspringen«) beendet sofort die
Ausführung der aktuellen Prozedur oder Sequenz und
springt zum nächsten Knoten der nächsthöheren Ebene.
Noch mächtiger ist die Möglichkeit, den Test mit einem beliebigen anderen Knoten fortzusetzen, sogar in einer anderen Testsuite. Dabei werden so viele Informationen wie möglich im aktuellen Ausführungskontext erhalten, inklusive der gebundenen Variablen. Je näher der neue Zielknoten dem aktuellen Knoten ist, desto mehr Informationen können erhalten werden.
Sie können den Test durch Drücken von Strg+, oder über den Menüeintrag »Wiedergabe«-»Ausführung hier fortsetzen« bzw. den entsprechenden Eintrag im Kontextmenü beim selektierten Knoten fortsetzen. Dabei wird nur der aktuelle Knoten gewechselt, die Ausführung läuft nicht automatisch wieder an, sondern kann durch Einzelschritte oder andere Aktionen gezielt fortgeführt werden.
Folgende weitere Kommandos stehen zur Verfügung:
-
Der "Exception erneut werfen" Button
(»Debugger«-»Exception erneut werfen«) ist nur dann aktiv, wenn der Debugger aufgrund
einer Exception aufgerufen wurde. Damit können Sie die Exception
weiterreichen und so von der Testsuite behandeln lassen, als wenn der
Debugger gar nicht erst eingegriffen hätte.
-
Der "Aktuellen Knoten finden" Button
(»Debugger«-»Aktuellen Knoten finden«) setzt die Selektion im Baum direkt auf den als
nächstes auszuführenden Knoten. Dies ist eine nützliche Abkürzung,
um nach einigem Herumwandern in der Testsuite zurück zur aktuellen
Ausführung zu gelangen.
7.2.4 Breakpoints setzen und löschen
Das Setzen eines Breakpoints für einen Knoten veranlasst den Debugger, einen Testlauf vor dem Betreten dieses Knotens anzuhalten. Breakpoints werden im Baum durch ein "(B)" vor dem Namen des Knotens gekennzeichnet.
Breakpoints können mittels Strg+F8 oder dem Menüeintrag »Debugger«-»Breakpoint an/aus« individuell gesetzt oder gelöscht werden. Wenn Sie mit dem Debuggen fertig sind, können Sie eventuell übrig gebliebene Breakpoints mittels »Debugger«-»Alle Breakpoints löschen« entfernen. Dieses Kommando entfernt alle Breakpoints aus allen geöffneten Testsuiten.
Hinweis Breakpoints sind kurzlebig und werden daher nicht mit der Testsuite abgespeichert.
7.2.5 Das separate Debugger-Fenster
Wenn Sie mit der Einzelfensteransicht arbeiten (Workbench-Ansicht aktivieren ist nicht gesetzt), muss der Debugger in einem eigenen Debugger-Fenster bedient werden. Dieses kann mittels »Debugger«-»Debugger-Fenster öffnen« nach Anhalten des Testlaufs geöffnet werden.
Das Debugger-Fenster kann auch durch Setzen der Option Debugger-Fenster immer öffnen immer automatisch geöffnet werden, wenn der Debugger die Ausführung eines Tests unterbricht. Diese Option ist auch direkt über das Menü »Debugger«-»Optionen« zugänglich. Wenn Sie das Debugger-Fenster explizit öffnen oder schließen, wird diese Entscheidung für den Rest des Testlaufs respektiert und die Option so lange außer Kraft gesetzt.
Das Debugger-Fenster ist den normalen Testsuitefenstern sehr ähnlich. Sie können Knoten selektieren und deren Attribute in der Detailansicht bearbeiten. Es können jedoch keine Knoten entfernt oder hinzugefügt werden und es stehen keine Dateioperationen und kein Rekorder oder andere komplexe Funktionen zur Verfügung. An diese gelangen Sie sehr einfach, wenn Sie mittels Strg+T aus dem Debugger-Fenster direkt zum selben Knoten im Fenster seiner Testsuite springen. Sie finden diese Funktion auch als »Knoten in Testsuite finden« im »Bearbeiten« Menü oder dem Kontextmenü.