# Äquivalenzklassentest

Ein Äquivalenzklassentest dient der Qualitätsprüfung von Software.

## Zweck

Ziel der Bildung von Äquivalenzklassen ist es, eine hohe Fehlerentdeckungsrate mit einer möglichst geringen Anzahl von Testfällen zu erreichen. Die Äquivalenzklassen sind also bezüglich Ein- und Ausgabedaten ähnliche Klassen bzw. Objekte, bei denen erwartet wird, dass sie sich gleichartig verhalten. So sind beispielsweise in einem Programm zur Verwaltung eines Fuhrparks Fahrzeuge äquivalente Klassen („Ferrari“ und „BMW“ sind vergleichbar, „Ferrari“ und „Mitarbeiter“ nicht). Das Wesen der Äquivalenzklassenbildung besteht darin, die gesamten Eingabedaten und Ausgabedaten eines Programms in Gruppen von Äquivalenzklassen zu unterteilen, so dass man annehmen kann, dass mit jedem beliebigen Objekt einer Klasse die gleichen Fehler wie mit jedem anderen Objekt dieser (Äquivalenz-)Klasse gefunden werden („Ferrari ENZO“ würde also dieselben Fehler ergeben wie „BMW M4“).

## Vorgehen

Die Bildung von Testfällen zu Äquivalenzklassen folgt dieser Abfolge:
* Analyse und Spezifikation der Eingabedaten, der Ausgabedaten und der Bedingungen gemäß den Spezifikationen
* Bildung der Äquivalenzklassen durch Klassifizierung der Wertebereiche für Ein- und Ausgabedaten
* Bestimmung der Testfälle durch Werteauswahl für jede Äquivalenzklasse
Die erstellten Testfälle gelten somit für alle Objekte der erstellten Äquivalenzklasse, sodass nicht für jede Ausprägung ein eigener Testfall erstellt werden muss.
Es wird zwischen gültigen Äquivalenzklassen und ungültigen Äquivalenzklassen unterschieden. Bei gültigen Äquivalenzklassen werden gültige Eingabedaten, bei ungültigen Äquivalenzklassen ungültige Eingabedaten verwendet.
Äquivalenzklassen werden allgemein unter logischen Gesichtspunkten erstellt, indem insbesondere auf die Gleichartigkeit der Klassen- bzw. Objekteigenschaften sowie deren Ermittlung geachtet wird. Kandidaten für die Bildung von Äquivalenzklassen sind in der Welt der objektorientierten Programmierung insbesondere Kind- und Superklassen. Bei abstrakten Klassen ist auf die unterschiedliche Ausimplementierung der vererbten Methoden/Prozeduren, insbesondere bezüglich Ein- und Ausgabeparameter, zu achten. Stark unterschiedliche Implementierungen bei Kindklassen einer abstrakten Klasse (z. B. „LKW“ und „PKW“ als Kindklassen von „KFZ“) können für die Bildung von Äquivalenzklassen nicht geeignet sein (bspw. Methode: ermittleGueltigeAnzahlAchsen → PKW 2; LKW: 3 (nur Zugmaschine)).

## Beispiel

Es wird gezeigt, wie eine Grenzwertanalyse nach gültigen und ungültigen Äquivalenzklassen unterscheidet. Hierfür wird das Datum in die Erfassungsmaske eines allgemein gültigen Transaktionssystems eingegeben. Die gültigen Werte (gültige Äquivalenzklassen) liegen zwischen 1 und 12 für Monate, 1 und 31 für Tage und ab 2000 für Jahre. Alle anderen Werte sind ungültig und gehören zu negativen Äquivalenzklassen. Für den Test ist ein Testfall für Monatswerte definiert, also:
* [-∞;0] Eingabe von minus unendlich bis 0 wird als ungültig zurückgewiesen (ungültige Äquivalenzklasse),
* [1;12] die Eingabe von 1 bis 12 wird als gültig akzeptiert (gültige Äquivalenzklassen) und
* [13;+∞] die Ein/Ausgabe von 13 bis plus unendlich wird als ungültig zurückgewiesen (ungültige Äquivalenzklasse)
Gleiche Testfälle werden für die Tages- und Jahreswerte festgelegt. Abhängigkeiten der gültigen Tageswerte von Monaten bleiben im Beispiel unberücksichtigt, ebenso die Verbindung unterschiedlicher Feldtypen in einem Testfall.