Kapitel 27. Fehlersuche / bug hunting

Inhaltsverzeichnis

Skriptcheck
Variablenwerte überprüfen
HTML-Ausgabe prüfen

Alle Software ist fehlerträchtig. Dafür gibt es viele Gründe und bislang waren die Versuche, Fehler und Fehlerquellen im Vorwege auszuschließen, nicht sehr erfolgreich. Programmierte Fragebögen stellen selbst Software dar, daher ergibt sich häufiger die Situation, Fehler im Skript suchen zu müssen.

Skriptcheck

Den ersten Anlaufpunkt bietet der Skriptcheck in der grafischen Oberfläche im Bereich »Surveys« unter [Configure] (Q. Desktop oder Q. Server). Die Prüfung liefert keine zeilengenauen Hinweise auf die Fehler, weist aber durch den Kontext auf die Frage, in deren Zusammenhang ein Fehler auftritt. Der Skript-Check berücksichtigt verschiedene Fehlerquellen. und weist auf Syntaxfehler wie unzulässige Zeichen in Variablennamen oder ein falsch definiertes Opennumformat hin, berücksichtigt aber auch den Ablauf und warnt etwa bei Fragen, die nicht im Interview-Ablauf enthalten sind,

Das geschriebene Skript unterscheidet sich vom ausgeführten Skript, weil Q. die einzelnen Dateien, aus denen das Skript womöglich besteht, erst einmal zusammenführt und sämtliche Platzhalter und Makros durch die eigentlichen Werte ersetzt. Daher kann es insbesondere bei Makros helfen, auch das expandierte Skript im Auge zu behalten, wie es sich über [Expanded script] herunter laden lässt (ebenfalls unter [Configure] zu finden),

Unter Umständen kommt ein Fehler auch erst später zum Tragen und tritt nicht an der Quelle auf. Hier kann es helfen, Teile des Skripts nach und nach auszukommentieren, um die Fehlerquelle zu isolieren.

Variablenwerte überprüfen

Ein anderes Vorgehen besteht darin, die Werte zu untersuchen, die Variablen annehmen. Das lässt sich am einfachsten über den @insert-Mechanismus erreichen.

textq debug;
text="
1: @insert(nq.1) <br />
2: @insert(nq.2) <br />
3: @insert(nq.3) <br />
numq: @insert(nq) 
";
    

Das Beispiel gibt die verschiedenen Werte einer NumQ aus, jeweils einzeln an den bezeichneten Stellen des Arrays und zum Schluss den Array insgesamt. @insert() funktioniert ausschließlich in echten Textbereichen wie text="", title="", etc... Variablen können in einem Skript aber auch an anderen Stellen auftauchen. Deshalb lässt sich die gleiche Auskunft auch mit dem Print-Befehl in einem ActionBlock erreichen, der an die Frage gehängt wird.

continueActionBlock={
   print(nq.1);
   print(nq.2);
   print(nq.3);
   print(nq);
};
    

Durch den Print-Befehl werden die Werte in eine Datei namens actionlog.txt im text-Verzeichnis geschrieben:

PrintAction: variable: nq.1; value: 4.0
PrintAction: variable: nq.2; value: 5.0
PrintAction: variable: nq.3; value: 6.0
PrintAction: variable: nq; value: 4.0 5.0 6.0
    

Da @insert in Actionblöcken nicht zur Verfügung steht, können Variablen dort nur mit print überprüft werden. Das ist unabdingbar, um auch selbstdefinierte und berechnete Variablen, die nur in Actionblöcken auftreten, im Blick behalten zu können.

HTML-Ausgabe prüfen

Fehler, die bei der Darstellung des Fragebogens im Browser auftreten, werden mit großer Wahrscheinlichkeit nicht durch das Skript selbst verursacht, sondern durch mitgegebene CSS- oder Javascript-Anweisungen, die nicht nur in den Skript-Dateien sondern auch im Template stecken können. Die meisten Browser stellen heute eine Möglichkeit bereit, die von Q. generierte HTML-Seite in allen Einzelheiten zu untersuchen (->Rechtsklick auf ein Element in der Seite ->Element untersuchen). Für Firefox etwa existiert mit Firebug ein altgedientes Plugin, das verschiedene Sichtweisen auf eine HTML-Seite ermöglicht, vom HTML-Code über Einzelheiten der CSS-Datei bis hin zur Darstellung der Struktur oder dem Blick auf den Javascript-Code.