Att skapa välkonstruerad och korrekt kod är målet för varje utvecklare. En metod som sticker ut för att uppnå detta är Testdriven Development (TDD). Även om TDD inte designar din kod eller skriver den åt dig, är det en metod inom mjukvaruutveckling som gör att du kan få snabb feedback på designbeslut i en iterativ utvecklingscykel.
Om du skriver enhetstester före eller efter kodning eller aldrig skriver test beror på utvecklarens val. Det är uppenbart att aldrig skriva några tester orsakar kritiska situationer i produktionen, om utvecklaren har tur kommer de att upptäcka fel under det manuella teststadiet.
Att skriva tester efter att ha slutfört koden är bättre än inga test. De flesta utvecklare, inklusive vi, tillämpar koden först på ett enkelt sätt och sedan skriver tester. Ändå är den skrivna koden inte bättre. Vissa funktionella fel kommer att finnas om vi glömmer testfallet. Det är mycket bättre att skriva misslyckade testfall tidigare för varje bit kod, och sedan lägga till koden för att få testet att passera genom att följa TDD-cykeln.
För närvarande diskuterar vi hur vi kan använda Generativ AI för att göra vårt arbete mer automatiserat. I detta arbete introducerar vi ett nytt experiment inspirerat av Allen Heltons blogg. Vi skriver flera testfall för projektet och ber sedan ChatGPT att generera den testrelaterade koden.
Generativ AI för test-först utveckling
Med tanke på potentialen för mänskliga fel vid manuell testning uppstår frågan: Varför inte automatisera TDD med Generativ AI? Generativ AI kan spela en transformativ roll i TDD genom att automatisera skapandet av enhetstester och motsvarande kod. Här är ett föreslaget arbetsflöde:
- Tester skrivna av utvecklare: Utvecklare börjar med att skriva de första enhetstesten och specificera de önskade resultaten för sin kod.
- Kod genererad av AI: Generativ AI läser dessa enhetstester och producerar den nödvändiga koden för att klara dem. Om koden körs framgångsrikt sparas den på disken. Om inte, genererar AI:n en felrapport och försöker producera rätt kod igen, vilket skapar en loop tills testerna passerar. Genom att integrera AI på detta sätt kan utvecklare säkerställa att deras kod är noggrant testad och validerad, vilket minimerar risken för fel.

Fördelar med att använda generativ AI i TDD
Att automatisera kodgenereringen och testprocessen kan avsevärt påskynda utvecklingscyklerna. Dessutom minskar risken för mänskliga fel i testfall och kodskrivning. Samtidigt som du gör detta, se till att alla tester täcks heltäckande och konsekvent och enkelt skala utvecklingsprocessen utan att öka den manuella arbetsbelastningen.
Potentiella utmaningar och lösningar
Även om integrationen av Generativ AI i TDD erbjuder många fördelar, är det inte utan utmaningar. Den initiala installationen av AI-system för TDD kan ibland vara komplex och tidskrävande. Utvecklare kan behöva utbildning för att effektivt använda och lita på AI-verktyg. Men även om utvecklarna är redo att hantera det, kan AI kämpa med unika eller avancerade fall som inte är välrepresenterade i träningsdatan så detta kan förvirra de efterfrågade scenarierna. Generativ AI svarar med anständig kod men det är inte det bra och bästa valet. För ändå tillämpar koden inte någon återkopplingsmekanism. För att producera bra kod bör vi tillämpa feedbackmekanismer på AI som utvecklarnas kodgranskningsmetod. Vi kan kombinera AI med mänsklig tillsyn för att hantera komplexa scenarier, åtminstone för nu.. :)
Feedback tillämpad generativ AI i TDD

Återkopplingsmekanism
För att ytterligare förfina processen kan en återkopplingsmekanism införas. Utvecklare skriver enhetstesten och en utvecklaragent genererar koden. Ett nytt lager av granskning läggs till med en kodgranskaragent, som granskar koden och ger feedback till utvecklaragenten.
Iterativ förbättring
Utvecklaragenten reviderar koden baserat på granskaragentens feedback och skickar in den igen för granskning. Denna iterativa process fortsätter tills koden klarar granskningen framgångsrikt.
Slutlig provning
När koden har godkänts av granskaren, körs enhetstester. Om de passerar sparas koden. Om de misslyckas genereras en felrapport och processen återgår till kodgenerering.
I huvudsak skulle arbetsflödet vara som följer:
- Utvecklaren skriver enheten tests.ev
- AI:n läser dessa tester och genererar den nödvändiga koden.
- Om testerna körs framgångsrikt sparas koden. Om inte genereras en felrapport och AI:n försöker korrigera koden i en slinga.
- Denna initiala automatisering kan producera kod som är utsatt för fel, vilket är där återkopplingsmekanismen kommer in i bilden.
- Utvecklare skriver enhetstesten och utvecklaragenten genererar nödvändig kod och metoder.
- En kodgranskare granskar koden och skickar feedback till utvecklaragenten.
- Utvecklaragenten förfinar koden baserat på feedbacken och skickar in den igen för granskning.
- Denna cykel fortsätter tills kodgranskaragenten godkänner koden.
- När de är godkända körs enhetstesterna. Om det lyckas sparas koden; om inte genereras en felrapport och slingan fortsätter.
Genom att införliva en återkopplingsmekanism förbättras kvaliteten på den genererade koden avsevärt, vilket säkerställer att den uppfyller de nödvändiga standarderna och klarar alla tester på ett tillförlitligt sätt.
Slutsats
Att integrera generativ AI i testdriven utveckling (TDD) har potential att revolutionera mjukvaruutveckling. Genom att automatisera genereringen av enhetstester och motsvarande kod kan utvecklare säkerställa högre kodkvalitet, minska fel och effektivisera sitt arbetsflöde. Även om det finns utmaningar att övervinna, uppväger fördelarna vida de initiala hindren, vilket gör detta till ett lovande tillvägagångssätt för framtidens kodning. Du kan kolla vår Kodare AI projekt om du är intresserad av att stödja programmering med generativ AI.
framtida Avstånd
Det finns tre saker som vi planerar att bygga på detta tillvägagångssätt:
Utökat språkstöd: Medan vi har fokuserat på Java, kan denna metod utökas till andra språk som Python, JavaScript och mer.
Automatiserad testgenerering: Vi kan uppmana Generative AI att skriva testerna baserat på högnivåkrav från utvecklare istället för att ha manuellt skrivna tester.
Utöka Agentic AI Team: Utöver en enkel kodgranskare kan vi introducera mer specialiserade agenter som en QA-agent för att testa edge-fall, en prestandaagent för att optimera kodprestanda och så vidare.
Vi rekommenderar alla mjukvaruutvecklare att lägga ner sin tid på att skriva mer robusta och exakta testfall och sedan dra nytta av kraften hos Generativ AI för att producera kod av hög kvalitet.