Mutation Testing für von Agenten geschriebenen Code
Von LLMs generierte Test-Suites können eine Zeilen- und Verzweigungsabdeckung von 100 % erreichen, aber eine aktuelle Studie zeigt, dass sie beim Mutation Testing nur 4 % erreichen. Dies offenbart eine Zuverlässigkeitslücke, die Entwickler in Sprint-Reviews möglicherweise übersehen.
Forscher evaluierten Test-Suites, die von Coding-Agenten auf Basis von Large Language Models (LLMs) auf dem HumanEval-Java-Benchmark erstellt wurden. Eine Suite deckte jede Codezeile ab und durchlief jeden bedingten Zweig. Als dieselbe Suite dem Mutation Testing gegenübergestellt wurde – einer Technik, bei der kleine Fehler injiziert werden, um zu prüfen, ob die Tests diese erkennen –, identifizierte sie nur einen winzigen Bruchteil der injizierten Bugs.
Die Abdeckung sieht gut aus, aber was bedeutet sie wirklich?
Traditionelle Coverage-Metriken zählen, wie viele Anweisungen oder Zweige ein Test ausführt. Teams lieben die beeindruckenden Zahlen in Sprint-Demos. Die Metrik sagt jedoch nichts darüber aus, ob die Tests fehlschlagen würden, wenn der Code fehlerhaft wäre. Mutation Testing schließt diese Lücke, indem es gezielt Fehler (Mutanten) einführt und den Prozentsatz dieser Mutanten misst, die zu einem Testfehler führen – den sogenannten „Mutation Score“.
In der Studie übersah die Suite mit 100 % Coverage fast jede Mutante, einschließlich einfacher Logikfehler wie den fehlerhaften Umgang mit Schaltjahr-Daten. Ein Mutation Score von 4 % bedeutet, dass die Suite nur eine Handvoll echter Bugs melden würde.
Warum dies für die KI-gestützte Entwicklung wichtig ist
- Falsche Sicherheit: Entwickler vertrauen möglicherweise einer Test-Suite, die auf dem Papier perfekt aussieht.
- Versteckte Defekte: Viele Bugs schlüpfen unbemerkt durch.
- Kosten der Fehlerbehebung: Das spätere Beheben von Bugs ist weitaus teurer, als sie frühzeitig zu erkennen.
Gegenargument: Coverage ist nicht nutzlos
Coverage sagt zwar immer noch aus, ob Code-Pfade durchlaufen werden, garantiert aber keine Fehlererkennung.
Worauf man als Nächstes achten sollte
- Tooling-Integration: Mutation Testing in CI-Pipelines einbetten.
- LLM-Verbesserungen: Agenten darauf trainieren, Tests zu generieren, die Mutanten „töten“ (kill mutants).
- Branchenrichtlinien: Standards einführen, die Coverage mit Mutation Scores kombinieren.
Fazit: Hohe Coverage-Werte bei KI-generierten Tests sind kein ausreichender Qualitätsnachweis mehr; ein niedriger Mutation Score signalisiert, dass die Tests echte Bugs möglicherweise nicht erkennen, und mahnt Entwickler dazu, Mutation Testing als Sicherheitsnetz einzusetzen.
