Mutation Testing
Kurz: Beim Mutation Testing verändert ein Werkzeug den Programmcode absichtlich leicht (zum Beispiel > zu >=) und prüft, ob die Tests das bemerken.
Genauer: Hohe Testabdeckung sagt nur, welche Zeilen ausgeführt wurden, nicht ob die Tests Fehler finden. Jede Änderung heißt „Mutant”. Schlägt ein Test fehl, ist der Mutant „getötet”, sonst „überlebt” er und zeigt eine Testlücke.
Im Detail
- Mutationsscore: Anteil getöteter Mutanten. Je höher, desto aussagekräftiger die Tests.
- Typische Mutationen: Operatoren tauschen, Konstanten ändern, Bedingungen negieren, Zeilen entfernen.
- Kosten: Rechenaufwändig, weil die Tests viele Male laufen. Oft nur für kritische Module.
- Äquivalente Mutanten: Manche Änderungen ändern das Verhalten nicht und können nicht getötet werden.
- Werkzeuge: Stryker (JavaScript/C#/Scala), PIT (Java), mutmut (Python).
Siehe auch: Property-Based Testing