Test-Automatisierung

Ein Segen, der rasch zum Fluch werden kann

von Thomas Bucsics, Test-Spezialist, ANECON

Motivation
Softwaretesten hat sich in den letzten Jahrzehnten als ein zentrales Element in der Softwareentwicklung etabliert. Im Zuge dieser Entwicklung gewinnt auch die automatisierte Unterstützung des Softwaretests immer mehr an Bedeutung. Zeit- und Kostenersparnis sind hierfür starke Beweggründe.
Der Einsatz von Automatisierungswerkzeugen wird bereits in der Konzeptionsphase eines Testprojektes geplant, damit die Werkzeuge ein Testvorhaben möglichst sinnvoll unterstützen. Die Palette der Werkzeuge sowie deren Einsatzgebiete sind groß. In einigen Testprojekten tritt sogar eine Art "Vollautomatisierung" ein, in der die zu testende Applikation über ein Tool angesteuert wird. Die auszuführenden Testfälle werden dann vom Testteam über formale Spezifikationen geliefert.

Allerdings gibt es erfahrungsgemäß auch weniger erfolgreiche Automatisierungsvorhaben, die Kosten, Wartungsaufwand, Verzögerungen und somit Ärger und Frustration verursachen. Dieser Artikel zeigt einige Gründe für das Scheitern solcher Projekte auf und soll so das Bewusstsein für die Möglichkeiten, aber auch die Grenzen von Test-Automatisierung und den damit verbundenen Tools schärfen.
Die Zusammenfassung spiegelt die Erfahrungen der ANECON in Test-Automatisierungsprojekten wieder. Schwerpunkt ist die automatisierte Testdurchführung über die graphische Benutzerschnittstelle der zu testenden Applikation. Die meisten Erkenntnisse lassen sich jedoch in leicht modifizierter Form auch auf Automatisierungen anwenden, die auf anderen Ebenen auf die zu testende Applikation zugreifen.

Funktionsweise der Test-Automatisierung
Test-Automatisierung ist eine Nische der Softwareentwicklung. Im Falle von Automatisierung über die Benutzeroberfläche wird im Allgemeinen eine spezialisierte Entwicklungsumgebung für eine Skriptsprache bzw. an eine gängige Programmiersprache gebundene Umgebung mit vorgefertigten Aktivitäts- und Aktionsbausteinen genutzt. Die Tools greifen auf Schnittstellen der Applikation zu. In vielen Fällen sind dies die Komponenten der Benutzeroberfläche (Buttons, Textfelder, Bäume, Tabellen, etc.). Eine Auswahl von Testfällen, die einem bestimmten Ablauf folgen, wird zu einem allgemeinen Schema bzw. einer Menge von Abläufen, die aus einigen Schlüsselaktivitäten bestehen, abstrahiert. Diese Schemata und Abläufe werden nun, oftmals unter der Zuhilfenahme von Aufzeichnungsfunktionalität der Automatisierungstools, in Skripte umgesetzt, die mittels Spreadsheets oder einer Datenbank steuerbar sind. Das Testteam liefert Steuerdaten, die für diese Skripts die konkreten Testfälle enthalten, die mit Hilfe dieser Skripten automatisch durchgeführt werden können.
Vorsicht!
Test-Automatisierung kann bei richtigem Einsatz zu einer wesentlichen Effizienzsteigerung führen, dennoch scheitern viele Automatisierungsvorhaben. Zwei Gründe zeichnen dafür verantwortlich:
1. Fehleinschätzung bezüglich der Qualifikationen des Testers
2. falsche Vorstellungen über die technischen Möglichkeiten von Testautomatisierung

1. Spezielle Qualifikation für Test-Automatisierer
Auch wenn viele Tool-Hersteller ihre Tools als "Record and Play" Tools darstellen, mit denen auch Personen ohne jegliche Programmiererfahrung sofort Automatisierungssuiten erstellen können, so bedarf es im realen Einsatz meistens einiger Erfahrung im Gebiet der Softwareentwicklung. Viele der Automatisierungswerkzeuge betten ihre Skripte in eine graphische Oberfläche ein, die z.B. mit Listen und Bäumen Abläufe definieren. Zu beachten ist allerdings die Tatsache, dass diese Darstellungen im Grunde nichts anderes als eine optische Aufbereitung für den eigentlichen Programmcode, den Ablauf und die Erstellung sind. Das heißt, dass immer noch dieselben Probleme und Fragestellungen auftreten.
Etwa "Was passiert, wenn während des Testdurchlaufs ein Fehler auftritt?" und "Was geschieht, wenn dieser Fehler nicht an der Applikation, sondern im Skript liegt?".

Eine häufige Fehleinschätzung bei der Entscheidung für automatisierte Testunterstützung ist, dass eine Ausbildung als Tester vollkommen ausreichend für die Rolle als Testautomatisierer ist. Für die Entwicklung von Test-Automatisierungssystemen ist Wissen über Prozesse und Methodik im Testbereich wichtig, im Regelfall aber selten ausreichend. Es ist auch einiges an Wissen und Erfahrung in der Entwicklung von Softwaresystemen an sich notwendig, um ein Test-Automatisierungssystem zu entwerfen und umzusetzen. Besonders gilt dies, wenn dieses System langfristig und flexibel nutzbar sein soll.
Das Fehlen entsprechenden Know-Hows äußert sich, wie es aus dem Bereich der Softwareentwicklung bereits hinreichend bekannt ist: unwartbarer, instabiler, ineffizienter und unskalierbarer Code entsteht.
Erfahrung mit Entwicklung, Test und den verwendeten Tools sind hier nicht nur von Vorteil, sondern für die Erfolgschancen eines solchen Projekts in hohem Maße ausschlaggebend.

2. Unzureichende Planung und Konzeption von Test-Automatisierungsvorhaben
Viele Probleme in der Test-Automatisierung bestehen oder entstehen bereits während der Planungsphase. Entscheidungen über die Architektur des Automatisierungssystems und eine überlegte Auswahl von Testfällen, deren Automatisierung zum Ziel gesetzt wird, sind in der Test-Automatisierung besonders kritisch.
Oft fehlt es an Unterstützung durch andere Projektbeteiligte. Management, Entwickler, Tester und Fachbereich müssen von der Sinnhaftigkeit der Automatisierung überzeugt sein. Die nötigen Ressourcen, insbesondere Zeit, müssen ausreichend vorhanden sein, sonst ist es für den Automatisierer schwer, sich mit der zu testenden Applikation fachlich und technisch mit ausreichendem Tiefgang auseinanderzusetzen.
Analysen der Anforderungen oder Spezifikationen für das automatisierte System fehlen oft vollständig, wenn man von den Testfällen absieht, deren Automatisierung geplant ist. Auch dieser gut abzuschätzende Aufwand darf nicht außer Acht gelassen werden, sonst besteht die Gefahr, dass Zweck und Umfang des Automatisierungssystems missverstanden werden, und somit die Entwicklung des Automatisierungssystems an den eigentlichen Bedürfnissen des Tests vorbeigeht.

Ein weiteres Problem, das aus der Softwareentwicklung bekannt ist, kann hier auftreten.
Erfahrungsgemäß wird die Komplexität des Vorhabens selbst unterschätzt. Was als einfaches System mit ein oder zwei Proof-of-Concept Testfällen beginnt, wächst oft sehr schnell und Teile des Systems finden Wiederverwendung in anderen Bereichen. Test-Automatisierungssysteme fordern ihre Erweiterung ein: Gefundene Fehler im automatischen oder manuellen Test oder gar im produktiven Einsatz fordern dann neue Testfälle, die ebenfalls automatisiert werden sollen. Um das System ausreichend skalieren und erweitern zu können, ist eine wohlüberlegte Architektur notwendig. Gerade im Bereich der Test-Automatisierung gibt es hierfür einige recht flexible Ansätze, deren Verwendung in Betracht gezogen werden sollte.

Nichterfüllung der Voraussetzungen für Test-Automatisierung in der Applikation
Wie bereits beschrieben gibt es drei wesentliche Anschlusspunkte der automatischen Testdurchführung:

  • Zugriff des Tools auf Schnittstellen der Applikation, die getestet werden soll
  • Schemata im Ablauf der Testfälle
  • Ein gewisser Reifegrad der zu testenden Applikation und ihrer Umgebung

Diese Punkte sehen auf den ersten Blick recht unempfindlich aus: Schnittstelle ist in unserem Fall die Benutzeroberfläche, von der ohnehin erwartet wird, dass sie einerseits bedienbar und andererseits auch logisch und konsistent ist. Schemata im Ablauf der Testfälle sind eine weitere, Usability-unterstützende Eigenschaft, die von vielen Applikationen erfüllt werden soll.
Allerdings ist hier leider nicht alles Gold, was glänzt: Gerade in diesen zwei Bereichen sind einerseits Tools sehr empfindlich, andererseits sind sie der Fokus von Weiterentwicklungen von Software. Graphische Neugestaltungen von Applikationen etwa, die an der eigentlichen Funktionalität nichts ändern, verursachen Wartungsaufwand für Automatisierer oder Erweiterungen um Schnittstellen für die Automatisierung durch die Entwickler. Selbiges gilt für Umgestaltungen der Abläufe in der zu testenden Applikation. Soll die Automatisierungssuite nachhaltig und über einen längeren Zeitraum eingesetzt werden, kann hier erheblicher Wartungsaufwand entstehen.
Verletzungen des dritten Punktes treten zumeist zusammen mit Verletzungen der ersten zwei Punkte auf, allerdings kann auch eine Applikation, deren Gestaltung und Ablaufdesign als fertig betrachtet wird, an mangelndem Reifegrad leiden. Daraus resultiert, dass die Protokolle von automatischen Testdurchläufen wenig aussagekräftig sind, da die Fehler die Ausführung vieler Testfälle verhindern. Eine weitere Konsequenz besteht darin, dass das Auftreten der aufgezeigten Fehlerwirkungen zu häufig für eine sinnvolle Auswertung oder etwa nicht reproduzierbar ist.

Fazit
Test-Automatisierung ist ein Teilbereich des Software-Testen, der sich spezialisierter Tools bedient. Für eine erfolgreiche Automatisierung ist Mehraufwand zu Beginn notwendig, der allerdings bei guter Planung und kompetenter Umsetzung zu wesentlicher Verbesserung und Effizienzsteigerung des Tests führt.
Professionelle Testautomatisierer, die mindestens über Grundkenntnisse im Bereich der Softwareentwicklung und über Vorgehensweisen und Prozesse im Test verfügen, sind für die Umsetzung nötig. Im Idealfall bringen sie umfangreiche Erfahrung im Bereich der Test-Automatisierung mit.
Voraussetzung für eine gute Testautomatisierung ist ein Reifegrad der Entwicklung, der dem Rahmen der Testautomatisierung entspricht.
Unterstützung durch Management, Entwicklung und Testteam sind ebenfalls wichtige Punkte, deren Bedeutung nicht unterschätzt werden darf.