am 22. Dezember 2008
Der Titel des heutigen Artikels klingt ein wenig theoretischer, als er wirklich ist. Lasst euch also nicht abschrecken. Alles was wir heute definieren wollen, ist, wie man Testfälle zusammenfasst. Dabei wird jeder Testfall in so genannte Äquivalenzklassen eingeteilt, die wie folgt definiert sind.
- Jeder Testfall gehört zu genau einer Äquivalenzklasse
- Falls der Test für Testfall a (aus Äquivalenzklasse A) fehlschlägt, so schlägt er auch für alle anderen Testfälle aus A fehl.
Ok, ist jetzt doch ein wenig theoretischer geworden, als ich gehofft habe. Aber vielleicht kann ein einfaches Beispiel helfen. Nehmen wir eine Methode, die ein Jahr entgegen nimmt und true zurück gibt, falls das Jahr ein Schaltjahr ist. Hier sollte man vier Äquivalenzklassen wählen. Die erste für alle Nichtschaltjahre. Die zweite für alle „normalen“ Schaltjahre. Dann gibt es noch zwei Sonderregeln und ich hoffe, dass ich sie so aus dem Stegreif richtig wiedergebe. Ein Jahr ist kein Schaltjahr, sobald es durch 100 teilbar ist, außer es ist durch 1000 teilbar. 1900 war eins, 2000 keins. Wir brauchen also noch eine Äquivalenzklasse für die Jahre, die durch 100 teilbar sind, aber nicht durch tausend und eine, die alle Jahrtausende zusammenfasst.
Betrachten wir die zweite Regel, so brauchen wir jetzt genau 4 Testfälle für unsere positiv Tests. Natürlich brauchen wir mehr, wenn wir noch eine Fehlerbehandlung oder ähnliches in unserer Funktion haben.
Die Testfälle könnten 2000, 1900, 2008 und 2009. Hiermit sollte ich, bei einer allzu verkorksten Implementierung alles abgedeckt haben.
Halten wir also fest. Wir brauchen immer nur einen Testfall pro Äquivalenzklasse, was die Anzahl der benötigten Tests drastisch reduzieren kann. Andersherum sollten wir auch für jede Äquivalenzklasse genau einen Testfall in unseren Tests besitzen.