Testautomatisierung auf dem Vormarsch!

von Thomas Bucsics

Die immer wichtigere Rolle der Automation im Softwaretest

Softwaretesten hat sich als ein zentrales Element in der Softwareentwicklung etabliert, und im Zuge dieser Entwicklung gewann auch die automatisierte Unterstützung des Softwaretests immer mehr an Bedeutung. Zeit- und Kostenersparnis sind hierfür starke Beweggründe, und Testautomatisierung ist aus der heutigen IT-Landschaft kaum mehr wegzudenken.

Der Einsatz von Automatisierungswerkzeugen wird bereits in der Konzeptionsphase eines Testprojektes geplant, damit die Werkzeuge ein Testvorhaben möglichst sinnvoll unterstützen, und die Palette der Werkzeuge sowie deren Einsatzgebiete sind groß. Anwendungen reichen von State-ofthe-Art-Software-Entwicklungsmethoden wie Test-Driven Development über automatisierte Integrationstests bis hin zu automatisierten System- und Systemintegrationstests über grafische und andere Nutzerschnittstellen.

Erfahrungsgemäß gibt es 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 Testautomatisierung und den damit verbundenen Tools schärfen.

Automation im Softwaretest

Funktionsweise der Testautomatisierung

Testautomatisierung war bzw. 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 mithilfe dieser Skripten automatisch durchgeführt werden können.

Doch was ist der Nutzen von automatisierten Tests?

Im Entwicklertest ermöglicht die Automatisierung dem Entwicklungsteam, rasch eine Aussage über die Funktion der einzelnen Softwarebausteine zu treffen. Dieses Sicherheitsnetz erlaubt es, auch größere Änderungen vorzunehmen, ohne Angst vor unerwarteten dramatischen Verschlechterungen zu haben. Auch dem spezialisierten Testteam nutzt Automatisierung: Abgesehen von einem weiteren Sicherheitsnetz bietet sie die Möglichkeit, die Tester von repetitiven Aufgaben zu befreien. Dies kann beispielsweise in inkrementellen Vorgehensmodellen wie Scrum erreichen, Testspezialisten von ermüdenden Regressionstests freizuspielen und sich auf aktuell relevante Funktionalitäten zu konzentrieren. Hier ist der Zweck von Automatisierung also nicht, Fehler zu finden. Vielmehr ist es ihre Aufgabe zu bestätigen, dass die bereits fertige Funktionalität nicht durch Änderungen beeinträchtigt wird!

Viele scheitern bereits zu Beginn – oder sogar davor!

Warum ist dann nicht in jedem Projekt eine automatisierte Testunterstützung anzutreffen? Im Komponententest gehört es zum guten Ton, zumindest einige unsystematisch erstellte Testfälle automatisiert zu haben – doch im Integrationstest und spätestens beim automatisierten Systemtest fällt der Anteil von erfolgreich eingesetzter Testautomatisierung deutlich geringer aus. Zunächst bedeutet Testautomatisierung ein Investment, das erst über einen längeren Zeitraum den entsprechenden Return bringt. Die Automatisierung eines Testfalls ist aufwendiger als eine einzelne Durchführung. Es ist klar, dass ein effektiver Nutzen erst über mehrere Durchführungen erreicht werden kann. Die für den Start notwendigen Ressourcen können den Blick auf den langfristigen Nutzen trüben.

Ein weiterer Faktor betrifft eine weit verbreitete und grundlegend falsche Erwartungshaltung gerade gegenüber kommerziellen Werkzeugen: Es werden Tools in der Hoffnung angeschafft, dadurch eine ausreichende Grundlage für eine erfolgreiche Testautomatisierung zu erhalten. Ist ein Werkzeug angeschafft, wird das Automatisieren als Nebentätigkeit eines unerfahrenen (und nicht selten damit überforderten) Testers gesehen. Das führt zu Basteleien im stillen Kämmerlein, ohne eine klare Zielvorgabe oder Struktur. So wächst, abseits von Entwicklung und manuellem Test, ein unwartbares, kaum durchführbares und schwer analysierbares Flickwerk, das technische und fachliche Aspekte vermischt. Testläufe werden nach Gutdünken durchgeführt und die Ergebnisse nicht klar kommuniziert. Oft wird in diesen Fällen für den Misserfolg das Werkzeug verantwortlich gemacht, und sowohl Werkzeug als auch Automatisierung „verstauben“ ungenutzt.

Spezielle Qualifikation für Testautomatisierer ist unabdingbar

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 grafische Oberfläche ein, die z. B. mit Listen und Bäumen Abläufe definiert. 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, wie 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 Testautomatisierungssystemen 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 Testautomatisierungssystem zu entwerfen und umzusetzen. Besonders gilt dies, wenn dieses System langfristig und flexibel nutzbar sein soll. Das Fehlen entsprechenden Knowhows ä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.

Das Werkzeug muss zum Nutzer und zu den Zielen passen Eine gute Werkzeugauswahl ist notwendig, aber nicht allein ausreichend für Erfolg. Bei der Entscheidung für ein Tool sollten nicht nur die technische Kompatibilität und der Preis entscheidend sein: Ein mindestens genauso wichtiges Kriterium ist das Zueinanderpassen von Zielsetzung, Werkzeug und Nutzer. Im einen Projekt mag es möglich sein, Werkzeuge einzusetzen, die Programmierkenntnisse in spezifischen Sprachen erfordern, in anderen wiederum ist eine grafische Gestaltung der Testfälle absolut notwendig. Daher empfiehlt sich vor der Entscheidung ein Probelauf am lebenden Objekt – am besten in Form eines Hands-on mit den zukünftigen Anwendern und anhand der definierten Ziele. Ein weiterer Aspekt ist die Einführung von Werkzeug und den damit verbundenen Prozessen: Was ist der Input für die Automatisierung und was der erwartete Output? Wer formuliert die Testfälle, wer implementiert sie? Wann und wie oft werden die automatisierten Testfälle durchgeführt? Wie werden Ergebnisse kommuniziert? All diese Fragen sollten bewusst beleuchtet werden, um die entstehenden Strukturen nicht dem Zufall zu überlassen.

Weichen müssen richtig gestellt sein!

Wie bei allen Investments in Software-Entwicklungsvorhaben – und zu diesen zählen Testautomatisierungsprojekte, selbst wenn Testfälle ohne Programmierkenntnisse erstellbar sind – müssen auch bei der Testautomatisierung von Anfang an die Weichen richtig gestellt werden. Aber auf der anderen Seite sollte auch während des laufenden Einsatzes immer wieder beobachtet und nachjustiert werden, um langfristig den erhofften Ertrag – und möglicherweise noch etwas mehr – ernten zu können. Ein klares Konzept, ein strukturiertes Vorgehen und eine überlegte Einbettung in den allgemeinen Software-Entwicklungsprozess können Testautomatisierern helfen, ihre Aktivitäten gewinnbringend zu fokussieren. Wenn es um die technische Umsetzung geht, ist eine gute Strukturierung der Automatisierungselemente, z. B. mithilfe von Keyword-Driven Test Automation, und ein Blick auf Wartbarkeit der automatisierten Testfälle essenziell. Nicht zuletzt spielt die Testbarkeit der Zielapplikation eine wichtige Rolle: Das geht von eindeutigen Erkennungsmerkmalen auf der Benutzeroberfläche bis hin zu allgemeinen Hilfsmitteln, wie zum Beispiel dem Rücksetzen einer Testumgebung in einen Initialzustand. Um die Testbarkeitsanforderungen an das zu testende System nachhaltig zu ermitteln, eignet sich einerseits eine Aufnahme dieser Anforderungen bereits von Beginn an. Im Idealfall wird diese Betrachtung gekoppelt mit einem möglichst frühen testweisen Einsatz der Testautomatisierung (Proof of Concept, Pilot), um gegebenenfalls noch nicht erfasste und sich im realen Umfeld zeigende Notwendigkeiten rechtzeitig ergänzen zu können. Auf der anderen Seite sollte der Zeitpunkt eines solchen Einsatzes aber auch nicht verfrüht stattfinden: Das zu testende System sollte hier einen dem Ansatz und der Teststufe entsprechenden Reifegrad bereits erreicht haben, um der Automatisierung zu ersparen, ein „Moving Target“ anzupeilen.

Unzureichende Planung und Konzeption von Testautomatisierungsvorhaben Viele Probleme in der Testautomatisierung 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 Testautomatisierung 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. Testautomatisierungssysteme 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 Testautomatisierung gibt es hierfür einige recht flexible Ansätze, deren Verwendung in Betracht gezogen werden sollte. Einige dieser Ansätze, wie beispielsweise Data- oder Keyword-Driven Testing oder auf Behaviour Driven Development werden durch zahlreiche Werkzeuge unterstützt und sind somit in beinahe jeder Technologie gut einsetzbar. Durch den konsequenten Einsatz dieser Methoden kann der Wartungsaspekt weitgehend abgedeckt werden. Ein weiterer wesentlicher Aspekt, der mittlerweile von einigen Tools betrachtet wird, ist die parallele Abarbeitung von Testfällen. In diesem Kontext ist nicht nur die technische Aufteilung der Testdurchführung eine Herausforderung, sondern vor allem auch die damit verbundenen inhaltlichen Themen wie z. B. Testdatenmanagement (insbesondere Testdaten mit fachlichen Zustandsmodellen dahinter) und Testkonfiguration (wie beispielsweise Testfälle, die das zu testende System unter bestimmten Parametern betesten müssen).

Nichterfüllung der Voraussetzungen für Testautomatisierung 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. Grafische 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 werden, 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 für eine sinnvolle Auswertung zu häufig ist oder nicht reproduziert werden kann. Einfach ist es nicht. Aber wirkungsvoll! Wenn diese Aspekte entsprechend Berücksichtigung finden, stehen die Chancen gut, eine stabile Testautomatisierung zu schaffen und diese auch effizient zu nutzen.

Einfach ist es nicht. Wie so oft kann aber auch hier die Erfahrung anderer genutzt werden: Testautomatisierer aus dem eigenen Umfeld, externe Beratung durch Experten, einschlägige Lektüre oder Foren und Communities können zu Beginn helfen, die wichtigen ersten Schritte in die richtige Richtung zu setzen. Erste Schritte in Richtung eines erstrebenswerten Ziels: Das „Freispielen“ von Testern, die sich dadurch darauf konzentrieren können, neue und wichtige Fehler zu finden (anstatt mühevoll immer wieder die gleichen Regressionstestfälle durchzuackern), ist wahrscheinlich das zentrale Qualitätsmerkmal effektiver Testautomatisierung und stellt für Projekt und Produkt einen wesentlichen Hebel zur Qualitätsverbesserung dar.

Fazit

Testautomatisierung ist ein Teilbereich des Softwaretesten, 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 Testautomatisierung 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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Kategorien

Recent Posts