Mutation Testing
Eine Technik zur Bewertung der Testqualität durch Einführen kleiner Änderungen (Mutationen) am Code und Prüfen, ob Tests diese erkennen. Unerkannte Mutationen weisen auf schwache Tests hin.
Definition
Mutation Testing erstellt "Mutanten" — Kopien des Codes mit kleinen Änderungen wie dem Umkehren von Operatoren (> zu <), dem Entfernen von Anweisungen oder dem Ändern von Rückgabewerten. Gute Tests sollten beim Ausführen gegen Mutanten fehlschlagen (sie "töten"). Überlebende Mutanten offenbaren Lücken in der Testabdeckung oder Assertions. Tools sind Stryker (JavaScript/TypeScript), PIT (Java) und mutmut (Python). Mutation Score = getötete Mutanten / Gesamtmutanten.
Warum es wichtig ist
Die Codeabdeckung kann hoch sein, während Tests immer noch schwach sind (z.B. Tests, die Code ausführen ohne Ergebnisse zu prüfen). Mutation Testing misst die tatsächliche Testeffektivität. Forschung zeigt, dass Mutation Testing 2-4x mehr Defekte findet als abdeckungsbasiertes Testen.
Beispiel
Code: if (age >= 18) return true. Ein Mutant ändert >= zu >. Wenn Tests dies nicht erkennen (alle Testbenutzer sind >18, keiner genau 18), überlebt der Mutant und offenbart einen fehlenden Grenzfall-Test.