Zum Inhalt
wannacode

Ä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?

1. Ein Warenkorb von 30 € und ein Warenkorb von 40 €. Wie viele Klassen sind das für die Lieferregel?
2. Wie viele Klassen hat die Regel „kostenlos ab 50,00 € einschließlich, sonst 4,90 €, ein leerer Warenkorb kann nicht bestellt werden“?
3. Ein Warenkorb von 50,00 € und ein Warenkorb von 1000 €. Liegen sie in einer Klasse?
4. Ein Warenkorb von -10 €. Was ist das?

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.

EingabeErwartetDas richtige System
#WarenkorbwertAbgelehntLieferung

Eine leere Ergebniszelle wird nicht geprüft. Beträge schreibt man wie 49,99.

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.

EingabeErwartetDas richtige System
#Im WarenkorbHinzufügenAbgelehntDanach im Warenkorb

Eine leere Ergebniszelle wird nicht geprüft. Beträge schreibt man wie 49,99.

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

1. Was ist eine Äquivalenzklasse?
2. Die Lieferungstests sind 10, 20, 30 und 40 €. Wie hoch ist die Klassenüberdeckung?
3. Warum werden ungültige Klassen einzeln pro Test geprüft?
4. Warum ist das ein Blackbox-Verfahren?
5. Was kann dieses Verfahren allein nicht fangen?

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