In der Landschaft der Softwareentwicklung ist die Kluft zwischen dem, was Stakeholder sich vorstellen, und dem, was Entwickler bauen, oft die Quelle erheblicher Spannungen. Mehrdeutigkeit in Anforderungen fĂŒhrt zu Nacharbeit, verzögerten Releases und frustrierten Teams. Um diese Kluft zu ĂŒberbrĂŒcken, benötigen Teams eine gemeinsame Sprache, die prĂ€zise, lesbar und ausfĂŒhrbar ist. Eine der effektivsten Techniken, um diese Klarheit zu erreichen, ist dieGiven When ThenSyntax. Dieser Ansatz verwandelt vage User Stories in konkrete Spezifikationen des Verhaltens.
Wenn sie korrekt angewendet wird, dient diese Methode nicht nur als SchreibĂŒbung, sondern wird zu einem Vertrag zwischen dem GeschĂ€ft, dem Design-Team und der Entwicklung. Sie stellt sicher, dass jedes gelieferte Feature mit dem vorgesehenen Wert ĂŒbereinstimmt. Dieser Leitfaden untersucht die Mechanik, Vorteile und bewĂ€hrten Praktiken fĂŒr die effektive Verwendung von Given When Then zur Spezifikation des Verhaltens von User Stories.

đ§ VerstĂ€ndnis der Kernstruktur
Das Given When Then-Muster ist eine grundlegende Komponente des Behavior-Driven-Development (BDD). Es strukturiert Akzeptanzkriterien so, dass sie natĂŒrliche Sprache nachahmen, wodurch sie fĂŒr nicht-technische Stakeholder zugĂ€nglich sind, gleichzeitig aber ausreichend detailliert fĂŒr automatisiertes Testen bleiben. Jeder Teil des Musters erfĂŒllt eine eindeutige Funktion bei der Definition des Lebenszyklus einer Szenario.
- Gegeben: Legt den ursprĂŒnglichen Kontext oder Zustand fest. Es schafft die Grundlage, indem es die Voraussetzungen beschreibt, die vor der Aktion erfĂŒllt sein mĂŒssen.
- Wenn: Beschreibt das spezifische Ereignis oder die Aktion, die das Verhalten auslöst. Dies ist die Eingabe oder der Reiz.
- Dann: Definiert das beobachtbare Ergebnis oder die Auswirkung. Es bestÀtigt, dass das System nach der Aktion wie erwartet reagiert.
Durch die Trennung von Kontext, Aktion und Ergebnis können Teams Variablen isolieren und genau verstehen, welcher Teil des Systems fĂŒr ein bestimmtes Verhalten verantwortlich ist. Diese ModularitĂ€t verringert die KomplexitĂ€t und erleichtert das Debugging erheblich.
đ Aufteilung der Komponenten
đïž Der âGegebenâ-Kontext
Der Gegeben-Schritt wird oft ĂŒbersehen, ist aber entscheidend fĂŒr die richtige Umgebung. Er sollte nicht die Aktion selbst beschreiben, sondern den Zustand des Systems. Ein gut formulierter Gegeben-Schritt beantwortet die Frage: âWas muss vor Beginn wahr sein?â
BerĂŒcksichtigen Sie die Feinheiten beim Schreiben dieses Abschnitts:
- Zustand gegenĂŒber Daten:Unterscheiden Sie zwischen dem Zustand der Anwendung (z.âŻB. ein Benutzer ist angemeldet) und den vorhandenen Daten (z.âŻB. der Benutzer hat ein Guthaben von 100 $).
- Voraussetzungen:Listen Sie alle notwendigen Voraussetzungen auf. Wenn eine Zahlung aufgrund unzureichender Mittel fehlschlĂ€gt, muss der Gegeben-Schritt sicherstellen, dass das Guthaben tatsĂ€chlich ĂŒberprĂŒft wird.
- Lesbarkeit:Halten Sie es deklarativ. Vermeiden Sie imperativen Sprachgebrauch wie âKlicken Sie auf die SchaltflĂ€che.â Stattdessen verwenden Sie âDer Benutzer befindet sich auf dem Dashboard.â
Wenn der Gegeben-Schritt mehrdeutig ist, schlagen Tests unvorhersehbar fehl. Wenn der Systemzustand nicht klar definiert ist, könnte die Automatisierung gegen eine andere Umgebung laufen als beabsichtigt, was zu falsch negativen Ergebnissen fĂŒhrt.
đ Der âWennâ-Auslöser
Der Wenn-Schritt stellt die Interaktion dar. Es ist der Moment, in dem der Benutzer oder das System eine Ănderung auslöst. Dies sollte eine einzelne, atomare Aktion sein. Wenn Sie mehrere Aktionen in einen Wenn-Schritt zusammenfassen, wird es schwierig, festzustellen, welcher Teil des Ablaufs einen Fehler verursacht hat.
Wichtige Ăberlegungen fĂŒr den Wenn-Abschnitt sind:
- Einzelverantwortlichkeit:Konzentrieren Sie sich auf ein Ereignis pro Szenario. Wenn Sie eine Abfolge von Ereignissen testen mĂŒssen, ĂŒberlegen Sie, sie in separate Szenarien aufzuteilen oder Szenario-AusfĂŒhrungen zu verwenden.
- Benutzerabsicht:Formulieren Sie die Aktion aus der Perspektive des Benutzers oder der Systemgrenze. âDer Benutzer sendet das Formularâ ist besser als âDer Absende-Button wird geklickt.â
- Zeitpunkt:Vermeiden Sie vage Begriffe wie âbaldâ oder âspĂ€terâ. Seien Sie genau bezĂŒglich des Auslöseereignisses.
đ Das âDannâ-Ergebnis
Der Dann-Schritt ist die ĂberprĂŒfungsmechanismus. Er bestĂ€tigt, dass das System korrekt auf den Wenn-Schritt reagiert hat. Hier wird der Wertvorschlag ĂŒberprĂŒft.
Wirksame Dann-Schritte sollten:
- Beobachtbar sein:ĂberprĂŒfen Sie etwas, was sichtbar oder messbar ist. PrĂŒfen Sie BenutzeroberflĂ€chenelemente, DatenbankdatensĂ€tze oder API-Antworten.
- Vermeiden Sie Implementierungsdetails:Konzentrieren Sie sich auf das Ergebnis, nicht auf die interne Logik. âDie BestĂ€tigungsmitteilung erscheintâ ist besser als âDie Datenbank-ID wird erhöht.â
- Abdecken von Erfolg und Fehler:Stellen Sie sicher, dass Sie angeben, was geschieht, wenn die Aktion fehlschlĂ€gt. âDann wird eine Fehlermeldung angezeigtâ ist ebenso wichtig wie âDann wird die Bestellung aufgegeben.â
đ Verbesserung der Klarheit durch strukturierte Daten
Um die Lesbarkeit zu verbessern und Wiederholungen zu reduzieren, verwenden Teams oft Tabellen in ihren Spezifikationen. Dies ist besonders nĂŒtzlich, wenn mehrere Varianten des gleichen Verhaltens mit unterschiedlichen Daten eingaben getestet werden.
| Szenariotyp | Schwerpunkt | Beispiel |
|---|---|---|
| GlĂŒcklicher Pfad | Standarderfolgsablauf | Gegeben gĂŒltige Anmeldeinformationen, wenn der Login versucht wird, dann wird das Dashboard angezeigt. |
| Randfall | Grenzbedingungen | Gegeben ein Passwort mit 8 Zeichen, wenn eine ZurĂŒcksetzung angefordert wird, dann wird das Passwort akzeptiert. |
| Negativer Pfad | Fehlerbehandlung | Gegeben eine abgelaufene Sitzung, wenn auf Zugriff angefragt wird, dann erfolgt eine Umleitung zur Anmeldung. |
Durch diese Struktur können Stakeholder die Anforderungen schnell ĂŒberfliegen und den Umfang der Abdeckung verstehen, ohne dichte AbsĂ€tze von Text lesen zu mĂŒssen.
đ« HĂ€ufige Fallen, die vermieden werden sollten
Selbst mit einem soliden Rahmen begehen Teams oft Fehler, die die Wirksamkeit der Spezifikation untergraben. Die frĂŒhzeitige Erkennung dieser Fallen sichert die Haltbarkeit der Dokumentation.
â Vermischung von Aspekten
Ein hĂ€ufiger Fehler besteht darin, GeschĂ€ftsregeln mit technischen BeschrĂ€nkungen in derselben Stufe zu kombinieren. Zum Beispiel vermischt der Satz âGegeben ist, dass die Datenbank verbunden istâ Infrastruktur mit Verhalten. Das System sollte voraussetzen, dass die Verbindung auf einer tieferen Ebene behandelt wird. Konzentrieren Sie sich auf den geschĂ€ftlichen Kontext.
â Uneindeutige Verben
Wörter wie âverarbeitenâ, âbehandelnâ oder âverwaltenâ sind zu allgemein. Sie definieren nicht das Ergebnis. Statt âDas System verarbeitet die Bestellungâ zu sagen, verwenden Sie stattdessen âDie BestĂ€tigungs-E-Mail fĂŒr die Bestellung wird versendetâ. PrĂ€zision beseitigt Interpretationsfehler.
â Zu viele Szenarien
WĂ€hrend Detailfreude gut ist, fĂŒhrt zu groĂe Spezifizierung zu Wartungsaufwand. Wenn ein Szenario zwanzig Given-Schritte hat, versucht es wahrscheinlich zu viel zu tun. Zerlegen Sie es in kleinere, wiederverwendbare Kontextblöcke.
â Technische Kopplung
Schreiben Sie keine Szenarien, die von spezifischen Implementierungsdetails wie Klassennamen oder Datenbankschemata abhÀngen. Diese Àndern sich hÀufig und brechen Tests unnötigerweise. Konzentrieren Sie sich auf das beobachtbare Verhalten.
đ„ Dynamik der Zusammenarbeit
Die StĂ€rke von Gegeben Wenn Dann liegt in der Zusammenarbeit, die sie fördert. Es ist nicht nur ein Dokumentationsformat, sondern ein Werkzeug zur UnterstĂŒtzung der Teamausrichtung.
- Product Owner: Sie definieren die âDannâ-Ergebnisse basierend auf geschĂ€ftlichem Wert. Sie stellen sicher, dass das Verhalten die NutzerbedĂŒrfnisse erfĂŒllt.
- Entwickler: Sie klĂ€ren den âGegebenâ-Kontext, um Vorbedingungen und AbhĂ€ngigkeiten zu verstehen.
- QA-Spezialisten: Sie validieren die âWennâ-Aktionen, um sicherzustellen, dass das System korrekt reagiert und RandfĂ€lle abgedeckt sind.
Diese gemeinsame VerstÀndigung verringert die AbhÀngigkeit von Dokumentation, die in einer Isolation liegt. Wenn die Spezifikation in einem gemeinsamen Format verfasst wird, trÀgt jeder zur QualitÀt der Anforderung bei.
đ Von der Spezifikation zur Automatisierung
Ein Hauptvorteil dieser Syntax ist ihre direkte Abbildung auf automatisierte Testframeworks. Obwohl die spezifischen Werkzeuge variieren, bleibt die logische Struktur konstant.
Wenn ein Szenario klar formuliert ist, kann es mit minimalem Aufwand in ausfĂŒhrbaren Code ĂŒbersetzt werden:
- Schrittdefinitionen:Jeder Gegeben-, Wenn- oder Dann-Ausdruck kann einer Funktion im Test-Set zugeordnet werden.
- Wiederverwendbarkeit:HĂ€ufige Kontexte (wie âBenutzer ist angemeldetâ) können einmal definiert und in mehreren Szenarien wiederverwendet werden.
- Regressionssicherheit:Wenn die Anwendung sich weiterentwickelt, wirken diese Szenarien als Sicherheitsnetz und stellen sicher, dass neuer Code bestehendes Verhalten nicht stört.
Diese Integration schafft eine einzige Quelle der Wahrheit. Die Akzeptanzkriterien sind die Tests, und die Tests sind die Akzeptanzkriterien. Diese Ausrichtung stellt sicher, dass genau das getestet wird, was vereinbart wurde.
đ Praktische Beispiele
Um den Unterschied zwischen einer Standardanforderung und einer Verhaltensspezifikation zu veranschaulichen, betrachten wir ein konkretes Feature: eine Anfrage zur PasswortrĂŒcksetzung.
â Uneindeutige Spezifikation
âDer Benutzer sollte in der Lage sein, sein Passwort zurĂŒckzusetzen, falls er es vergisst. Das System sollte eine E-Mail senden.â
Dies lĂ€sst zu viel Interpretationsspielraum. Was geschieht, wenn die E-Mail-Adresse ungĂŒltig ist? Was, wenn der Benutzer nicht existiert? Die Zeitpunkt der E-Mail-Sendung ist nicht definiert.
â Gegeben Wenn Dann Spezifikation
Szenario: Anfordern einer PasswortzurĂŒcksetzung
Gegebender Benutzer verfĂŒgt ĂŒber ein Konto, das mit der E-Mail-Adresse â[email protected]â registriert ist
Wennsie das ZurĂŒcksetzungsformular mit dieser E-Mail-Adresse absenden
Danneine BestÀtigungs-Nachricht wird auf dem Bildschirm angezeigt
Undein ZurĂŒcksetzungslink wird an â[email protected]â gesendet
Szenario: ZurĂŒcksetzen mit unbekannter E-Mail-Adresse
Gegebenes gibt kein Konto, das mit â[email protected]â verknĂŒpft ist
Wennsie das ZurĂŒcksetzungsformular absenden
Danneine generische Erfolgsmeldung wird angezeigt
Undkeine E-Mail wird an die bereitgestellte Adresse gesendet
Diese Beispiele zeigen, wie Sicherheit und Benutzerfreundlichkeit explizit berĂŒcksichtigt werden. Das zweite Szenario schĂŒtzt die PrivatsphĂ€re des Benutzers, indem es nicht offenbart, ob ein Konto existiert, was eine entscheidende SicherheitsĂŒberlegung ist.
đĄïž Datengetriebene Szenarien
HĂ€ufig gilt ein einzelnes Verhalten fĂŒr mehrere DatensĂ€tze. Die Erstellung separater Szenarien fĂŒr jede Variation kann sich wiederholend erweisen. Die Lösung besteht darin, Szenario-Ausschreibungen zu verwenden.
Diese Struktur ermöglicht es Ihnen, den Ablauf einmal zu definieren und ihn mit verschiedenen Datenpunkten zu fĂŒllen.
| Eingabebetrag | Erwarteter Kontostand | Status |
|---|---|---|
| $50 | $150 | Erfolg |
| $-10 | $100 | Fehler |
| $1000 | $1000 | Limit erreicht |
Durch die Definition des Ablaufs mit Platzhaltern behalten Sie die Lesbarkeit bei, wĂ€hrend Sie eine umfassende Abdeckung gewĂ€hrleisten. Dieser Ansatz reduziert Duplikate und erleichtert die Aktualisierung. Wenn sich der Ablauf Ă€ndert, aktualisieren Sie die Vorlage anstatt von fĂŒnfzig einzelnen Szenarien.
đ Wartung und Evolution
Spezifikationen sind keine statischen Artefakte. Sie mĂŒssen sich entwickeln, je weiter sich das Produkt weiterentwickelt. RegelmĂ€Ăige ĂberprĂŒfungen sind notwendig, um sicherzustellen, dass die Given-When-Then-Schritte weiterhin korrekt sind.
Best Practices fĂŒr die Wartung umfassen:
- Schritte zur Refaktorisierung: Wenn ein Schritt zu komplex wird, refaktorisieren Sie ihn in kleinere, sinnvolle Einheiten.
- Ablauf: Entfernen Sie Szenarien, die die aktuelle GeschÀftslogik nicht mehr widerspiegeln.
- Versionsverwaltung: Verfolgen Sie Ănderungen an Szenarien, um zu verstehen, wie sich die Anforderungen im Laufe der Zeit verĂ€ndert haben.
Die Investition von Zeit in die Wartung dieser Spezifikationen zahlt sich in Form reduzierter Fehleranzahlen und schnellerer Einarbeitung neuer Teammitglieder aus. Neue Entwickler können die Szenarien lesen, um das Systemverhalten zu verstehen, ohne durch den Code zu wĂŒhlen.
đĄ Letzte Ăberlegungen zur Spezifikation
Klare Spezifikationen zu verfassen ist eine Disziplin, die Ăbung und Sorgfalt erfordert. Das Given-When-Then-Muster bietet einen robusten Rahmen fĂŒr diese Disziplin. Es zwingt Teams, die Auswirkungen ihrer Features zu ĂŒberdenken, bevor Code geschrieben wird.
Durch die Fokussierung auf Kontext, Aktion und Ergebnis erstellen Sie ein lebendiges Dokument, das Entwicklung und Test treibt. Es bringt das Team um eine gemeinsame Definition des Fertigstellungsstatus zusammen. Diese Ausrichtung ist die Grundlage fĂŒr die Lieferung hochwertiger Software.
Denken Sie daran, dass das Ziel die Kommunikation ist. Wenn ein Stakeholder das Szenario nicht verstehen kann, ist es noch nicht bereit. Verwenden Sie diese Struktur, um Dialog zu fördern, Erwartungen zu klĂ€ren und Software zu entwickeln, die die BedĂŒrfnisse der Nutzer wirklich erfĂŒllt.











