Zum Inhalt
wannacode

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?

1. Ein Szenario mit 18 Schritten: anmelden, suchen, drei Produkte hinzufügen, Mengen ändern, einen Code eingeben, bezahlen und die E-Mail prüfen.
2. „Dann ist das Feld status in der Tabelle orders gleich 3“
3. Das zweite Szenario in der Datei beginnt mit „Wenn ich bezahle“, ohne „Angenommen“, und besteht nur, wenn das erste vorher gelaufen ist.
4. „Angenommen ein Kunde namens Anna Schmidt / Und die Adresse Hauptstraße 5 / Und das Telefon 0151 234567 / Und ein Warenkorb von 49,99 €“
5. „Dann wird der Button Bezahlen grau, und ein grünes Häkchen erscheint“

Ü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.

GherkinHöchstens 10 Stück eines Produkts

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.

GherkinKostenlose Lieferung

Die Idee

Interna und Einzelheiten

Die anderen zwei Smells behebt man auf dieselbe Weise: Du prüfst, was der Kunde sieht.

# language: de
Funktionalitä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ün

Wichtig 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

1. Das Szenario besteht. Kann es trotzdem schlecht sein?
2. Warum soll sich ein Szenario nicht auf das vorige verlassen?
3. Wie behebst du „Dann ist das Feld delivery_fee in der Tabelle orders gleich 490“?
4. Was ist KEIN Zeichen für ein schlechtes Szenario?

Erstellt von Ivo Gergov im Rahmen der Kampagne von Evo Tech für zugängliche Programmierausbildung ·