Ein neuartiger Ansatz zur Generierung von Testsuiten, der von einer CLI-Technik angepasst wurde, umfasst die Verwendung eines Planungssystems. Planung ist eine gut untersuchte Technik aus dem Bereich der künstlichen Intelligenz (KI), die versucht, Probleme zu lösen, die vier Parameter umfassen:
- ein Anfangszustand,
- ein Zielzustand,
- eine Reihe von Operatoren und
- eine Reihe von Objekten, mit denen gearbeitet werden soll.
Planungssysteme ermitteln mithilfe der Operatoren einen Pfad vom Ausgangszustand zum Zielzustand. Als einfaches Beispiel für ein Planungsproblem könnte das Ziel darin bestehen, bei zwei Wörtern und einer einzigen Operation, die einen einzelnen Buchstaben in einem Wort durch einen anderen ersetzt, ein Wort in ein anderes zu ändern.
In Die Autoren verwendeten den Planer IPP, um diese Technik zu demonstrieren. Die Benutzeroberfläche des Systems wird zunächst analysiert, um die möglichen Operationen zu bestimmen. Diese werden zu den Operatoren, die im Planungsproblem verwendet werden. Als nächstes wird ein anfänglicher Systemzustand bestimmt und ein Zielzustand angegeben, von dem der Tester glaubt, dass er die Ausübung des Systems ermöglichen würde. Das Planungssystem bestimmt einen Pfad vom Ausgangszustand zum Zielzustand, der zum Testplan wird.
Die Verwendung eines Planers zur Generierung der Testfälle hat einige spezifische Vorteile gegenüber der manuellen Generierung. Ein Planungssystem generiert naturgemäß Lösungen für Planungsprobleme auf eine Weise, die für den Tester sehr vorteilhaft ist:
- Die Pläne sind immer gültig. Die Ausgabe des Systems ist entweder ein gültiger und korrekter Plan, der die Operatoren verwendet, um den Zielzustand zu erreichen, oder überhaupt kein Plan. Dies ist von Vorteil, da beim manuellen Erstellen einer Testsuite aufgrund ungültiger Testfälle, von denen der Tester dachte, dass sie funktionieren würden, dies aber nicht taten, viel Zeit verschwendet werden kann.
- Ein Planungssystem achtet auf die Reihenfolge. Um eine bestimmte Funktion zu testen, muss der Testfall häufig komplex sein und einem Pfad durch die GUI folgen, in dem die Vorgänge in einer bestimmten Reihenfolge ausgeführt werden. Wenn dies manuell durchgeführt wird, kann dies zu Fehlern führen und auch ziemlich schwierig und zeitaufwändig sein.
- Schließlich und vor allem ist ein Planungssystem zielorientiert. Der Tester konzentriert Testsuite Generation auf das, was am wichtigsten ist, Testen der Funktionalität des Systems.
Beim manuellen Erstellen einer Testsuite konzentriert sich der Tester mehr darauf, wie eine Funktion getestet wird (dh der spezifische Pfad durch die GUI). Durch die Verwendung eines Planungssystems wird der Pfad gepflegt und der Tester kann sich auf die zu testende Funktion konzentrieren. Ein weiterer Vorteil besteht darin, dass ein Planungssystem bei der Pfadgenerierung in keiner Weise eingeschränkt wird und häufig einen Pfad findet, der vom Tester nie vorhergesehen wurde. Dieses Problem ist sehr wichtig zu bekämpfen.
Eine andere Methode zum Generieren von GUI-Testfällen simuliert einen unerfahrenen Benutzer. Ein erfahrener Benutzer eines Systems neigt dazu, einem direkten und vorhersehbaren Pfad durch eine GUI zu folgen, während ein unerfahrener Benutzer einem zufälligeren Pfad folgen würde. Ein unerfahrener Benutzer wird dann wahrscheinlich mehr mögliche Zustände der GUI erkunden als ein Experte.
Die Schwierigkeit besteht darin, Testsuiten zu generieren, die die Systemnutzung von Anfängern simulieren. Die Verwendung genetischer Algorithmen wurde vorgeschlagen, um dieses Problem zu lösen. Alle Pfade durch das System sind keine zufälligen Pfade. Erstens wird ein unerfahrener Benutzer im Laufe der Zeit lernen und im Allgemeinen nicht dieselben Fehler wiederholt machen, und zweitens folgt ein unerfahrener Benutzer einem Plan und verfügt wahrscheinlich über einige Domänen- oder Systemkenntnisse.
Genetische Algorithmen funktionieren wie folgt: Eine Reihe von ‚Genen‘ werden zufällig erstellt und dann einer Aufgabe unterzogen. Die Gene, die die Aufgabe am besten erfüllen, werden beibehalten und diejenigen, die dies nicht tun, werden verworfen. Der Vorgang wird erneut wiederholt, wobei die überlebenden Gene repliziert und der Rest des Satzes mit mehr zufälligen Genen gefüllt wird. Schließlich wird ein Gen (oder eine kleine Gruppe von Genen, wenn es einen Schwellensatz gibt) das einzige Gen in der Menge sein und ist natürlich die beste Lösung für das gegebene Problem.
Bei GUI-Tests funktioniert die Methode wie folgt. Jedes Gen ist im Wesentlichen eine Liste von zufälligen ganzzahligen Werten einer festen Länge. Jedes dieser Gene repräsentiert einen Weg durch die GUI. Zum Beispiel würde für einen gegebenen Baum von Widgets der erste Wert im Gen (jeder Wert wird als Allel bezeichnet) das Widget auswählen, mit dem gearbeitet werden soll, die folgenden Allele würden dann die Eingabe in das Widget abhängig von der Anzahl der möglichen Eingaben in das Widget ausfüllen (zum Beispiel hätte ein Pull-Down-Listenfeld eine Eingabe … den ausgewählten Listenwert). Der Erfolg der Gene wird durch ein Kriterium bewertet, das das beste Verhalten von Anfängern belohnt.
Ein System, um diese Tests für das X Window System zu tun, aber erweiterbar auf jedes Fenstersystem ist in beschrieben. Das X Window System bietet Funktionen (über XServer und das Editors ‚ Protocol), um GUI-Eingaben dynamisch an das Programm zu senden und GUI-Ausgaben vom Programm abzurufen, ohne die GUI direkt zu verwenden. Zum Beispiel kann man XSendEvent() aufrufen, um einen Klick auf ein Pull-Down-Menü zu simulieren, und so weiter. Mit diesem System können Forscher die Generstellung und -prüfung automatisieren, sodass für jede zu testende Anwendung eine Reihe von Testfällen für Anfänger erstellt werden kann.