Äquivalenzklassen
Kurz gesagt: Die Werte, die eine Regel gleich behandelt, bilden eine Äquivalenzklasse. 30 € und 40 € sind für die Lieferung eine Klasse: Wenn der eine Warenkorbwert stimmt, stimmt auch der andere. Also genügt ein Test pro Klasse. Die Überdeckung ist, wie viele der Klassen getestet sind. Ungültige Klassen werden einzeln getestet, damit sich ein Fehler nicht hinter einem anderen versteckt.
Problem
Zwanzig Tests, eine Idee
Der Tester bekommt die Lieferregel und schreibt Tests: ein Warenkorb von 5 €, 10 €, 15 €, 20 € und so weiter bis 45 €. Dann 55 €, 60 € und so weiter bis 100 €. Zwanzig Tests, alle bestehen.
Nach der Freigabe drückt ein Kunde mit einem leeren Warenkorb auf „Bestellen“ und bekommt eine Bestellung über 0,00 € mit 4,90 € Lieferkosten.
Die zwanzig Tests haben zwei Dinge geprüft: kostenpflichtige Lieferung und kostenlose Lieferung. Je zehnmal. Das dritte, den leeren Warenkorb, hat niemand geprüft.
Die Idee
Blackbox-Verfahren
Vollständiges Testen ist unmöglich. Die möglichen Warenkorbwerte gehen in die Millionen. Du brauchst einen Weg, wenige Tests zu wählen, die viel sagen. Das ist der Testentwurf, und dieses Modul handelt von seinen Verfahren.
Die ersten vier sind Blackbox-Verfahren: Die Tests kommen aus der Regel, aus der Spezifikation, nicht aus dem Code. Der Tester sieht die Eingabe und die Ausgabe. Was drin ist, braucht er nicht.
| Verfahren | Was es fragt | Lektion |
|---|---|---|
| Äquivalenzklassen | Welche Werte verhalten sich gleich? | diese |
| Grenzwerte | Wo endet eine Klasse und beginnt die nächste? | die nächste |
| Entscheidungstabelle | Was geschieht bei jeder Kombination von Bedingungen? | die dritte |
| Zustandsübergänge | Was geschieht auf dem Weg einer Bestellung? | die vierte |
Danach kommen die Whitebox-Verfahren (aus dem Code) und die erfahrungsbasierten.
Die Idee
Eine Klasse, ein Test
Die Regel: „Die Lieferung ist ab 50,00 € einschließlich kostenlos, sonst kostet sie 4,90 €. Ein leerer Warenkorb kann nicht bestellt werden.“
Sie teilt die Warenkorbwerte in Gruppen, die sie gleich behandelt:
| Klasse | Warenkorbwerte | Verhalten |
|---|---|---|
| leerer Warenkorb | 0 € | abgelehnt |
| kostenpflichtige Lieferung | von 0,01 bis 49,99 € | 4,90 € |
| kostenlose Lieferung | ab 50,00 € | 0,00 € |
Jede Gruppe ist eine Äquivalenzklasse. Wenn das System 30 € richtig berechnet, berechnet es mit großer Sicherheit auch 40 € richtig. Also genügt ein Test pro Klasse, ein Vertreter der Klasse.
Wie viele der Klassen getestet sind, ist die Klassenüberdeckung. Die zwanzig Tests vom Anfang hatten eine Überdeckung von 2 von 3. Drei Tests, einer pro Klasse, haben 3 von 3.
Probier es aus
Was ist eine Klasse?
Die Idee
Die Tabelle der Testfälle
In den Aufgaben unten schreibst du Testfälle als Tabelle: pro Zeile eine Eingabe und ein erwartetes Ergebnis. „Ausführen“ führt sie gegen zwei Dinge aus:
- das richtige System, bei dem jede Zeile bestehen muss: Wenn nicht, ist dein erwartetes Ergebnis falsch;
- Versionen des Shops mit je einem Fehler, von der Art, wie echte Shops sie haben. Ein guter Satz von Tests schlägt bei jeder von ihnen fehl.
Die Antwort sagt, wie viele Fehler du fängst und wo du nach den übrigen suchen sollst, nicht welche Zeile du ergänzen sollst.
Eine leere Zelle beim erwarteten Ergebnis wird nicht geprüft. Beträge werden als 49,99 geschrieben, und „Abgelehnt“ ist „ja“ oder „nein“.
Probier es aus
Die Klassen der Lieferung
Schreibe für jede Klasse der Lieferregel einen Test. Je weniger Zeilen, desto besser.
Die Regel: Die Lieferung ist ab einer Bestellung von 50 € (einschließlich) kostenlos, sonst kostet sie 4,90 €. Ein leerer Warenkorb kann nicht bestellt werden.
| Eingabe | Erwartet | Das richtige System | |||
|---|---|---|---|---|---|
| # | Warenkorbwert | Abgelehnt | Lieferung | ||
Eine leere Ergebniszelle wird nicht geprüft. Beträge schreibt man wie 49,99.
Lösung
| Warenkorbwert | Abgelehnt | Lieferung |
|---|---|---|
| 0 | ja | |
| 30 | nein | 4,90 |
| 80 | nein | 0 |
Drei Zeilen, drei Klassen: 0 € (abgelehnt), 30 € (4,90 €), 80 € (0,00 €). Der Warenkorb von 30 € fängt die Version, in der die Schwelle als 5 € statt 50 € geschrieben ist. Der Warenkorb von 0 € fängt den leeren Warenkorb, der Lieferkosten zahlt. Und 40 € neben 30 € fängt nichts Neues: Die beiden Zeilen sind eine Klasse.
Die Idee
Gültige und ungültige Klassen
Klassen gibt es in zwei Arten. Gültige sind die Werte, die die Regel verarbeitet. Ungültige sind die, die das System ablehnen muss: ein negativer Warenkorbwert, eine negative Stückzahl, Text statt einer Zahl.
Bei mehreren Eingaben hat jede ihre eigenen Klassen. Das Warenkorb-Limit („höchstens 10 Stück eines Produkts, du fügst mindestens 1 Stück hinzu“) hat zwei Eingaben: wie viele im Warenkorb sind und wie viele hinzugefügt werden. Die Klassen des Ergebnisses sind drei:
- das Hinzufügen wird angenommen: 2 im Warenkorb, ich füge 3 hinzu, es werden 5;
- abgelehnt, weil es mehr als 10 würden: 5 im Warenkorb, ich füge 8 hinzu;
- abgelehnt, weil die Menge ungültig ist: Ich füge -2 oder 0 hinzu.
Und eine Regel für ungültige Klassen: eine pro Test. Wenn eine Zeile sowohl -2 Stück als auch 15 im Warenkorb hat, lehnt das System sie ab. Aber warum? Fehlt die Prüfung auf eine negative Zahl, besteht der Test trotzdem, weil das Limit den Tag gerettet hat.
Genauer, für Neugierige
Der ISTQB CTFL v4.0.1 beschreibt das Verfahren in Abschnitt 4.2.1 (Äquivalenzklassenbildung). Die Überdeckung wird als Anzahl der getesteten Klassen im Verhältnis zu allen Klassen gemessen, in Prozent. Bei mehreren Eingaben ist das einfachste Maß die Each-Choice-Überdeckung: Jede Klasse jeder Eingabe wird mindestens einmal getestet. Sie verlangt nicht alle Kombinationen zwischen den Eingaben. Kombinationen sind das Thema der Entscheidungstabellen und des paarweisen Testens.
Klassen gibt es nicht nur für Eingaben. Auch Ausgaben werden aufgeteilt (angenommen, abgelehnt), ebenso Zeiten (vor der Frist, danach) und alles, was die Regel unterschiedlich behandelt.
Übung
Die Klassen des Limits
1. Das Warenkorb-Limit. Hier gibt es zwei Eingaben, und die Klassen folgen dem Ergebnis.
Schreibe für jede Klasse einen Test: angenommen, abgelehnt wegen des Limits, abgelehnt wegen einer ungültigen Menge. Prüfe auch, was im Warenkorb bleibt.
Die Regel: Im Warenkorb können höchstens 10 Stück eines Produkts liegen. Was darüber hinausgeht, wird mit einer Meldung abgelehnt, und der Warenkorb bleibt, wie er ist. Hinzugefügt wird mindestens 1 Stück.
| Eingabe | Erwartet | Das richtige System | ||||
|---|---|---|---|---|---|---|
| # | Im Warenkorb | Hinzufügen | Abgelehnt | Danach im Warenkorb | ||
Eine leere Ergebniszelle wird nicht geprüft. Beträge schreibt man wie 49,99.
Lösung
| Im Warenkorb | Hinzufügen | Abgelehnt | Danach im Warenkorb |
|---|---|---|---|
| 2 | 3 | nein | 5 |
| 5 | 8 | ja | 5 |
| 3 | -2 | ja | 3 |
Drei Zeilen: (2, 3 hinzufügen) wird angenommen und ergibt 5; (5, 8 hinzufügen) wird abgelehnt, und der Warenkorb bleibt bei 5; (3, -2 hinzufügen) wird abgelehnt, und der Warenkorb bleibt bei 3. Wenn alle Zeilen mit einem leeren Warenkorb beginnen, rutschen zwei Fehler durch: die Version, die nur die hinzugefügten Stücke mit 10 vergleicht, und die, die den Warenkorb bei einer Ablehnung leert. Mit einem leeren Warenkorb sehen beide richtig aus.
Die Idee
Was die Blackbox nicht sieht
Klassen kommen aus der Regel. Und die Regel sagt nicht alles über den Code.
Angenommen, im Code ist eine Zeile aus dem alten Tarif geblieben: „ab 100 € wieder 4,90 € Lieferung“. Für die Regel sind 80 € und 150 € eine Klasse. Für den Code sind es zwei. Der Test mit 80 € besteht, und der Fehler bleibt.
Die Blackbox kann eine Klasse nicht sehen, die nur im Code existiert. Deshalb gibt es andere Verfahren: Die Whitebox schaut auf den Code, und die Erfahrung legt nahe, wo sich so etwas meist versteckt. Und die Grenze zwischen Klassen, wo Fehler am dichtesten sind, ist die nächste Lektion.
Test
Teste dich
Verwandte Lektionen
Abschnitt „Verwandte Lektionen“- Baut auf: Arten von Anforderungen · Wenn eine Tabelle klarer ist · Akzeptanzkriterien · Warum früh
- Geht weiter in: Grenzwerte · Entscheidungstabellen · Zustandsübergänge · Paarweises Testen
- Aufgaben zum Thema: Testentwurfsverfahren