Mutatietesten voor door agenten geschreven code
Door LLM's gegenereerde testsuites kunnen een lineaire en branch-coverage van 100% behalen, maar een recente studie laat zien dat ze slechts 4% scoren op mutatietesten. Dit legt een betrouwbaarheidsgat bloot dat ontwikkelaars tijdens sprint reviews over het hoofd kunnen zien.
Onderzoekers evalueerden testsuites die zijn geproduceerd door coding agents van grote taalmodellen op de HumanEval-Java benchmark. Eén suite dekte elke regel code en doorliep elke conditionele branch. Toen dezelfde suite werd onderworpen aan mutatietesten — een techniek waarbij kleine fouten worden geïnjecteerd om te zien of de tests deze detecteren — ontdekte deze slechts een fractie van de geïnjecteerde bugs.
Coverage ziet er goed uit, maar wat betekent het echt?
Traditionele coverage-metrieken tellen hoeveel statements of branches een test uitvoert. Teams zijn dol op de indrukwekkende cijfers tijdens sprint demo's. De metriek zegt echter niets over de vraag of de tests zouden falen als de code foutief zou zijn. Mutatietesten vult dat gat door opzettelijk fouten (mutanten) te introduceren en het percentage van die mutanten te meten dat een testfout veroorzaakt — de "mutation score".
In de studie miste de suite met 100% coverage bijna elke mutant, inclusief eenvoudige logische fouten zoals het verkeerd afhandelen van schrikkeljaar-data. De mutation score van 4% betekent dat de suite slechts een handvol echte bugs zou signaleren.
Waarom dit belangrijk is voor AI-ondersteunde ontwikkeling
- Vals vertrouwen: ontwikkelaars kunnen vertrouwen op een testsuite die op papier perfect lijkt.
- Verborgen defecten: veel bugs glippen ongemerkt door de mazen van het net.
- Herstelkosten: het later oplossen van bugs kost veel meer dan ze vroegtijdig opsporen.
Tegenargument: coverage is niet nutteloos
Coverage vertelt je nog steeds of codepaden worden uitgevoerd, maar het garandeert geen foutdetectie.
Waar je op moet letten
- Tooling-integratie: integreer mutatietesten in CI-pipelines.
- LLM-verbeteringen: train agents om tests te genereren die mutanten "doden".
- Industrie-richtlijnen: adopteer standaarden die coverage combineren met mutation scores.
Conclusie: Hoge coverage-cijfers van door AI gegenereerde tests zijn niet langer voldoende bewijs van kwaliteit; een lage mutation score geeft aan dat de tests mogelijk geen echte bugs detecteren, wat ontwikkelaars aanmoedigt om mutatietesten als vangnet te gebruiken.
