Zum Inhalt
wannacode

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.

EingabeErwartetDas richtige System
#Gültiger CodeReduziertStammkundeRabatt

Der Rabatt wird als Zahl geschrieben: 10 oder 10 %. Eine leere Ergebniszelle wird nicht geprüft.

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.

EingabeErwartetDas richtige System
#Gültiger CodeReduziertStammkundeRabatt

Der Rabatt wird als Zahl geschrieben: 10 oder 10 %. Eine leere Ergebniszelle wird nicht geprüft.

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.

1. Der Code wird eingegeben, er ist abgelaufen und wurde schon benutzt. Welche Meldung sieht der Kunde?
2. Die Bedingung „der Code ist abgelaufen“ in der Spalte „kein Code eingegeben“. Was kommt in die Zelle?
3. Die Bedingung zum Code hat vier Werte: kein Code, gültig, abgelaufen, benutzt. Reduzierung und Stammkunde sind „ja“ oder „nein“. Wie viele Spalten hat die volle Tabelle?
4. Der Warenkorb beträgt vor dem Rabatt 55 € und danach 49,50 €. Wie hoch sind die Lieferkosten?

Test

Teste dich

1. Die Tests gelten für die Spalten 4, 7 und 8 der Rabatt-Tabelle. Wie hoch ist ihre Überdeckung?
2. Was ist ein Testfall in einer Entscheidungstabelle?
3. Wie viele Spalten hat die volle Tabelle bei 4 Bedingungen mit „ja“ oder „nein“?
4. Wann können zwei Spalten zusammengefasst werden?
5. Was findet eine Entscheidungstabelle außer Tests?
6. Die Tabelle hat 10 Bedingungen. Was tust du?

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