Agiles Testen in der Softwareentwicklung

agiles testen
Agile Methoden bei der Softwareentwicklung erfordern auch Anpassungen in den Arbeitsabläufen. Das gilt auch für das Software Testing. Doch wie kann agiles Testen aussehen?

Der Weg zu mehr Qualität und Effizienz

Mit Einführung agiler Methoden stehen die Anforderungen der Nutzer im Mittelpunkt der Softwareentwicklung. Die zukünftigen Nutzer werden stärker in den Entwicklungsprozess eingebunden und stellen durch ihren Input sicher, dass tatsächlich wichtige Themen umgesetzt werden, die Applikation leicht zu bedienen und perfomant ist. Um das zu überprüfen, muss funktionsfähige und fehlerfreie Software oft und kontinuierlich ausgeliefert werden. Auch die hohen Anforderungen an den nicht-funktionalen Teil der Software müssen fortwährend getestet werden: wurde sauber gecodet, entspricht die Applikation den Sicherheitsanforderungen, funktioniert sie stabil und ist sie leicht wartbar? Mit einem Satz: Eine konstante, häufige und fehlerfreie Code-Auslieferung ist eine Frage der Qualität.

Was unterscheidet agiles vom klassischen Testen

Im klassischen Testmanagement sind Entwicklung und Test klar getrennt und alle vier Teststufen laufen nacheinander ab: Die Testphase beginnt mit der Fertigstellung des Produkts. Zuerst werden die einzelnen Komponenten (Komponententest) getestet, in der nächsten Stufe, dem Integrationstest, wird das Zusammenspiel der einzelnen Komponenten überprüft, um schließlich die Funktionen des gesamten Produkts zuerst intern (Systemtest) und abschließend durch den Kunden (Userakzeptanztest) auf Herz und Nieren zu prüfen. Dabei sind die Rollen klar verteilt. Das Entwicklungsteam entwickelt, das Testteam testet und das Testmanagement kontrolliert und steuert. Will man im agilen Umfeld kontinuierlich (mit jeder Iteration) stabile und fehlerfreie Software ausliefern, müssen fortwährend Tests durchgeführt werden.

Nach klassischen Testmethoden eine Teststufe nach der anderen zu durchlaufen ist auf Dauer nicht realisierbar, da die Iterationen kurz sind und es schnell gehen muss. Auch im agilen Testing gibt es Komponenten-, Integrations- und Systemtests, mit dem Unterschied, dass diese nicht nacheinander, sondern innerhalb einer Iteration parallel ablaufen, zum Teil sogar in die Entwicklung eingebettet sind. Auch kennt das agile Vorgehen keine klar verteilten Rollen: Idealerweise sind Softwareentwickler und -architekten sowie Tester, Test- und Qualitätsmanager Teil des Entwicklungsteams und unterstützen sich gegenseitig. Das Team hat ein gemeinsames Ziel: Hohe Qualität durch eine hohe Testabdeckung, eine effiziente Testdurchführung und -dokumentation. Dies lässt sich nur durch ein ausgewogenes Gleichgewicht zwischen einem hohen Automatisierungsgrad und wenigen manuellen Tests erfüllen.

Effiziente Verteilung der Tests: Die Testpyramide

Ein Blick auf die Testpyramide von Mike Cohen zeigt, wie eine effiziente Teststrategie gestaltet werden kann, wie die Testverteilung auf die einzelnen Teststufen geplant werden soll und welche Bereiche sich am sinnvollsten für eine Testautomatisierung eignen. Die breite Basis der Pyramide bildet eine hohe Anzahl an Komponententests in Form von automatisierten Unit Tests. Sie sind relativ einfach parallel zur Anwendungsentwicklung zu erstellen, schnell durchzuführen, entsprechend kostengünstig und garantieren eine hohe Testabdeckung. Sie sorgen dafür, dass die meisten Fehler bereits bei der Entwicklung entdeckt werden. Die mittlere Stufe der Testpyramide bilden Integrationstests (API-Tests). API steht für Application Programming Interfaces. Automatisierte API-Tests stellen sicher, dass Komponenten wie vorgegeben zusammen arbeiten. API-Tests sind für die Testautomatisierung sehr gut geeignet, da sie in der Regel wenigen Änderungen unterliegen und einfach zu warten sind.

An dieser Stelle ist noch anzumerken, dass nicht-funktionale Tests, wie Last- und Performancetests in der Testpyramide nicht berücksichtigt werden, aber wichtig für die Userakzeptanz und teils auch sehr gut automatisierbar sind. System-Tests (GUI-Tests) finden sich an der Spitze der Pyramide. Als GUI (Graphical User Interface) bezeichnet man die grafische Benutzeroberfläche. Automatisierte GUI-Tests prüfen, ob alle Funktionen wie gewünscht ablaufen. Ihre Automatisierung ist aufgrund einer Auswahl an Tools gut machbar, die Auswahl der zu automatisierenden Tests sollte aber sehr sorgfältig geprüft werden, da sie aufwendiger in Erstellung und Wartung und damit kostenintensiv sind. In der Regel erfordern GUI-Tests erhebliche Nacharbeiten, um mit häufigen Änderungen Schritt halten zu können. Es empfiehlt sich nur so viele GUI-Tests wie nötig und so wenig wie möglich zu automatisieren und diese sukzessive einzuführen, indem man zum Beispiel Sprint für Sprint Bestandsfunktionen mittels automatisierten Regressionstests absichert.  Explorative und End-to-End Tests eignen sich kaum für Testautomatisierung. Letztere aufgrund ihrer Komplexität. Explorative Tests aufgrund ihres Freiheitsgrades. Der explorative Tester erkundet die Applikation ohne zuvor exakt festgelegt zu haben welche Testschritte auszuführen sind. Ein Vorteil besteht darin, dass weniger Vorbereitung erforderlich ist, die Dokumentation so gering wie möglich gehalten wird und dass Fehler abseits bestehender Testszenarien gefunden werden.

Quellen: Buch: Agile Testing: Manfred Baumgartner, Martin Klonk, Helmut Pichler, Richard Seidl, Siegfried Tanczos (2018): Der agile Weg zur Qualität

 

Inhalt: