Test-Driven Development
Systematische Test-Strategie Kategorien
Äquivalenzklassen-Tests
-
Volle Stunden (X:00)
-
5-Minuten-Schritte (X:05, X:10, X:15, ...)
-
Zwischenwerte (X:01-X:04, X:06-X:09, ...)
Grenzwert-Tests
-
Mitternacht (00:00)
-
Mittag (12:00)
-
Tagesübergang (23:59 → 00:00)
Spezialfall-Tests
-
Minute 04: "BALD FÜNF NACH"
-
Minute 29: FAST-Priorität
-
Minute 45-49: DREIVIERTEL vs. VIERTEL VOR
-
01:00: "ES IST EIN UHR" (wenn UHR als letztes Wort) vs. "ES IST EINS" (wenn UHR fehlt/nicht am Ende)
Test-Beispiele (Minute 29 - Lernfall) Testziel: Prioritäts-Logik verstehen
Variante | KURZ | FAST | BALD | Erwartetes Ergebnis | Begründung |
kfb | ✗ | ✗ | ✗ | "VOR HALB" | Keine Modifikatoren |
kfB | ✗ | ✗ | ✓ | "BALD HALB" | BALD vorhanden |
kFb | ✗ | ✓ | ✗ | "FAST HALB" | FAST vorhanden |
kFB | ✗ | ✓ | ✓ | "FAST HALB" | FAST > BALD bei m=29 |
Kfb | ✓ | ✗ | ✗ | "KURZ VOR HALB" | KURZ vorhanden |
KfB | ✓ | ✗ | ✓ | "BALD HALB" | BALD > KURZ |
KFb | ✓ | ✓ | ✗ | "FAST HALB" | FAST > KURZ |
KFB | ✓ | ✓ | ✓ | "FAST HALB" | FAST hat Priorität |
Code-Implementierung
if(minute === 29) { if(hat_FAST) return [..., "FAST", "HALB", ...]; else if(hat_KURZ) return [..., "KURZ", "VOR", "HALB", ...]; else if(hat_BALD) return [..., "BALD", "HALB", ...]; else return [..., "VOR", "HALB", ...]; }
Automatisierte Tests // Unit Test Framework describe('Zeitberechnung', () => { test('13:00 sollte "EIN UHR" ergeben (wenn UHR am Ende)', () => { const patternMitUhr = "ESIST...EIN...UHR___"; // UHR als letztes Wort expect(berechneZeit(13, 0, patternMitUhr)).toEqual(["ES", "IST", "EIN", "UHR"]); });
test('13:00 sollte "EINS" ergeben (wenn UHR fehlt)', () => { const patternOhneUhr = "ESIST...EINS...NACHT"; // Kein UHR am Ende expect(berechneZeit(13, 0, patternOhneUhr)).toEqual(["ES", "IST", "EINS"]); });
test('13:29 mit FAST sollte "FAST HALB ZWEI" ergeben', () => { const pattern = "...FAST...HALB..."; expect(berechneZeit(13, 29, pattern)).toContain("FAST"); }); });
Validierung und Qualitätssicherung