Testen in der agilen Softwareentwicklung
Agilität verändert nicht den Stellenwert des Testens, wohl aber die Organisation der Softwareproduktion
//
Hybrid Cloud, IT & Management Consulting, Quality & Testmanagement
Agile Organisationsformen haben ihre Wurzeln in der Software-Entwicklung. Traditionelle Software-Projekte, denen als Methode das Wasserfall- oder V-Modell zugrunde liegt, nutzen üblicher Weise starke Prozesse, oft mit der Unterstützung mächtiger Testsuiten, zur Feststellung der Qualität. Hierbei werden Testfälle aus der vorhandenen Dokumentation – Anforderungsspezifikation, technischer Spezifikation – generiert. Die Testdurchführung wird vorab geplant, damit alle Ressourcen – Personal, Testfälle, Systeme – im gesetzten Testzeitraum zur Verfügung stehen. Im Testzeitraum wechseln sich dann Test- und Fehlerbehebungsphasen ab, bis schlussendlich das fertige Produkt zur Installation und Nutzung bereitsteht. Agile Software-Projekte laufen anders, indem sie diese Schritt-für-Schritt Vorgehensweise in Frage stellen. Klassisches (Software-) Testmanagement mit den Anforderungen der agilen Organisation zu verbinden, ist eine methodische Herausforderung, birgt aber auch viele Chancen.
Agilität verändert die Prinzipien des Testmanagements
Das „Manifest für Agile Softwareentwicklung“ formuliert Leitsätze, die auf den ersten Blick mit klassischen Testprinzipien nicht vereinbar sind:
Prozesse und Werkzeuge sind nicht so wichtig wie Individuen und Interaktion. Gerade Testwerkzeuge bieten durch Dokumentation der Testdurchführung und mittels Fehler-Tracking die Möglichkeiten, den Testfortschritt und die Qualität des Produkts zu bewerten.
Dokumentation ist weniger wichtig als ein funktionierendes System. Woher können aber gute Testfälle abgeleitet werden, wenn nur wenig Dokumentation vorhanden ist?
Die Zusammenarbeit mit Kunden im Projekt ist wichtiger als vertraglich fixierte Anforderungen. Die vorausschauende Planung des Testens zielt auf einen konkreten Leistungsrahmen.
Veränderungen im Projekt sind zwar nicht unbedingt erwünscht, werden aber dennoch berücksichtigt, was eine vorbereitende Erstellung von Testfällen und eine langfristige Planung von Testzeiträumen als wenig sinnvoll erscheinen lässt.
Ein erstes Fazit könnte also lauten, dass bei der Softwareentwicklung in agilen Projekten ein strukturiertes Testen nicht möglich ist. Dieses Fazit wäre nicht nur falsch, sondern fatal, denn es würde bedeuten, dass die Qualität von Produkten, die agil entwickelt werden, nicht geprüft werden kann.
Agile Leitsätze
- Individuen und Interaktionen mehr als Prozesse und Werkzeuge
- Funktionierende Software mehr als umfassende Dokumentation
- Zusammenarbeit mit dem Kunden mehr als Vertragsverhandlung
- Reagieren auf Veränderung mehr als das Befolgen eines Plans
Das Ziel bleibt: Testen dient der Qualität der Software-Entwicklung
Auch in agilen Projekten kann und muss die Qualität geprüft werden. Dabei muss agiles Testen so gestaltet sein, dass es die Ziele agiler Softwareentwicklung optimal unterstützt. Diese programmatisch gesetzten Ziele sind: „hohe Kundenzufriedenheit“, „hohe Produktqualität“, „hohe Entwicklungsgeschwindigkeit“, „schnelle Reaktion auf Änderungen“ und „hohe Teammotivation“. Die Werte des Testens aus dem „klassischen“ Vorgehen weiter zu berücksichtigen, ist nicht immer einfach. Dies sind eine gute Planbarkeit, Verfolgbarkeit und Nachweisbarkeit der Testaktivitäten und auch eine hohe Systematik des Testentwurfs, daraus resultierend eine hohe und reproduzierbare Testabdeckung.
Die Sicherung der Qualität in agilen Software-Projekten ist möglich, wenn das Testen nach den im Folgenden dargestellten Prinzipien durchgeführt, wird.
1. Im agilen Umfeld ist es zeitlich nicht möglich, die in klassischen Projekten verwendeten Teststufen (z. B. Unit-, Integrations- und Systemtest) zu durchlaufen. Die Ziele, die mit diesen Teststufen verbunden sind, sind aber weiterhin gültig. In agilen Projekten bietet sich daher an, in Mikro-Testzyklen zu arbeiten, in denen inhaltlich unterschiedlich gestaltete Testziele abgedeckt werden, sodass die klassischen Testphasen eher als inhaltliche Testarten statt als Phasen verstanden werden. Letztendlich bedeutet dies die Auflösung der Teststufen.
2. Agile Software-Entwicklung bietet den großen Vorteil, auf sich ändernde Anforderungen schnell reagieren zu können. Damit die Testaktivitäten diesen Vorteil unterstützen, sollten möglichst viele systematische Testfälle – sowohl strukturbasierte (Unit Tests) als auch fachlich orientierte Tests - entworfen und automatisiert werden. Testautomatisierung ist damit ein wichtiger Faktor, da bereits fertiggestellte Teile der Software mittels Regressionstests bei jedem Zyklus wieder auf Fehlerfreiheit geprüft werden sollten.
3. Testmanagement, Fehlermanagement, Dokumentationsarbeit und ähnliche Tätigkeiten werden im agilen Umfeld als gering zu haltende Aufwände angesehen. Die Arbeitskraft sollte also vorrangig in operative Testtätigkeiten zur Sicherstellung der Software-Qualität fließen und nicht in Dokumentation.
4. Im agilen Umfeld ist ein zeitnahes Feedback zur Qualität, also die rasche Durchführung von Test und die schnelle Meldung von gefundenen Fehlern, essenziell. Dazu ist es notwendig, die Tester bereits vor einem Entwicklungszyklus in die Funktionsdefinition einzubinden. Dieses Vorgehen fördert zudem die unerlässliche, enge Zusammenarbeit zwischen Entwicklern, Testern und Kundenvertretern. Darüber hinaus unterstützt eine direkte Kommunikation mit weitgehendem Verzicht auf Dokumentation ein schnelles Feedback.
Fazit
Um Software mit hoher Qualität zu liefern, ist Testen unumgänglich - auch in agilen Software-Projekten. Die Herausforderungen für das Testen im agilen Umfeld sind die zeitliche Komponente und die inhaltliche Flexibilität. Das Testen muss sich also inhaltlich und zeitlich an das Vorgehen bei der Entwicklung anpassen, wobei ein schnelles Feedback zur aktuellen Qualität notwendig ist.
Eine ausgewogene Balance zwischen hohem Automatisierungsgrad und leichtgewichtigen manuellen explorativen Tests kann die benötigte Geschwindigkeit gewährleisten. Tests, die sich auf die Bedienbarkeit von Software beziehen, sind üblicherweise nicht automatisierbar. Darüber sollten sich agile Teams im Klaren sein. Entsprechende Prüfungen müssen deshalb über exploratives Testen abgedeckt werden. Dazu ist es hilfreich, wenn Programmierer die Arbeit von Testern bei der Automatisierung unterstützen. Im Gegenzug liefern Tester mit ihren kritischen Fähigkeiten in jeder Phase des Projektes die Sicherheit, auf dem richtigen Weg zu einem qualitätvollen Software-Produkt zu sein.
In der agilen Software-Entwicklung sind Tester also Teil des Entwicklungsteams, wodurch die klassische Trennung zwischen Testern und Entwicklern aufgelöst wird. Die Tester bringen so ihr Spezialwissen direkt in den Entwicklungsprozess ein. Die Herausforderung ist künftig, Teams zusammen zu stellen, die das benötigte Know-how zu allen Seiten hin besitzen, um so Agilität und Qualität in der Softwareentwicklung zu gewährleisten.
noventum consulting GmbH
Münsterstraße 111
48155 Münster