Die GUI-Automatisierung hat den Ruf, unverhältnismäßig teuer und gleichzeitig oftmals frustrierend zu sein. Dabei bietet eine konsequent an den Masken und Bedienelementen von GUI-Anwendungen ausgerichtete Strukturierung der Testautomatisierung einen erfolgversprechenden Weg aus den üblichen Problemen der GUI-Automatisierung.
Folgende Herausforderungen tauchen bei der GUI-Automatisierung mit Testscripten regelmäßig auf:
Aufgrund dieser Probleme steht einer hohen Investition oft nur eine relativ kleine Ausbeute an fertigen Testscripten gegenüber, die darüber hinaus ständig überarbeitet werden müssen. Auch der Einsatz von „modernen“ Methoden hilft an dieser Stelle nicht immer weiter, da auch dort enge Einschränkungen für einen erfolgreichen Einsatz gelten.
Diesen beiden Ansätzen ist gemeinsam, dass bei der Automatisierung die Logik der zu automatisierenden Anwendung im Vordergrund steht. Der Testablauf als Ganzes wird in ein Programm umgewandelt, wenn auch, wie beim schlüsselwortgetriebenen Testen, in mehrere miteinander kombinierbare Teilprogramme.
Ein möglicher Ausweg aus dieser Problematik ist eine konsequent maskenorientierte Methode. Bei diesem Ansatz steht bei der technischen Umsetzung nicht mehr die Funktion der zu testenden Anwendung, sondern ausschließlich das äußere Erscheinungsbild im Vordergrund. Dabei wird die Programmierung der Automatisierungskomponenten (AKs) und die Erstellung von Testfällen vollständig voneinander getrennt.
Jede AK bildet eine Maske der Anwendung ab. Es wird konsequent jedes sichtbare Element einer Maske von der AK erfasst und adressierbar gemacht. Die Funktionalität der darunterliegenden Software wird dabei grundsätzlich nicht beachtet. Dadurch wird die Programmlogik der zu automatisierenden Anwendung und die AKs vollständig voneinander getrennt. Die einzelnen AKs werden als eigenständige, unabhängige Programme betrachtet.
Die korrekte Funktion einer AK ist dann nachgewiesen, wenn alle Maskenelemente korrekt adressiert werden können. Der funktionale Zusammenhang zwischen den einzelnen Elementen einer Maske spielt für die Erstellung der AKs keine Rolle. Es ist daher ausreichend, nur das implementierte Frontend ohne Funktion vorliegen zu haben. Für die Erstellung ist lediglich die Darstellung sämtlicher Elemente einer Maske notwendig. Dadurch wird die Umsetzung der Automatisierung unabhängig von den dargestellten Testfällen überprüfbar.
Für das Framework zur Erstellung von Testfällen aus den AKs werden nun zwei Ebenen benötigt: Makro- und Mikrosteuerung.
Makrosteuerung: In dieser Ebene werden die AKs in die durch den Testfall vorgegebene Reihenfolge gebracht. Um logische Abhängigkeiten, die nicht aus der Anwendung resultieren, zwischen den AKs zu vermeiden, besitzen alle AKs folgende zwei Eigenschaften:
Mikrosteuerung: Diese zweite Steuerungsebene wird eine für die Aktionen innerhalb einer Maske benötigt. Für jede AK gibt es eine Schnittstelle zu einer Datei welche die einzelnen Aktionen beschreibt, die von der AK zum Zeitpunkt der Ausführung auf der Maske durchgeführt werden sollen. Diese Aktionen werden wie beim schlüsselwortgetriebenen Design dargestellt.
Im Gegensatz zum traditionellen schlüsselwortgetriebenen Design sind die Schlüsselworte ausschließlich auf Maskenelementtypen bezogen. Dadurch wird erreicht, dass beispielsweise ein Element des Typs „Button“ mit jeder AK einer Anwendung dieselben Aktionen ausführen kann. Das von den Testfallerstellern zu verwendende „Wörterbuch“ kann so entsprechend übersichtlich gehalten und die Elementtypen leicht um zusätzliche Funktionen erweitert werden.
Die Programmierer der AKs benötigen keinerlei Fachwissen über die Anwendung:
Jede Maske wird nur ein einziges Mal implementiert:
Die Testfälle selbst können:
Die mit den Testfällen dargestellte Testabdeckung wird berechenbar:
Die Implementierung der Automatisierung ist begrenzt. Sind alle Masken durch AKs erfasst, so ist die technische Umsetzung der Automatisierung vollständig und abgeschlossen. Die Menge der darstellbaren hingegen Testfälle ist unbegrenzt, da die AKs immer wieder anders zusammengesetzt und mit anderen Daten sowie unterschiedlichen Aktionen aufgerufen werden können.
Aus meiner Sicht bietet eine konsequent an den Masken und Bedienelementen von GUI-Anwendungen ausgerichtete Strukturierung der Testautomatisierung erfolgversprechende Lösungen zu den üblichen Problemen der GUI-Automatisierung an.