Entscheidungstabellen
Kurz gesagt: In einer Entscheidungstabelle ist jede Spalte eine Kombination von Bedingungen mit einem Ergebnis, und jede Spalte ist ein Testfall. Drei Bedingungen mit „ja“ oder „nein“ ergeben 8 Spalten. Spalten mit demselben Ergebnis, die sich nur in einer Bedingung unterscheiden, werden mit „—“ (egal) zusammengefasst, und es gibt weniger Tests. Eine leere oder umstrittene Zelle ist eine Frage an den Inhaber.
Problem
Drei Tests, ein falscher Preis
Du kennst die Rabattregel: Der Gutscheincode gibt 10 % und gilt nicht für reduzierte Produkte; Stammkunden bekommen 5 %, auch auf reduzierte Produkte; die Rabatte addieren sich nicht, es gilt der größere.
Der Tester schreibt drei Tests: ein Kunde mit Code (10 %), ein Stammkunde ohne Code (5 %), ein Kunde mit nichts (0 %). Sie bestehen.
Nach der Freigabe gibt ein Stammkunde einen Code für ein nicht reduziertes Produkt ein und bekommt 15 %. Jede Bedingung wurde getestet. Die Kombination, in der der Fehler wohnte, nicht.
Die Idee
Jede Spalte ist ein Test
In der Lektion „Wenn eine Tabelle klarer ist“ war die Entscheidungstabelle eine Anforderung. Jetzt ist sie Testentwurf: Jede Spalte ist ein Testfall.
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |
|---|---|---|---|---|---|---|---|---|
| Der Code ist gültig | ja | ja | ja | ja | nein | nein | nein | nein |
| Das Produkt ist reduziert | ja | ja | nein | nein | ja | ja | nein | nein |
| Der Kunde ist Stammkunde | ja | nein | ja | nein | ja | nein | ja | nein |
| Rabatt | ? | ? | ? | 10 % | ? | ? | 5 % | 0 % |
Die Tests vom Anfang waren die Spalten 4, 7 und 8. Der Fehler war in Spalte 3. Die Überdeckung der Tabelle ist, wie viele der Spalten getestet sind: hier 3 von 8.
Die volle Tabelle ist leicht zu bauen: Die Bedingungen werden zu Zeilen, und die Spalten sind alle Kombinationen. Drei Bedingungen mit „ja“ oder „nein“ ergeben 2 × 2 × 2 = 8.
Probier es aus
Spalten als Tests
Trage den Rabatt für jede der acht Spalten ein. Hier sind die Spalten der Tabelle Zeilen: Jede Zeile ist ein Testfall.
Die Regel: Ein gültiger Gutscheincode gibt 10 %, aber nicht auf reduzierte Produkte. Ein Stammkunde bekommt 5 %, auch auf reduzierte Produkte. Rabatte werden nicht addiert: Es gilt der größere.
| Eingabe | Erwartet | Das richtige System | ||||
|---|---|---|---|---|---|---|
| # | Gültiger Code | Reduziert | Stammkunde | Rabatt | ||
Der Rabatt wird als Zahl geschrieben: 10 oder 10 %. Eine leere Ergebniszelle wird nicht geprüft.
Lösung
| Gültiger Code | Reduziert | Stammkunde | Rabatt |
|---|---|---|---|
| ja | ja | ja | 5 |
| ja | ja | nein | 0 |
| ja | nein | ja | 10 |
| ja | nein | nein | 10 |
| nein | ja | ja | 5 |
| nein | ja | nein | 0 |
| nein | nein | ja | 5 |
| nein | nein | nein | 0 |
Spalte 3 (gültiger Code, nicht reduziert, Stammkunde) fängt zwei Fehler: addierte Rabatte (15 %) und den kleineren statt des größeren (5 %). Spalte 1 fängt den Code, der den Stammkundenrabatt abschaltet und bei einem reduzierten Produkt 0 % gibt. Die volle Tabelle übersieht nichts, denn sie probiert jede Kombination aus.
Die Idee
Zusammenfassen
Schau dir die Spalten 1 und 5 an. Sie unterscheiden sich nur im Code, und das Ergebnis ist dasselbe: 5 %. Wenn das Produkt reduziert und der Kunde Stammkunde ist, ist der Code egal. Die beiden Spalten werden zu einer, und an die Stelle des Codes kommt „—“.
| 1+5 | 2+6 | 3+4 | 7 | 8 | |
|---|---|---|---|---|---|
| Der Code ist gültig | — | — | ja | nein | nein |
| Das Produkt ist reduziert | ja | ja | nein | nein | nein |
| Der Kunde ist Stammkunde | ja | nein | — | ja | nein |
| Rabatt | 5 % | 0 % | 10 % | 5 % | 0 % |
Aus acht Tests werden fünf. Das ist das Zusammenfassen der Tabelle.
Der Preis: Das Zusammenfassen sagt „nach der Regel ist diese Bedingung egal“. Aber die Blackbox weiß nicht, ob der Code zustimmt. Die Spalten 3 und 4 werden zu „Code ja, reduziert nein“, und Spalte 3 ist genau die, in der der Code 15 % gab. Wenn du aus der zusammengefassten Spalte nur einen Kunden testest, der kein Stammkunde ist, rutscht der Fehler durch.
Ein Test kann nicht „—“ sein: An die Stelle des Strichs setzt du einen Wert. Nimm den, bei dem ein Fehler am wahrscheinlichsten ist. Deshalb testet man bei riskanten Regeln die volle Tabelle und fasst zusammen, wenn Tests teuer und das Risiko klein sind.
Genauer, für Neugierige
Der ISTQB CTFL v4.0.1 beschreibt das Verfahren in Abschnitt 4.2.3 (Entscheidungstabellentest). Bedingungen und Aktionen sind Zeilen, Spalten sind die Regeln (die Kombinationen). Die Notation: „T“ und „F“ für Bedingungen, „—“ für eine Bedingung, die egal ist, „N/A“ für eine nicht realisierbare Kombination, „X“ für eine Aktion, die stattfindet. Die Überdeckung ist die Anzahl der getesteten Spalten im Verhältnis zu allen realisierbaren. Das Zusammenfassen (Minimierung) verringert die Zahl der Tests, aber der Lehrplan merkt an, dass dabei ein Teil der Prüfung verloren geht.
Probier es aus
Fasse die Spalten zusammen
Baue die zusammengefasste Tabelle: höchstens 5 Zeilen, die trotzdem jeden Fehler fangen. Wo die Lektion „—“ hat, wähle einen Wert.
Die Regel: Ein gültiger Gutscheincode gibt 10 %, aber nicht auf reduzierte Produkte. Ein Stammkunde bekommt 5 %, auch auf reduzierte Produkte. Rabatte werden nicht addiert: Es gilt der größere.
| Eingabe | Erwartet | Das richtige System | ||||
|---|---|---|---|---|---|---|
| # | Gültiger Code | Reduziert | Stammkunde | Rabatt | ||
Der Rabatt wird als Zahl geschrieben: 10 oder 10 %. Eine leere Ergebniszelle wird nicht geprüft.
Lösung
| Gültiger Code | Reduziert | Stammkunde | Rabatt |
|---|---|---|---|
| ja | ja | ja | 5 |
| ja | ja | nein | 0 |
| ja | nein | ja | 10 |
| nein | nein | ja | 5 |
| nein | nein | nein | 0 |
Bei 3+4 ist der Stammkunde „ja“: Dort könnten sich die Rabatte addieren. Bei 1+5 ist der Code „ja“: Dort könnte der Code für ein reduziertes Produkt gelten oder den Stammkundenrabatt abschalten. Fünf Zeilen fangen alles, was die acht fangen, aber nur mit diesen Werten. Mit „nein“ anstelle jedes Strichs ist die Tabelle immer noch zusammengefasst, und vier Fehler rutschen durch.
Die Idee
Mehr als zwei Werte
„Der Code ist gültig“ sieht nach „ja“ oder „nein“ aus. Im Shop ist es das nicht. Der Code kann nicht eingegeben, gültig, abgelaufen oder schon benutzt sein, und jeder Fall gibt dem Kunden etwas anderes:
| 1 | 2 | 3 | 4 | 5 | |
|---|---|---|---|---|---|
| Ein Code wird eingegeben | nein | ja | ja | ja | ja |
| Er ist abgelaufen | N/A | nein | ja | nein | ja |
| Er wurde benutzt | N/A | nein | nein | ja | ja |
| Der Kunde sieht | den Warenkorbwert ohne Code | den Rabatt | „Der Code ist abgelaufen“ | „Der Code wurde schon benutzt“ | ? |
Zwei Dinge zeigen sich gleichzeitig.
Unmögliche Kombinationen. Ein Code, der nicht eingegeben wurde, kann nicht abgelaufen sein. Solche Spalten werden als unmöglich (N/A) markiert und nicht getestet.
Die leere Zelle. Spalte 5: Der Code ist sowohl abgelaufen als auch benutzt. Welche Meldung? Die Regel sagt es nicht. Der Tester entscheidet nicht für den Inhaber. Das ist ein Befund, und er kam aus der Tabelle, bevor es Code gab. Deshalb ist Testentwurf auch ein Review.
Spalten wachsen schnell: Eine Bedingung mit vier Werten und zwei mit je zwei ergeben 4 × 2 × 2 = 16. Bei zehn „ja oder nein“-Bedingungen sind es 1024. Dann wird die Regel in kleinere Tabellen aufgeteilt, und die Kombinationen werden mit einem anderen Verfahren gewählt, zum Beispiel dem paarweisen Testen später im Modul.
Übung
Die Tabellen des Codes
1. Was sagt die Tabelle? Vier Fragen, die der Tester beim Schreiben der Tabelle findet.
Test
Teste dich
Verwandte Lektionen
Abschnitt „Verwandte Lektionen“- Baut auf: Akzeptanzkriterien · Eine Spezifikation prüfen · Äquivalenzklassen · Grenzwerte
- Geht weiter in: Zustandsübergänge · Paarweises Testen · Codeüberdeckung · Erfahrungsbasiertes Testen
- Aufgaben zum Thema: Testentwurfsverfahren