AI voor testgeneratie: waar het helpt en waar het liegt
AI schrijft snel tests. Het schrijft ook tests die er echt uitzien, maar de verkeerde zaken verifiëren. Je ziet je coverage misschien stijgen, maar je code blijft kapot.
AI is geweldig voor bepaalde taken. Gebruik het voor:
- Extrapoleer vanuit een goed voorbeeld. Als je één perfecte test schrijft, kan AI er tien meer schrijven in exact jouw stijl.
- Behandel repetitief typewerk. Gebruik het voor setup-blokken, teardown en factory-helpers.
- Maak de eerste opzet (scaffolding). Het brengt je sneller naar de editor dan een leeg bestand.
Het gevaar begint wanneer je de AI laat beslissen over het "contract".
Als je de AI een functie geeft en om tests vraagt, leest het de code en test het wat de code op dit moment doet. Het test niet wat de code zou moeten doen. Dit creëert een gesloten lus. De AI doet een aanname, schrijft de code en schrijft vervolgens tests die diezelfde aanname bevestigen.
Wanneer bugs in productie terechtkomen, komt dat omdat de testsuite aan de kant van de bug stond.
Pas op voor deze drie valkuilen:
Implementatie-gerichte tests AI test vaak de logische paden in plaats van de business rules. Als je een klein intern detail verandert, breken de tests, zelfs als het resultaat nog steeds correct is. Dit maakt refactoring een nachtmerrie.
Oppervlakkige edge cases AI is goed in het testen van nulls, lege strings en nullen. Dit is voor de hand liggend. Het kan geen "domain edges" vinden. Het kent je specifieke tijdzone-bugs, je database-eigenaardigheden of je unieke business rules niet.
Broze mocks AI houdt ervan om alles te mocken. Dit leidt tot twee problemen:
- De mock is foutief. Het simuleert een nepversie van een API die niet overeenkomt met de werkelijkheid.
- De mock bevriest de implementatie. Het test hoe je code andere functies aanroept, in plaats van het uiteindelijke resultaat te testen.
Hoe je AI correct gebruikt:
Houd de "intentie" buiten bereik van de AI.
- Schrijf eerst het contract. Schrijf voor elke test één zin in gewone taal. Voorbeeld: "Verlopen codes moeten het oorspronkelijke bedrag retourneren."
- Geef die zinnen aan de AI. Laat het de assertions schrijven, maar jij zorgt voor de betekenis.
- Mock op de grenzen. Mock alleen externe API's of databases. Gebruik echte versies van je eigen interne modules.
- Schrijf één domain edge case met de hand. Elke keer dat je een functie af hebt, schrijf je het ene ding op waar je bang voor bent. Gebruik dat als prompt voor de AI.
AI is een productiviteitstool, geen vervanging voor het denken. Gebruik het om de kern van de test te schrijven, maar laat het nooit beslissen waar de test voor dient.
Bron: https://dev.to/nazar_boyko/ai-for-test-generation-where-it-helps-and-where-it-lies-jhm
Optionele leercommunity: https://t.me/GyaanSetuAi
