Grenzwerte
Kurz gesagt: Eine Grenze ist der letzte Wert einer Klasse und der erste der nächsten. Mit zwei Punkten testest du den Grenzwert und seinen Nachbarn aus der anderen Klasse: 49,99 und 50,00 €. Mit drei Punkten auch die Nachbarn auf beiden Seiten: 49,99, 50,00 und 50,01 €. So fängst du „>“ statt „>=“, Rundung und Fehler um eins daneben, die ein Vertreter aus der Mitte der Klasse nie sieht.
Problem
Die Tests bestanden, die Grenze nicht
Aus der vorigen Lektion hast du drei Lieferungstests: 0 €, 30 € und 80 €. Sie bestehen alle. Der Entwickler hat geschrieben:
Die Lieferung ist kostenlos, wenn der Warenkorbwert > 50 ist
Ein Warenkorb von 50,00 € zahlt 4,90 €. Der Test mit 80 € liegt in derselben Klasse und besteht, denn 80 ist sowohl > 50 als auch >= 50. Ein Vertreter aus der Mitte der Klasse kann nicht sehen, wo genau die Klasse endet.
Die Idee
Die Grenze
Die Klassen der Lieferung sind geordnet: leer, kostenpflichtig, kostenlos. Wo eine Klasse endet und die nächste beginnt, ist die Grenze:
| Klasse | Von | Bis |
|---|---|---|
| leerer Warenkorb | 0 € | 0 € |
| kostenpflichtige Lieferung | 0,01 € | 49,99 € |
| kostenlose Lieferung | 50,00 € | keine obere Grenze |
Die Grenzwerte sind der kleinste und der größte Wert jeder Klasse. Hier sind Fehler am dichtesten, denn hier entscheidet der Entwickler „>“ oder „>=“, rundet, fängt bei 0 oder bei 1 an zu zählen. Ein falscher Strich im Code verschiebt die Grenze um einen Schritt. Der Schritt bei Beträgen ist ein Cent.
Die Grenzwertanalyse funktioniert nur für geordnete Klassen: Beträge, Anzahlen, Daten. Eine Zahlungsart hat kein „davor“ und „danach“.
Die Idee
Zwei Punkte und drei Punkte
Es gibt zwei Wege.
Mit zwei Punkten: Für jede Grenze testest du den Grenzwert und seinen Nachbarn aus der anderen Klasse. Bei der Lieferung: 0 und 0,01 €; 49,99 und 50,00 €. Vier Tests.
Mit drei Punkten: Für jeden Grenzwert testest du ihn und beide Nachbarn. Um 50,00 €: 49,99, 50,00 und 50,01 €.
Warum drei? Stell dir Code vor, der sagt: „Die Lieferung ist kostenlos, wenn der Warenkorbwert genau 50 ist.“ Mit zwei Punkten: 49,99 zahlt, 50,00 ist kostenlos. Besteht. Mit drei Punkten muss 50,01 € kostenlos sein, und der Code berechnet 4,90 €. Gefangen.
Drei Punkte kosten mehr Tests und fangen mehr Fehler. Welche du wählst, hängt vom Risiko ab: Bei der Zahlung lohnen sie sich, bei der Farbe eines Buttons nicht.
Genauer, für Neugierige
Der ISTQB CTFL v4.0.1 beschreibt die Technik in Abschnitt 4.2.2 (Grenzwertanalyse) mit beiden Varianten: 2-Wert-GWA und 3-Wert-GWA. Die Überdeckung ist die Anzahl der getesteten Grenzwerte (bei drei Punkten mit ihren Nachbarn) im Verhältnis zu allen. Nach dem Lehrplan sind drei Punkte strenger: Sie fangen Fehler, die zwei Punkte übersehen.
Die Technik baut auf Äquivalenzklassen auf. Ohne Klassen ist nicht klar, wo die Grenzen liegen, und ohne Grenzen übersehen die Klassen die häufigsten Fehler.
Probier es aus
Welche Werte?
Die Idee
49,99 ist nicht 30
49,99 € und 30 € liegen in einer Klasse. Warum ist dann 49,99 der bessere Test?
Weil sich manche Fehler nur neben der Grenze zeigen. Wenn der Code den Warenkorbwert vor dem Vergleich auf ganze Euro rundet, wird aus 49,99 € ein Wert von 50 €, und die Lieferung wird kostenlos. 30 € gerundet sind immer noch 30, und der Test besteht.
Ein guter Test sitzt dort, wo sich der Fehler zeigen würde. Die Mitte der Klasse ist der sicherste Ort, und deshalb ist sie der schlechteste Ort für einen Test.
Probier es aus
Die Grenzen der Lieferung
Schreibe die Tests für die Grenzen der Lieferung, mit zwei Punkten. Fange alle Fehler mit so wenig Zeilen wie möglich.
Die Regel: Die Lieferung ist ab einer Bestellung von 50 € (einschließlich) kostenlos, sonst kostet sie 4,90 €. Ein leerer Warenkorb kann nicht bestellt werden.
| Eingabe | Erwartet | Das richtige System | |||
|---|---|---|---|---|---|
| # | Warenkorbwert | Abgelehnt | Lieferung | ||
Eine leere Ergebniszelle wird nicht geprüft. Beträge schreibt man wie 49,99.
Lösung
| Warenkorbwert | Abgelehnt | Lieferung |
|---|---|---|
| 0 | ja | |
| 0,01 | nein | 4,90 |
| 49,99 | nein | 4,90 |
| 50 | nein | 0 |
Vier Zeilen: 0 € (abgelehnt), 0,01 € (4,90 €), 49,99 € (4,90 €), 50,00 € (0,00 €). 50,00 € fängt „>“ statt „>=“. 49,99 € fängt die Rundung und die Schwelle, die als 5 € statt 50 € geschrieben wurde. Wenn du 30 € statt 49,99 € nimmst, rutscht die Rundung durch. Wenn du 80 € statt 50,00 € nimmst, rutscht „>“ durch.
Die Idee
Grenzen sind überall
Überall, wo eine Regel eine Zahl hat, hat sie eine Grenze:
- Anzahlen: höchstens 10 Stück eines Produkts. 10 werden angenommen, 11 abgelehnt. Und von unten: Du fügst mindestens 1 Stück hinzu, also wird 0 abgelehnt.
- Tage: Rückgabe innerhalb von 14 Tagen nach Erhalt. Erhalten am 1. Oktober: Der 15. Oktober wird angenommen, der 16. Oktober abgelehnt.
- Zeit: Der Code gilt bis zum 31. Oktober. 23:59 und 00:00 am 1. November. Und nach wessen Uhr?
- Zwei Grenzen gleichzeitig: Das Limit gilt für die Stücke im Warenkorb, nicht für das, was hinzugefügt wird. 9 im Warenkorb plus 1 sind 10 und werden angenommen. 10 plus 1 sind 11 und werden abgelehnt.
Ein Grenzwert wirft oft eine Frage auf, die die Anforderung nicht gestellt hat. „Innerhalb von 14 Tagen“: einschließlich? Ab Erhalt oder ab Zustellung? Das ist auch Review: Testentwurf, früh gemacht, ist die beste Checkliste für Anforderungen.
Übung
Die Grenzen des Limits und der Tage
1. Das Warenkorb-Limit. Es gibt zwei Grenzen: für die hinzugefügte Menge und für die Stücke im Warenkorb nach dem Hinzufügen.
Schreibe die Tests für die zwei Grenzen des Limits: wie viele hinzugefügt werden (0 und 1) und wie viele im Warenkorb landen (10 und 11). Prüfe auch, was im Warenkorb bleibt.
Die Regel: Im Warenkorb können höchstens 10 Stück eines Produkts liegen. Was darüber hinausgeht, wird mit einer Meldung abgelehnt, und der Warenkorb bleibt, wie er ist. Hinzugefügt wird mindestens 1 Stück.
| Eingabe | Erwartet | Das richtige System | ||||
|---|---|---|---|---|---|---|
| # | Im Warenkorb | Hinzufügen | Abgelehnt | Danach im Warenkorb | ||
Eine leere Ergebniszelle wird nicht geprüft. Beträge schreibt man wie 49,99.
Lösung
| Im Warenkorb | Hinzufügen | Abgelehnt | Danach im Warenkorb |
|---|---|---|---|
| 5 | 0 | ja | 5 |
| 5 | 1 | nein | 6 |
| 9 | 1 | nein | 10 |
| 10 | 1 | ja | 10 |
Vier Zeilen: (5, 0 hinzufügen) wird abgelehnt; (5, 1 hinzufügen) ergibt 6; (9, 1 hinzufügen) ergibt 10; (10, 1 hinzufügen) wird abgelehnt, und 10 bleiben. Die Zeile (9, 1) fängt den Code, der das 10. Stück ablehnt. Die Zeile (10, 1) fängt den Code, der das 11. Stück durchlässt, den, der nur vergleicht, was hinzugefügt wird, und den, der den Warenkorb bei einer Ablehnung leert. Wenn alle Zeilen mit einem leeren Warenkorb beginnen, rutschen die letzten zwei durch.
2. Tage und Anzahlen. Finde die Grenzwerte.
Test
Teste dich
Verwandte Lektionen
Abschnitt „Verwandte Lektionen“- Baut auf: Warum Programme versagen · Die gute Anforderung · Akzeptanzkriterien · Äquivalenzklassen
- Geht weiter in: Entscheidungstabellen · Zustandsübergänge · Codeüberdeckung · Erfahrungsbasiertes Testen
- Aufgaben zum Thema: Testentwurfsverfahren