Ein seit jeher bestehendes Ziel für Unternehmen im Allgemeinen und den IT-Bereich im Besonderen ist die Steigerung der Effizienz durch Automatisierung von Prozessen. Dies schließt die Automatisierung des Testens der Anwendung ein. Statt von Hand die Anwendung zu bedienen und in Nachtests immer wieder die gleichen Schritte auszuführen, soll dies nun unter Verwendung eines geeigneten Tools oder per Skript von allein geschehen.
Das Ziel ist also klar, doch wie kommt man dorthin? Wie so oft führen viele Wege ans Ziel, aber nicht alle sind gleich gut geeignet. Eine Möglichkeit besteht natürlich darin dieselben Testfälle, die man zuvor manuell ausgeführt hat, eins zu eins in ein Skript zu überführen. Es geht jedoch auch besser. Man sollte daher die Umstellung vom manuellen hin zum automatisierten Testen als Gelegenheit sehen, die Struktur der Testfälle und das Vorgehen bei der Testerstellung zu verbessern. Ein Verfahren, das sich hierbei anbietet und für das Testen vieler Anwendung infrage kommt, ist das schlüsselwortgetriebene Testen.
Wenn man alle möglichen Testfälle für eine bestimmte Anwendung miteinander vergleicht, so stellt man in der Regel fest, dass viele davon dieselben Testschritte enthalten. Genau hier setzt das schlüsselwortgetriebene Testen an. Die Idee besteht darin, Testfälle aus einzelnen, nicht weiter unterteilbaren Testschritten, den sogenannten Schlüsselwörtern, aufzubauen. Da aber derselbe Testschritt (d.h. dasselbe Schlüsselwort) wie oben festgestellt in mehreren Testfällen auftritt, muss es auch nur einmal implementiert werden und kann dann wiederverwendet werden. Das Vorgehen beim schlüsselwortgetriebenen Testen zeichnet sich daher dadurch aus, dass ein Pool an Schlüsselwörtern angelegt wird und die Testfälle ausschließlich mit den dort angelegten Schlüsselwörtern erstellt werden.
Worin liegen nun aber die Vorteile des schlüsselwortgetriebenen Testens?
- Der erste Vorteil zeigt sich in einer Beschleunigung der Erstellung weiterer Testfälle. Wenn ab einem gewissen Punkt der Pool an Schlüsselwörtern groß genug geworden ist, können neue Testfälle entweder vollständig oder zumindest zu einem großen Teil durch Rückgriff auf bestehende Schlüsselwörter erstellt werden. Der Aufwand für Neuimplementierungen wird auf diese Weise deutlich gesenkt.
- Wenn man schon die Mühe auf sich genommen hat, eine Reihe von Testfällen zu erstellen, so möchte man diese auch über einen langen Zeitraum verwenden können. Anders ausgedrückt, auch für das Testen spielt Wartbarkeit eine große Rolle. Es liegt auf der Hand, dass Änderungen in der Anwendung sich auch auf die Testfälle auswirken, so dass diese angepasst werden müssen. Wenn die Änderung nun aber einhundert Testfälle betrifft, bedeutet dies, dass ich die Testskripte von einhundert Testfällen von Hand anpassen muss? Für das schlüsselwortgetriebene Testen lautet die Antwort eindeutig „Nein“. Das Schlüsselwort selbst ist nur einmal implementiert und alle Testfälle greifen auf diese eine Implementierung zurück. Im Umkehrschluss muss daher bei einer Änderung auch nur diese eine Implementierung angepasst werden.
Das schlüsselwortgetriebene Testen basiert auf dem Gedanken der Modularisierung wie er einem im modularen Programmieren oder auch in der Microservice Architektur entgegentritt. Man kann sich die Schlüsselwörter daher gewissermaßen als Funktionen vorstellen und ähnlich wie Funktionen lassen sich auch Schlüsselwörter parametrisieren.
Abschließend soll ein Beispiel den Einsatz von Schlüsselwörtern verdeutlichen. Als Beispiel dient dabei die Erstellung von GUI-Tests für einen Online-Shop. Ein typischer Ablauf sieht dann folgendermaßen aus:
- Start der Anwendung: Der Kunde ruft den Online-Shop auf
- Produktauswahl: Der Kunde wählt ein Produkt aus
- Bezahlen: Der Kunde wählt eine mögliche Bezahlungsweise aus
- Beenden der Anwendung: Der Kunde verlässt den Online-Shop
Der Einfachheit halber begnügen wir uns dabei mit einer recht groben Aufteilung der Testschritte. Jeder dieser Testschritte kann hierbei auch gleichzeitig als Schlüsselwort angesehen werden, das entsprechend ausimplementiert werden muss. Für die Auswahl eines Produktes könnte dies beispielsweise folgendes bedeuten:
auswahlProdukt(produkt, menge):
- Wähle das Produkt ‚produkt‘ aus
- Setze Anzahl auf den Wert ‚menge‘
- Lege ausgewähltes Produkt in den Einkaufswagen
Dieses Schlüsselwort kann nun in weiteren Testfällen eingesetzt werden, ohne dass eine weitere Implementierung der einzelnen Schritte notwendig wäre. Zum Beispiel könnte in einem weiteren Testfall überprüft werden, ob man Produkte auch wieder aus dem Einkaufswagen entfernen kann.
Darüber hinaus haben wir das Produkt selbst und die gewünschte Stückzahl des Produktes als Parameter implementiert. Auf diese Weise erhalten wir ohne Mehraufwand weitere Testfälle, z.B. könnte ohne zusätzliche Implementierung überprüft werden, ob ein Rabatt, der ab einer gewissen Stückzahl gewährt wird, richtig umgesetzt wird.
Anhand dieses einfachen Beispiels lässt sich bereits erkennen, welche Vorteile das schlüsselwortgetriebene Testen bietet, gerade auch im Vergleich zu einer linearen Testerstellung, wie man sie vom manuellen Testen her kennt. Alles, was es braucht, um mithilfe von Schlüsselwörtern ein langfristig wartbares Testsystem aufzubauen, ist ein klein wenig Analyse vor der Testerstellung.