Äquivalenzklassenbildung teilt Eingabedaten in Klassen ein, innerhalb derer sich das System gleich verhalten sollte. Statt Dutzende ähnlicher Werte zu prüfen, wählt QA einen oder zwei Repräsentanten je sinnvoller Klasse.
Die Grundidee
Behandelt das System einen ganzen Bereich identisch, bringt das Testen jedes Werts wenig zusätzlichen Nutzen. Stattdessen Klassen bestimmen: gültig, ungültig, leer, zu groß, verbotene Formate und so weiter.
Ein einfaches Beispiel
Ein Altersfeld akzeptiert Werte von 18 bis einschließlich 60. Es gibt mindestens drei Klassen: unter 18, 18–60 und über 60. Aus jeder Klasse einen repräsentativen Wert wählen, statt jede Zahl auszuprobieren.
Anwendung in der Praxis
- →Zuerst Validierungsregeln und fachliche Bedeutung des Feldes oder Parameters verstehen.
- →Klassen mit unterschiedlichem erwartetem Verhalten bestimmen.
- →Einen Wert je Klasse auswählen und Grenzen separat betrachten.
- →Gültige Werte ebenso prüfen wie leere, falsch typisierte, verbotene und logisch widersprüchliche Eingaben.
Häufige Fehler
- →Klassen mechanisch definieren, ohne die Geschäftslogik zu verstehen.
- →Vergessen, dass Äquivalenzklassen die Grenzwertanalyse nicht ersetzen.
- →Werte als gleichwertig ansehen, obwohl das System sie unterschiedlich behandelt.
- →Nur gültige Klassen verwenden und negative Eingaben ignorieren.
Äquivalenzklassenbildung ist besonders nützlich für Formulare, API-Parameter, Filter, Wertebereiche, Status und alle Eingaben, bei denen vollständiges Testen unpraktisch oder sinnlos ist. Ihre Stärke ist weniger Testaufwand bei erhaltener logischer Abdeckung.
Ausgearbeitetes Beispiel: zulässiges ganzzahliges Alter
Übungsregel: Eine Anwendung akzeptiert ein ganzzahliges Alter von 18 bis einschließlich 65. Ganzzahlen unter 18, von 18 bis 65 und über 65 bilden drei disjunkte Klassen für diese Regel. Zuerst je einen Repräsentanten auswählen, dann Grenzwertprüfungen ergänzen.
Äquivalenzklasse Repräsentant Erwartet
Ganzzahl unter 18 16 Ablehnen: außerhalb des zulässigen Altersbereichs
Ganzzahl von 18 bis 65 40 Akzeptieren
Ganzzahl über 65 70 Ablehnen: außerhalb des zulässigen AltersbereichsDas Modell nimmt an, dass Werte innerhalb jeder Klasse ähnlich verarbeitet werden. Das ist eine Hypothese des Testentwurfs, kein Beweis, dass ein Wert jeden Fehler findet. Führt die Geschäftsregel für 60–65 Jahre ein anderes Ergebnis ein, die gültige Klasse entsprechend teilen. Unterschiedliche Ergebnisse nicht zusammenfassen, nur weil alle Eingaben denselben Datentyp haben.
Darstellungsfehler getrennt behandeln
Auch den Transportvertrag definieren. In dieser Übung muss das JSON-Feld age vorhanden sein und eine Ganzzahl enthalten; Zeichenketten, Bruchteile und null sind ungültig. Die folgenden Werte sind keine weiteren Repräsentanten der drei Ganzzahlklassen.
Anfragenutzlast Erwartet
{} Ablehnen: Pflichtfeld fehlt
{"age": null} Ablehnen: Ganzzahl erforderlich
{"age": "40"} Ablehnen: Ganzzahl erforderlich
{"age": 40.5} Ablehnen: Ganzzahl erforderlich
{"age": 40} AkzeptierenÜbung und Lösung
Decken 25, 40 und 55 die drei Ganzzahlklassen ab? Nein: Alle liegen in der gültigen Klasse. Ein Satz wie 16, 40 und 70 deckt alle drei ab; anschließend 17, 18, 19, 64, 65 und 66 ergänzen, um grenzspezifisches Verhalten zu untersuchen. Erwartete Ergebnisse folgen aus der angegebenen Regel, während HTTP-Statuscodes und Fehlerschemata einen separaten API-Vertrag benötigen.