Lebenszyklus agiler Tests – alles, was Sie wissen müssen

Kennen Sie den Agile Testing Life Cycle (ATLC)? Es ist ein Prozess, der von Softwareentwicklungsteams verwendet wird, um sicherzustellen, dass ihre Anwendungen ordnungsgemäß und effektiv getestet werden.

Dieser Beitrag führt Sie durch alles, was Sie über ATLC wissen müssen, einschließlich seiner Vorteile, der am Prozess beteiligten Schritte, der Planung einer praktischen Teststrategie, der Durchführung von Tests basierend auf der Erfassung von Anforderungen und der Fehlerverfolgung, Benutzerakzeptanztests (UAT) und kontinuierlich Integration & Automatisierung von Tests.

Nachdem Sie diesen Leitfaden gelesen haben, werden Sie besser verstehen, wie Sie agiles Testen als Teil Ihres Softwareentwicklungslebenszyklus verwenden können!

Wenn Sie ein agiler Entwickler, Tester oder Produktmanager sind, der nach einer besseren Möglichkeit sucht, Ihre Produkte bereitzustellen, dann erklärt dieser Artikel die beteiligten Phasen zusammen mit den erforderlichen Maßnahmen.

Überblick über den Lebenszyklus des agilen Testens

Es ist kein Geheimnis, dass das Testen in der Welt der agilen Entwicklung enorm wichtig ist. Trotzdem wird die Aktivität innerhalb der agilen Bereitstellung oft unterschätzt. Der Grund dafür ist natürlich das Geld im Verhältnis zur Zeit bis zur Produktionslieferung.

Aber ohne detaillierte Tests gäbe es keine Garantie für Qualität oder Zuverlässigkeit für jedes Produkt, das Ihr Team entwickelt. Aus diesem Grund ist es entscheidend, den agilen Testlebenszyklus zu verstehen – von der Identifizierung von Arbeitselementen bis hin zum Verständnis, welche Art von Test in jeder Phase verwendet werden sollte.

Der agile Testzyklus erfordert, dass Entwickler und Tester in jeden einzelnen Sprint eingebunden werden. Eine gute Ausführung ermöglicht die Testautomatisierung in jeder Phase, wodurch Fehler früher und häufiger erkannt werden und die spätere Fehlerbehebungszeit verkürzt wird.

Agiles Testen hilft auch bei der frühzeitigen Validierung von Anforderungen und verbessert als Nebeneffekt die Kundenzufriedenheit durch die Lieferung eines Qualitätsprodukts.

Was ist agiles Testen und seine Vorteile

Agiles Testen ist eine innovative Methode zum Testen von Software, die die Automatisierung nutzt, um einen iterativen Testprozess zu erstellen. Dieser automatisierungszentrierte Ansatz hilft Teams, Inkonsistenzen oder Probleme im Code schnell zu analysieren und dann Änderungen auf der Grundlage dieses Feedbacks zu testen.

Die Hauptvorteile dieses Prozesses scheinen also offensichtlich zu sein:

  • sicherzustellen, dass die Prüfung die erforderliche Wirkung hat,
  • es führt zu effizienteren Entwicklungszeiten,
  • das entwickelte System hat insgesamt schnellere Fehlerbehebungsraten,
  • und die Kundenzufriedenheit wird verbessert.

Qualität und Geschwindigkeit sind hier entscheidende Faktoren, da der Sprint als kleiner Zeitraum (typischerweise 2 bis 4 Wochen) definiert ist. Je mehr sich das Team auf die in den Sprinttests enthaltene Qualität verlassen kann, desto mehr Vertrauen und schnellere Entwicklungsfortschritte kann das Team erzielen.

Fokus auf Automatisierung sollte das primäre Ziel eines jeden agilen Teams sein. Auf diese Weise können Teams das Risiko kostspieliger Fehler verringern und mehr Zeit für die Erstellung neuer Inhalte aufwenden, anstatt das zu reparieren, was sich bereits in der Produktion befindet.

Ein weiterer Nebeneffekt ist eine bessere Schätzung der Projektkosten und des Zeitplans. Da das Produkt viel ausgereifter und vorhersehbarer ist, gibt es weniger Situationen, in denen das Team mit unerwarteten Problemen umgehen muss, die innerhalb des Sprints auftauchen, ohne solche Komplikationen vorher zu berechnen.

Lebenszyklusschritte für agiles Testen

Der agile Testlebenszyklus besteht aus vier verschiedenen Phasen.

Unit-Tests

Dies sind die Tests, die von Entwicklern durchgeführt werden, sobald der Code aus Entwicklungssicht fertig ist. Es wird isoliert in einer Entwicklungsumgebung ausgeführt, ohne andere Teile des Systems einzubeziehen.

Unit-Tests werden durchgeführt, um den Code zu testen und können manuell und automatisch durchgeführt werden.

Bei manueller Ausführung führt der Entwickler seine Testfälle gegen den Code aus. Das ist schnell herauszubekommen, nimmt aber mehr Zeit in Anspruch als der Sprint, der der Entwicklung gewidmet ist, insbesondere aus einer langfristigen Perspektive.

Eine Alternative dazu ist das Erstellen eines automatisierten Unit-Test-Codes, der den Funktionscode im Grunde nur durch Ausführen verifiziert. Das bedeutet, dass der Entwickler nicht nur Zeit für die Entwicklung der neuen Funktion, sondern auch für die Entwicklung des Komponententestcodes aufwenden muss, der diese Funktion testet.

Und während dies aus kurzfristiger Sicht wie ein größerer Aufwand aussehen mag, ist es eine Zeitersparnis für das gesamte Projekt, da solche Unit-Tests auch in späteren Phasen des Sprint-Tests einfach wiederverwendet werden können. Sie können sogar in reguläre Regressionstestfälle aufgenommen werden, was dann noch mehr Zeit spart.

Je höher die Codeabdeckung durch automatisierte Einheitentests, desto besser können dem Kunden Codezuverlässigkeitsmetriken präsentiert werden.

Funktionstests

Funktionstests dienen dazu festzustellen, wie gut ein Feature einer Anwendung funktioniert. Diese Art des Testens wird verwendet, um die korrekte Funktionalität des Codes sicherzustellen und nicht technische Aspekte (die hauptsächlich Teil des Unit-Tests waren), sowie zu beurteilen, ob er den Bedürfnissen und Erwartungen der Benutzer entspricht oder nicht.

Mit anderen Worten, Funktionstests werden verwendet, um zu überprüfen, ob das Entwickelte den Anforderungen der Geschäftsanwender entspricht.

Es ist eine gute Praxis, wichtige Testfälle im Voraus und von relevanten Interessengruppen (entweder vom Produkteigentümer oder sogar von den Endbenutzern) zu sammeln und eine Liste aller solcher Testfälle zu erstellen, die für den Inhalt innerhalb des Sprints benötigt werden.

Die Automatisierung von Funktionstests erfordert mehr Aufwand auf Seiten der Testentwicklung, da es sich um komplexe Prozesse handelt, die verifiziert werden müssen, einschließlich verschiedener Teile des Systems zusammen. In diesem Fall besteht die beste Strategie darin, ein dediziertes Team nur für die Entwicklung der Funktionstests entlang der Linie einzurichten, in der das Hauptentwicklungsteam neue Funktionen entwickelt.

Sicher, für das Projekt bedeutet dies erhöhte Kosten für die Aufrechterhaltung eines separaten Teams, aber es hat auch ein großes Potenzial, dem Projekt langfristig Geld zu sparen. Es liegt nur an den Projektmanagern, die Vorteile und Einsparungen zu erläutern und konkret zu berechnen, um vor Fachanwendern ein solides Argument vorzubringen, das zu einer solchen Erhöhung der Projektkostengenehmigung führt.

Auf der anderen Seite kann diese Aktivität, wenn sie manuell durchgeführt wird, von einem sehr kleinen Team (in einigen Fällen sogar von einer einzelnen Person) durchgeführt werden. Es ist jedoch eine konstante manuelle und wiederholte Aktivität in jedem einzelnen Sprint erforderlich. Im Laufe der Zeit, wenn der Funktionsumfang des Systems erweitert wird, kann es schwieriger werden, Sprint für Sprint mit soliden Funktionstests Schritt zu halten.

Regressionstests

Der Regressionstest soll sicherstellen, dass alles, was bisher funktioniert hat, auch nach dem nächsten Release funktioniert. Regressionstests müssen durchgeführt werden, um sicherzustellen, dass es keine Kompatibilitätsprobleme zwischen verschiedenen Modulen gibt.

Testfälle für Regressionstests sind am besten, wenn sie regelmäßig gepflegt und vor jedem Release überarbeitet werden. Basierend auf den konkreten Projektspezifikationen ist es am besten, sie einfach zu halten, aber die Mehrheit der Kernfunktionalitäten und wichtigen End-to-End-Flows abzudecken, die durch das gesamte System laufen.

Normalerweise hat jedes System solche Prozesse, die viele verschiedene Bereiche berühren, und das sind die besten Kandidaten für Regressionstestfälle.

Wenn automatisierte Komponententests und Funktionstests vorhanden sind, ist die Erstellung von Automatisierungen für Regressionstests eine sehr einfache Aufgabe. Verwenden Sie einfach das, was Sie bereits haben, für den wichtigsten Teil des Systems (z. B. für Prozesse, die am häufigsten in der Produktion verwendet werden).

Benutzerakzeptanztests (UAT)

Zu guter Letzt überprüft UAT, ob die Anwendung die erforderlichen Anforderungen für den Produktionseinsatz erfüllt. Dieser Ansatz funktioniert am besten, wenn eine Software häufig in kurzen und intensiven Zyklen getestet wird.

UAT-Tests sollten ausschließlich von Personen außerhalb des agilen Teams durchgeführt werden, idealerweise von Geschäftsanwendern in einer dedizierten Umgebung, die so nah wie möglich an der zukünftigen Produktion ist. Alternativ kann der Product Owner hier die Endanwender ersetzen.

In jedem Fall sollte dies aus Sicht des Endbenutzers ein sauberer Funktionstest sein, ohne Verbindung zum Entwicklerteam. Die Ergebnisse dieser Tests dienen dazu, die alles entscheidende Go/No-Go-Entscheidung für die Produktionsfreigabe zu treffen.

Planung einer effektiven Teststrategie

Die Planung ist ein wichtiger Bestandteil des agilen Testens, da sie die gesamte Strategie zusammenhält. Es muss auch klare Erwartungen an den Zeitplan im Kontext der Sprints setzen.

Durch die effektive Verwaltung der agilen Testplanung können Teams eine klare Richtung vorgeben, die zu einer effizienten Nutzung von Ressourcen innerhalb eines Sprints führt. Offensichtlich wird eine stärkere Zusammenarbeit zwischen Testern und Entwicklern erwartet.

Es sollte auch ein umfassender Plan erstellt werden, um festzulegen, wann Einheitentests, Funktionstests oder Benutzerakzeptanztests in jedem Entwicklungssprint stattfinden. Somit weiß jeder genau, wann seine Teilnahme für einen erfolgreichen agilen Start erforderlich ist.

Wie der Plan aufgestellt wird, kann nach weiteren Diskussionen und Vereinbarungen erfolgen. Das Wichtigste ist jedoch, es zu einem Prozess zu machen und sich daran zu halten. Erstellen Sie eine Periodizität, die zuverlässig und vorhersehbar ist.

Driften Sie nicht vom Prozess ab. Andernfalls wird genau das Gegenteil die Realität sein – Chaos und unvorhersehbare Freigaben für die Produktion.

Ausführen von Tests basierend auf der Erfassung von Anforderungen

Tests müssen gemäß den Anforderungen jeder Stufe durchgeführt werden. Tickets werden dann geöffnet, wenn ein Fehler oder Problem gefunden wird, und dem Entwicklungsteam zugewiesen, das dann herausfinden kann, was für den Code behoben oder geändert werden muss. Sobald alle Fehler behoben wurden, kann die agile Testausführung fortgesetzt werden, bis alle Tests bestanden wurden.

Überprüfung der Ergebnisse und Fehlerverfolgung

Eine effektive Überprüfung der Ergebnisse und ein solider Fehlerverfolgungsprozess sind unerlässlich. Der Prozess sollte alle relevanten Stakeholder einbeziehen, von Projektmanagern und Testern bis hin zu Entwicklern, und schließlich Teams unterstützen, aber auch Kunden für das Sammeln von Feedback.

Diese Aktivität sollte umfassend genug sein, damit Probleme schnell erkannt und behoben werden können, bevor der bereits geplante Veröffentlichungstermin gefährdet ist.

Das Tool der Wahl liegt wieder beim Team. Aber einmal ausgewählt, muss jede Testaktivität zuverlässige Fehlerverfolgungsprozesse beinhalten, um Probleme zu überwachen, sie nach Abhängigkeiten zu priorisieren, Statusaktualisierungen von Entwicklern bei der Lösung oder Übertragung zur weiteren Untersuchung zu melden und dann Tickets zu schließen, sobald sie gelöst sind.

Die Überprüfung hilft agilen Testern, das Verhalten ihres Systems zu verstehen und Fehler bei jedem Schritt und nicht erst später im Prozess zu identifizieren. Regelmäßige Überprüfungen ermöglichen es agilen Teams auch, Trends und verbesserungsbedürftige Bereiche zu erkennen, sodass sie ihr Test-Framework kontinuierlich aktualisieren und qualitativ bessere Produkte schneller entwickeln können.

Abschluss der Produktfreigabe mit Produktionsrauchtest

Um den Erfolg der Veröffentlichung zu maximieren, ist ein Rauchtestlauf gegen die Produktion (direkt nach der Veröffentlichung) eine Möglichkeit, mehr Vertrauen zu gewinnen.

Dieser Test besteht aus einer Reihe von schreibgeschützten Aktivitäten innerhalb des Produktionssystems, die keine neuen Zufallsdaten erzeugen, aber dennoch die grundlegende Funktionalität des Systems aus Sicht der Endbenutzer überprüfen.

Die Einbindung der richtigen Stakeholder in den Prozess trägt dazu bei, die Ausrichtung und Verantwortlichkeit sicherzustellen und gleichzeitig das Vertrauen zu stärken, dass die Ziele erreicht wurden. Letztendlich garantieren diese Tests eine erfolgreiche Freigabe.

Kontinuierliche Integration und Automatisierung von Tests zur Verbesserung der Effizienz

Kontinuierliche Integration und Automatisierung von Tests werden zunehmend von Unternehmen eingesetzt, um agile Prozesse auf die nächste Stufe zu heben.

Wenn das Team die Automatisierung wie oben beschrieben in mehreren Phasen implementieren kann, können diese kombiniert und zu einer dedizierten Testpipeline verbunden werden, bei der es sich im Grunde um einen vollautomatischen Batch-Prozess handelt, der den Großteil der Testaktivitäten unabhängig und ohne Beteiligung eines anderen Teams durchführt Mitglied.

Im Laufe der Zeit wird eine solch umfassende Testpipeline die für alle Testphasen benötigte Gesamtzeit verkürzen. Letztendlich kann dies zu einer wirklich schnellen inkrementellen Produktionsfreigabe nach dem Ende jedes Sprints führen. Obwohl dies ein Idealfall-Szenario ist, ist es in der Realität mit all den erforderlichen Testschritten schwer zu erreichen. Automatisierung ist der einzige Weg dorthin.

Unterschied zwischen Agile Testing und Waterfall Testing

Agile Teststrategien unterscheiden sich von traditionellen Wasserfall-Teststrategien in mehrfacher Hinsicht, wie z. B. Periodizität, Parallelität oder dedizierte Zeit für jede Aktivität.

Der bemerkenswerteste Unterschied liegt jedoch im Fokus jedes Ansatzes:

  • Agiles Testen konzentriert sich auf konstante, schnelle Wiederholungen von Entwicklungs- und Feedbackschleifen, um Probleme zu identifizieren und das Produkt schnell zu verbessern. Ein iterativer Prozess, der sich auf die Zusammenarbeit mit Kunden, kontinuierliche Integration und adaptive Planung konzentriert.
  • Auf der anderen Seite betonen traditionelle Wasserfalltests einen linearen Prozess, bei dem jede Phase separat und in sequentieller Reihenfolge gelöst wird, wobei das Feedback der gesamten Lösung nur für die allerletzte Phase des Projekts und sehr kurz vor dem endgültigen Veröffentlichungsdatum der Produktion verbleibt.

Je früher die Probleme von den Hauptbeteiligten identifiziert werden, desto besser ist die Situation für das Projekt. Hier hat die agile Methodik definitiv die besseren Erfolgsaussichten.

Abschluss

Obwohl der agile Testlebenszyklus kürzer zu sein scheint als der Wasserfall, ist er es in Wirklichkeit nicht. Der gesamte Prozess ist kontinuierlich und dauert bis zum Produktfreigabedatum. Je nach verfügbarem Budget und verfügbarer Zeit für jeden Sprint müssen Sie priorisieren, welche Tests während dieses bestimmten Sprints durchgeführt werden.

Eine gut geplante Teststrategie hilft Ihnen bei der Auswahl, welche Funktionen oder Module mehr Aufmerksamkeit erfordern als andere. Die Automatisierung ermöglicht die Einbeziehung mehrerer Testphasen in denselben Sprint, wodurch die Gesamtzuverlässigkeit des Systems von Sprint zu Sprint erhöht wird.

Sie können sich jetzt einige der Best Practices für Scrum-Tests ansehen.