Microsoft heeft een open-source AI-agent beschikbaar gesteld die zelfstandig unit-tests kan genereren én controleren voordat ontwikkelaars ze gebruiken. De nieuwe tool analyseert eerst een codebase, bepaalt vervolgens de beste aanpak voor het schrijven van tests en controleert daarna of die tests daadwerkelijk softwarefouten kunnen detecteren.
De nieuwe ‘code-testing-generator’ maakt deel uit van de open-source dotnet / skills-repository en vormt de motor achter de dotnet-test-plugin. Hoewel de naam naar .NET verwijst, ondersteunt de agent volgens Microsoft meerdere programmeertalen.
Eerst de repository analyseren
In plaats van direct unit-tests te produceren, onderzoekt de agent eerst de volledige repository. Daarbij detecteert hij automatisch de gebruikte programmeertaal en het testframework, analyseert bestaande tests om de projectconventies te leren kennen en bepaalt hij welke build- en testcommando’s moeten worden gebruikt. Volgens InfoWorld leert de agent daarmee eerst de werkwijze van een project voordat hij nieuwe tests toevoegt.
Pas daarna kiest de agent de meest geschikte werkwijze. Voor kleine wijzigingen schrijft hij direct tests, terwijl grotere opdrachten via een uitgebreider Research-Plan-Implement-proces worden afgehandeld. Voor omvangrijke projecten kan die cyclus meerdere keren worden doorlopen om de gewenste testdekking te behalen.
Van eenvoudige naar complexe code
De testgenerator fungeert als coördinator. Het schakelt achter de schermen gespecialiseerde subagents in voor onder meer codeanalyse, planning, implementatie, compilatie, testuitvoering, foutcorrectie en code-opmaak.
Bij het genereren van tests begint de agent volgens InfoWorld met relatief eenvoudige code en werkt hij vervolgens stapsgewijs naar onderdelen met meer afhankelijkheden. Daarbij probeert hij iedere relevante functionaliteit expliciet aan een testscenario te koppelen. Zo wordt de dekking systematisch opgebouwd.
Kwaliteit van de tests controleren
Opvallend is dat Microsoft veel nadruk legt op de kwaliteit van de gegenereerde tests. De agent controleert niet alleen of de testcode compileert en succesvol draait, maar beoordeelt ook of de tests daadwerkelijk betekenisvolle controles uitvoeren.
Daarbij wordt onder meer gekeken of assertions voldoende specifiek zijn, of alle gevraagde scenario’s zijn afgedekt en of kleine wijzigingen in de productiecode ervoor zouden zorgen dat een test faalt. Dat laatste is een lichte vorm van mutation testing. Dat is een techniek die wordt gebruikt om de effectiviteit van testsets te beoordelen.
Microsoft noemt als voorbeeld een test die ook nog zou slagen wanneer een functie uitsluitend een standaardwaarde retourneert. Zo’n test beschouwt de agent als ondeugdelijk en moet worden aangepast voordat het proces wordt afgerond.
Daarnaast bouwt de agent de volledige workspace, voert hij de complete testsuite uit en controleert hij of het standaard testcommando van de repository de nieuw aangemaakte tests daadwerkelijk oppikt. Daarmee moet worden voorkomen dat nieuwe tests buiten de reguliere CI/CD-pijplijn blijven.
Alleen unit-tests
De huidige versie richt zich uitsluitend op unit-tests. Integratie-, end-to-end-, browser- en performancetests vallen voorlopig buiten de mogelijkheden van de agent.
De instructies voor de agent bevatten daarnaast diverse veiligheidsmaatregelen. Externe diensten moeten worden gemockt, tests mogen geen netwerkverbindingen openen of afhankelijk zijn van timing en de agent mag de productiecode niet aanpassen om tests te laten slagen. Ook bestaande testbestanden mogen niet worden verwijderd of overschreven.
De agent is beschikbaar als onderdeel van de dotnet-test-plugin binnen de dotnet / skills-repository op GitHub. Ontwikkelaars kunnen hem gebruiken via GitHub Copilot CLI en via de pluginondersteuning in Visual Studio Code en VS Code Insiders, die zich momenteel nog in een previewfase bevindt.