Methoden zum Finden der “richtigen” Testfälle

Oct 21
2009

Die Erstellung der Testfälle ist sehr stark vom zu testenden System abhängig. Es gibt jedoch einige Methoden, die sich für das Blackbox Testing besonders gut eignen und auf viele konkrete Settings anwendbar sind. Die bekanntesten sind die Folgenden:

  • Äquivalenzklassenbildung und Grenzwertanalyse
  • Zustandsbezogener Test
  • Ursache-Wirkungs-Graph Analyse
  • Entscheidungstabellen

In diesem Kurs konzentrieren wir uns auf die erste dieser Methoden. Für die übrigen Methoden bietet [1] einen guten Überblick.

Schritt 1: Äquivalenzklassenbildung

Die Äquivalenzklassenbildung setzt bei der Problematik an, dass die Anzahl der möglichen Eingabewerte für eine bestimmte Funktionaliät in den allermeisten Fällen so enorm gross ist, dass es unmöglich ist, mit allen Werten zu testen. Die Grundidee dieser Methode ist es, dass die Menge der möglichen Eingabewerte in Klassen unterteilt wird. Zur gleichen Äquivalenzklasse gehören dabei jeweils alle Werte, von denen der Tester annimmt, dass sie die gleiche Wirkung erzielen bzw. dass sich das Testobjekt “gleich” verhält.

Diese Grundidee ist an sich nichts besonders Ausgefallenes. Die systematische Anwendung davon führt aber zu wichtigen Überlegungen über die zu testende Funktion und damit am Schluss zu sinnvoll ausgewählten Testfällen.

Beispiel 1

Die Posttarife für Pakete sind nach Gewicht abgestuft.
Aequ1
Äquivalenzklassenbildung Beispiel 1: Tabelle Pakettarife

Hier ergeben sich die Äquivalenzklassen automatisch. Ein Paket, das 2,5 kg schwer ist und eines das 2,7 kg schwer ist kosten beide 10.- und fallen damit in die gleiche Äquivalenzklasse.
Aequ3
Äquivalenzklassenbildung Beispiel 1: Triviale Äquivalenzklassen

Beispiel 2

Eine Funktion berechnet den Absolutwert einer Integerzahl.
Aequ2
Äquivalenzklassenbildung Beispiel 2: Code Absolutwertmethode

Hier ist die naheliegende Wahl der Äquivalenzklassen eine für die positiven und ein für die negativen Zahlen. Ob die Null einer der beiden Äquivalenzklassen zugeordnet wird oder eine eigene bildet ist Ermessenssache.
Aequ4
Äquivalenzklassenbildung Beispiel 2: Gewählte Äquivalenzklassen

Schritt 2: Grenzwertanalyse

Um nun ausführbare und wiederholbare Testfälle zu erhalten, müssen jetzt die konkreten Werte innerhalb der Äquivalenzklassen ausgewählt werden. Das Ziel jedes Testfalls ist es, mit einer möglichst grossen Wahrscheinlichkeit Fehler aufzudecken, sofern welche vorhanden sind. Die Werte, bei denen am häufigsten Fehler in der Implementierung auftreten, sind die Grenzwerte zwischen den Äquivalenzklassen. Es werden also als Vertreter der Äquivalenzklassen mit Vorteil diejenigen Werte gewählt, die an den Rändern der Äquivalenzklassen liegen. Für die beiden obigen Beispiele könnte das so aussehen:

Beispiel 1

Aequ5
Äquivalenzklassenbildung Beispiel 1: Konkrete Werte für Testfälle

Beispiel 2

Aequ6

Äquivalenzklassenbildung Beispiel 2: Konkrete Werte für Testfälle

Die Wahl der Äquivalenzklassen und der Grenzwerte ist selten so einfach und eindeutig, wie in diesen beiden Beispielen. In den meisten Fällen gibt es erheblichen Spielraum, was als eigene Äquivalenzklasse gezählt werden soll und welche Wertebereiche zusammengenommen werden. Diese Entscheidung hängt stark vom Testaufwand ab, der für eine bestimmte Funktionalität aufgewendet werden kann, da die Menge der effektiv auszuführenden Testfälle auf der Anzahl gewählter Äquivalenzklassen aufbaut.

Im folgenden Beispiel gibt es für die Wahl der Äquivalenzklassen verschiedene Granularitäten.

Beispiel 3

Eine Funktionalität soll für einen beliebigen Punkt P entscheiden, ob er innerhalb eines Rechtecks in einem Koordinatensystem liegt.
Aequ7

Äquivalenzklassenbildung Beispiel 3: Grafische Problemstellung

Für diese Problemstellung werden nun die Äquivalenzklassen gesucht. Dies wäre eine mögliche Wahl der Äquivalenzklassen:

Folie1

Äquivalenzklassenbildung Beispiel 3: Mögliche Wahl der Äquivalenzklassen

Häufig sind neben den durch das Problem definierten Abgrenzungen auch noch weitere Grenzen vorhanden, die zB durch die Problemstellung in den Wertebereichen inhärent vorhanden sind. In Beispiel 3 wären das zum Beispiel die Koordinatenachsen. Die Chance, dass bei der Implementierung der Regeln für diese Funktionalität ein Fehler bei negativen Koordinatenvorzeichen eingebaut wurde, wäre doch sicher nicht allzu klein.

Diese Beachtung der Eigenheiten des Wertebereichs ist oft sehr nützlich und kann Probleme aufdecken, die bei der ursprünglichen Wahl der Äquivalenzklassen übersehen würden.

Eine Wahl der Äquivalenzklassen unter Einbezug der Eigenheiten des Wertebereichs könnte so aussehen:
Folie2

Äquivalenzklassenbildung Beispiel 3: Wahl der Äquivalenzklassen unter Berücksichtigung der Grenzen des Wertebereichs

Damit wäre man aber bereits bei 16 verschiedenen Äquivalenzklassen, zu denen nun mittels Grenzwertanalyse Testfälle gefunden und anschliessend noch ausgeführt werden müssten. Ob sich dieser Aufwand rechtfertigen lässt, muss wieder anhand der bekannten Überlegungen zu erwarteter Wahrscheinlichkeit, dass diese Funktionalität fehlschlägt und dem Schaden, der dabei entstehen könnte, analysiert werden.

Im nächsten Schritt kommt nun die Wahl der konkreten Eingabewerte für die Testfälle mittels der Grenzwertanalyse, die in diesem grafischen Beispiel sehr anschaulich ist.
Folie3

Äquivalenzklassenbildung Beispiel 3: Wahl der Eingabewerte aufgrund Grenzwertanalyse

Strukurierung in logische und konkrete Testfälle

Auf Systemteststufe wird zwischen logischen und konkreten Testfällen unterschieden. Diese Unterscheidung ist nach den vorherigen Ausführungen über Äquivalenzklassenbildung und Grenzwertanalyse wenig überraschend.

Ein logischer Testfall ist die Spezifikation des Testablaufs und der zu überprüfenden Schritte ohne Angabe von konkreten Werten. Im logischen Testfall werden mit Wertekategorien und -bereichen gearbeitet. Die Annahme dabei ist, dass sich das System für alle Werte dieser Kategorie bzw. dieses Bereichs analog verhält. Im Fall der Testfallerstellungsmethode mittels Äquivalenzklassenbildung sind im logischen Testfall also die jeweiligen Äquivalenzklassen angegeben, nicht aber die konkreten Werte innerhalb der Klassen. Ein logischer Testfall kann deshalb nicht ausgeführt werden, weil es dafür die konkreten Werte braucht.

Ein konkreter Testfall ist eine Instanzierung des logischen Testfalls mit konkreten Werten. Damit ist der Testfall nun eindeutig spezifiziert und kann entsprechend ausgeführt werden. Der konkrete Testfall kann also das Resultat der Grenzwertanalyse zu den Kategorien sein, die im logischen Testfall festgelegt wurden.

Diese Strukturierung macht Sinn, sobald mit einer grösseren Anzahl von Testfällen gearbeitet werden muss. Sie erleichtern das Verständnis, weshalb in einem konkreten Testfall ein bestimmter Wert gewählt wurde und bringen eine Übersicht über die Menge der konkreten Testfälle. Falls sich zum Beispiel die Anforderungen an eine Funktionalität ändern, können die Auswirkungen auf der Ebene der logischen Testfälle nachvollzogen werden. Daraus ergibt sich dann direkt, welche konkreten Testfälle angepasst, neu erstellt oder weggeworfen werden müssen.

Leave a Reply

Categories