Test driven development met AI-agenten

Leer beste praktijken voor het combineren van TDD met AI-coderingsagenten zoals Windsurf en Claude 3.5 Sonnet om je softwareontwikkelingspipeline te automatiseren en te stroomlijnen.

Test driven development met AI-agenten

Wat is TDD (Test Driven Development)?

In de kern draait TDD om een cyclisch proces dat bekend staat als Red-Green-Refactor. De cyclus begint met de “Red”-fase, waarin een ontwikkelaar een geautomatiseerde test schrijft die een gewenste feature of gedrag definieert. Deze test wordt met opzet geschreven om aanvankelijk te falen, omdat de bijbehorende code nog niet bestaat. Dit initiële falen is cruciaal, omdat het ervoor zorgt dat de test daadwerkelijk de bedoelde functionaliteit test en fouten kan opvangen zodra de code is geïmplementeerd.

De daaropvolgende “Green”-fase omvat het schrijven van de minimale hoeveelheid code die nodig is om de eerder falende test te laten slagen. Dit principe moedigt ontwikkelaars aan zich te richten op de onmiddellijke eis die door de test wordt gedefinieerd, een schone codebase te behouden en over-engineering te voorkomen.

Tot slot richt de “Refactor”-fase zich op het verbeteren van de structuur, leesbaarheid en onderhoudbaarheid van zowel de testcode als de productiecode, terwijl wordt gegarandeerd dat alle bestaande tests blijven slagen. Refactoren zorgt ervoor dat de codebase gezond blijft en aanpasbaar is aan toekomstige veranderingen zonder regressies te introduceren, waarbij de bestaande testset als vangnet fungeert tijdens deze fase.

Hoe automatiseer je je TDD-pijplijn volledig?

Er zijn veel factoren die de prestaties van AI-agenten tijdens het coderen beïnvloeden. Van het LLM-model tot hoe je je code en ontwikkelingspijplijn structureert. We hebben ontdekt dat TDD effectief werkt met Windsurf en Claude 3.5 sonnet. Hieronder volgt een voorbeeldtaak die is geïmplementeerd in TDD.

Wat heb je nodig?

Voordat we beginnen met coderen, hebben we het volgende nodig:

Voldoende tests

Zorg ervoor dat je al tests hebt volgens TDD en dat ze het grootste deel van de scope van je probleem dekken waarvan je denkt dat het logisch en nuttig is voor de AI-agent. Je hoeft niets te veranderen of aan te passen voor de AI-agent. Als je tests en hun naamgeving gebaseerd zijn op een standaard, is dat beter. Als eerste stap ziet de AI-agent deze tests om te beginnen met implementeren.

Hier is een voorbeeld van een test die ik heb en die controleert of een document correct is ingevoegd in MongoDB:

MongoDB test example

Interfaces

Een Interface in Java (of een andere programmeertaal) is een structuur die bepaalt hoe de klassen eruit moeten zien en welke methoden ze moeten implementeren. Om de AI-agent verder te sturen, is het handig om een Interface voor je repository te maken om documenten in te voegen:

Java interface example Java interface code

Specifieke taakomschrijving

Tot slot hebben we een specifieke taakomschrijving nodig. Gewoonlijk kun je JIRA- of GitHub-issues gebruiken waarin je de taak definieert. Dit is de onze:

Task description screenshot

Start Vibe Coding

Vibe coding betekent dat je beschrijft wat je nodig hebt in gewoon Engels (of zelfs spraakopdrachten), en AI genereert de code voor je in realtime. We gaan in deze blog dieper in op Vibe Coding. Hier is de prompt die ik in Windsurf heb gebruikt om de taak voor mij te voltooien:

Prompt example for Windsurf

Implementeer de volgende query als een combinatie van een of meer named queries en Java-code.

Vind alle chauffeurs die minstens X ritten hebben voltooid met een beoordeling boven 5 in een bepaald datumbereik en die nooit een beoordeling onder de 3 sterren hebben ontvangen.

Let op:
Je hoeft niet één enkele query te vinden om deze taak op te lossen (je kunt een combinatie van Java-code en named queries gebruiken), maar je moet wel rekening houden met ORM-prestaties, d.w.z. zorg ervoor dat je oplossing ook redelijk snel is bij veel entiteiten. Tijdens de bespreking moet je kunnen uitleggen welke problemen kunnen ontstaan bij slecht geschreven queries.

@Ass1_2_2Test.java#L35-60 dit zijn de bijbehorende tests. Het is geïmplementeerd in @DriverDAO.java#L34-63

Het noemen van de bestanden is het belangrijkste aspect bij vibe coding. Leun nu achterover en zie hoe de AI-agent zijn magie doet. Het implementeerde de Class, draaide de tests en herhaalde om de tests te laten slagen:

AI Agent coding flow

Veelgestelde vragen

Wat is Test Driven Development (TDD)?

Test Driven Development (TDD) is een softwareontwikkelingsaanpak waarbij geautomatiseerde tests worden geschreven voordat de daadwerkelijke code wordt gemaakt. Het proces volgt een Red-Green-Refactor-cyclus: het schrijven van een falende test (Rood), het implementeren van code om de test te laten slagen (Groen), en vervolgens het refactoren van code terwijl alle tests blijven slagen.

Hoe kunnen AI-agenten de TDD-pijplijn automatiseren?

AI-agenten zoals Windsurf, vooral in combinatie met modellen zoals Claude 3.5 Sonnet, kunnen codegeneratie automatiseren, tests uitvoeren en iteratieve verbeteringen doorvoeren, waardoor het TDD-proces sneller en efficiënter wordt.

Wat zijn de vereisten voor het automatiseren van TDD met AI-agenten?

Om TDD te automatiseren met AI-agenten heb je een uitgebreide set tests nodig, duidelijk gedefinieerde interfaces en specifieke taakomschrijvingen. Gestandaardiseerde testnamen en duidelijke documentatie helpen de AI-agent te sturen voor optimale resultaten.

Wat is Vibe Coding?

Vibe Coding is een AI-gestuurde aanpak waarbij ontwikkelaars vereisten in gewoon Engels (of spraak) beschrijven, en de AI in realtime code genereert, itererend totdat alle tests slagen en de oplossing aan de eisen voldoet.

Yasha is een getalenteerde softwareontwikkelaar die gespecialiseerd is in Python, Java en machine learning. Yasha schrijft technische artikelen over AI, prompt engineering en chatbotontwikkeling.

Yasha Boroumand
Yasha Boroumand
CTO, FlowHunt

Boost je ontwikkeling met AI-agenten

Ontdek hoe de AI flow engineers en coderingsagenten van FlowHunt jouw ontwikkelingsproces kunnen automatiseren voor maximale efficiëntie en innovatie.

Meer informatie