Schlechte Szenarien
Kurz gesagt: Ein schlechtes Szenario kann bestehen und trotzdem schaden: eine lange Reise mit vielen „Wenn“-Schritten, ein Szenario, das sich auf das vorige verlässt, eine Prüfung eines Datenbankfelds statt dessen, was der Kunde sieht, Buttons und Farben, „Und“ mit Einzelheiten, die nicht zählen. Jedes hat eine Lösung: teilen, einen eigenen Anfang geben, prüfen, was sichtbar ist, behalten, was zählt.
Problem
Zweihundert Szenarien, die niemand liest
Das Team hat 200 Szenarien. Sie brauchen 40 Minuten zum Laufen. Eines ist gestern Nacht durchgefallen: „Die ganze Reise des Kunden“, 26 Schritte. Es ist bei Schritt 19 gescheitert.
Der Entwickler liest eine halbe Stunde daran. Es stellt sich heraus, dass der Fehler im Gutscheincode steckt und das Szenario vom Warenkorb handelt. Währenddessen fallen drei weitere Szenarien durch, weil sie sich auf denselben Warenkorb aus „Die ganze Reise“ verlassen.
Alle Szenarien haben früher bestanden. Aber sie haben nicht geholfen.
Die Idee
Fünf bekannte Smells
Manche Arten von Szenarien tauchen in jedem Projekt auf. Man nennt sie „Smells“ (Gerüche): Etwas stimmt nicht, auch wenn es besteht.
| Smell | Wie es aussieht | Warum es schadet | Lösung |
|---|---|---|---|
| eine lange Reise | viele „Wenn“- und „Dann“-Schritte hintereinander | fällt es durch, weiß niemand, welches Verhalten kaputt ist | jedes Verhalten ist ein eigenes Szenario |
| gekoppelte Szenarien | ein Szenario ohne Anfang, das sich auf das vorige verlässt | allein oder in anderer Reihenfolge ausgeführt, fällt es durch | jedes Szenario bringt sein eigenes „Angenommen“ mit |
| Prüfung von Interna | „Dann in der Tabelle orders …“, „Dann wird der Dienst aufgerufen …“ | es bricht, wenn sich der Code ändert, obwohl die Regel gleich bleibt | prüfe, was der Kunde sieht |
| Bildschirmdetails | Buttons, Farben, Felder, Sekunden | es bricht bei jedem neuen Design | deklarative Schritte |
| „Und“ überall | acht Zeilen „Und“ mit Namen, Adressen, Telefonen | das Wichtige geht zwischen dem Unwichtigen verloren | behalte nur, wovon das Ergebnis abhängt |
Einige davon hast du schon in der Lektion über deklarative Szenarien gesehen. Hier behebst du die zwei häufigsten.
Probier es aus
Welcher Smell?
Übung
Die Reise
1. Der Warenkorb. Der Editor enthält ein Szenario, das den Warenkorb Schritt für Schritt füllt.
Teile die Reise in zwei Szenarien mit je einem „Wenn“: Das zehnte Stück wird angenommen, das elfte wird abgelehnt. Jedes muss mit seinem eigenen Warenkorb beginnen und alle vier Fehler abfangen.
Lösung
# language: de
Funktionalität: Höchstens 10 Stück eines Produkts
Szenario: Das zehnte Stück wird angenommen
Angenommen ein Warenkorb mit 9 Stück des Produkts
Wenn ich 1 Stück hinzufüge
Dann enthält der Warenkorb 10 Stück des Produkts
Szenario: Das elfte Stück wird abgelehnt
Angenommen ein Warenkorb mit 10 Stück des Produkts
Wenn ich 1 Stück hinzufüge
Dann wird das Hinzufügen abgelehnt
Und der Warenkorb enthält 10 Stück des Produkts
Die beiden Szenarien beginnen direkt an der interessanten Stelle: bei 9 Stück und bei 10 Stück. Du musst keinen Warenkorb von null füllen, um die Grenze zu prüfen. Nach der Ablehnung prüfst du auch, was im Warenkorb übrig bleibt: Ohne diese Prüfung rutscht das System durch, das bei einer Ablehnung den Warenkorb leert.
Die Idee
Jedes Szenario von vorn
Szenarien laufen getrennt. Jedes beginnt mit einem leeren System: kein Warenkorb, kein Kunde, nichts vom vorigen. Die Werkzeuge dürfen sie in anderer Reihenfolge ausführen, nur eines oder mehrere gleichzeitig.
Deshalb ist ein Szenario, das sich auf das vorige verlässt, eine Falle. In der Datei sieht es in Ordnung aus, weil du von oben nach unten liest. Aber allein ausgeführt, hat es nichts, womit es anfangen kann.
Übung
Die gekoppelten Szenarien
2. Dann eine Bestellung von 50 €. Das zweite Szenario hat keinen Anfang.
Führe die Szenarien aus und sieh, warum das zweite auf dem richtigen System durchfällt. Behebe es dann so, dass es allein laufen kann.
Lösung
# language: de
Funktionalität: Kostenlose Lieferung
Szenario: Eine kleine Bestellung
Angenommen ein Warenkorb von 49,99 €
Wenn ich bestelle
Dann beträgt die Lieferung 4,90 €
Szenario: Eine Bestellung von 50 €
Angenommen ein Warenkorb von 50,00 €
Wenn ich bestelle
Dann ist die Lieferung kostenlos
Allein ausgeführt, hat das zweite Szenario keinen Warenkorb. In der Datei sah es aus, als setze es das erste fort, aber jedes Szenario beginnt von vorn. Mit „Angenommen ein Warenkorb von 50,00 €“ bringt es seinen eigenen Anfang mit und kann in jeder Reihenfolge laufen.
Die Idee
Interna und Einzelheiten
Die anderen zwei Smells behebt man auf dieselbe Weise: Du prüfst, was der Kunde sieht.
# language: deFunktionalität: Kostenlose Lieferung
Szenario: Lieferung unter der Grenze Angenommen ein Kunde namens Anna Schmidt Und die Adresse Hauptstraße 5, Köln Und das Telefon 0151 234567 Und ein Warenkorb von 49,99 € Wenn ich bestelle Dann ist das Feld delivery_fee in der Tabelle orders gleich 490 Und der Button „Bezahlen“ ist grünWichtig sind hier zwei Zeilen: der Betrag und die Lieferung. Name, Adresse und Telefon beeinflussen die Lieferung nicht, aber du musst sie lesen, um das zu verstehen. Das Datenbankfeld stimmt heute, aber morgen wird die Gebühr vielleicht in Euro statt in Cent gespeichert. Und der Button ist Design.
Das korrigierte Szenario hat drei Zeilen: ein Warenkorb von 49,99 €, ich bestelle, die Lieferung beträgt 4,90 €. Die Einzelheiten verschwinden nicht aus dem System. Sie gehören nur nicht zu diesem Verhalten.
Genauer, für Neugierige
Das Wort „Smell“ stammt von den Code-Smells aus dem Buch von Martin Fowler über Refactoring (1999), in dem Kent Beck und Fowler Anzeichen für Code beschreiben, der funktioniert, sich aber schwer ändern lässt. Für Szenarien sind die Namen nicht standardisiert: Verschiedene Bücher nennen sie ein wenig anders.
Die Gherkin Reference in der Dokumentation von Cucumber gibt einen Maßstab: Eine Grundlage, die länger als 4 Zeilen ist, enthält wahrscheinlich Einzelheiten, die zu Schritten auf höherer Ebene werden sollten. Dasselbe gilt für ein langes „Angenommen“ mit vielen „Und“-Schritten.
„Interna prüfen“ heißt nicht, dass die Datenbank nie getestet wird. Komponenten- und Integrationstests prüfen genau das, und sie haben ihren Platz im Modul über Teststufen. Aber ein Gherkin-Szenario ist ein Abnahmetest: Es spricht über das Verhalten, das der Fachbereich abnimmt.
Test
Teste dich
Verwandte Lektionen
Abschnitt „Verwandte Lektionen“- Baut auf: Warum Programme versagen · Angenommen, Wenn, Dann · Szenariogrundriss und Beispiele · Was, nicht wie
- Geht weiter in: Lebendige Dokumentation
- Aufgaben zum Thema: Szenarien mit Gherkin