At skabe velkonstrueret og korrekt kode er målet for enhver udvikler. En metode, der skiller sig ud for at opnå dette, er testdrevet udvikling (TDD). Selvom TDD ikke designer din kode eller skriver den for dig, er det en metodologi inden for softwareudvikling, der giver dig mulighed for at få hurtig feedback på designbeslutninger i en iterativ udviklingscyklus.
Om du skriver enhedstest før eller efter kodning eller aldrig skriver test afhænger af udviklerens valg. Det er klart, aldrig at skrive nogen test forårsager kritiske situationer i produktionen, hvis udvikleren er heldig, vil de opdage fejl under den manuelle testfase.
At skrive test efter at have udfyldt koden er bedre end ingen test. De fleste udviklere, inklusive os, anvender koden først tilgang ligetil og derefter skriver test. Ikke desto mindre er den skrevne kode dog ikke bedre. Nogle funktionelle fejl vil være til stede, hvis vi glemmer testcasen. Det er meget bedre at skrive fejlagtige testcases før for hvert stykke kode og derefter tilføje koden for at få testen til at bestå ved at følge TDD-cyklussen.
I øjeblikket diskuterer vi, hvordan vi kan bruge Generativ AI til at gøre vores arbejde mere automatiseret. I dette arbejde introducerer vi et nyt eksperiment inspireret af Allen Heltons blog. Vi skriver flere testcases til projektet og beder derefter ChatGPT om at generere den testrelaterede kode.
Generativ AI til test-første udvikling
I betragtning af potentialet for menneskelige fejl i manuel test, opstår spørgsmålet: Hvorfor ikke automatisere TDD ved hjælp af Generativ AI? Generativ AI kan spille en transformativ rolle i TDD ved at automatisere oprettelsen af enhedstests og den tilsvarende kode. Her er en foreslået arbejdsgang:
- Tests skrevet af udviklere: Udviklere begynder med at skrive de indledende enhedstests og angive de ønskede resultater for deres kode.
- Kode genereret af AI: Generativ AI læser disse enhedstests og producerer den nødvendige kode for at bestå dem. Hvis koden kører korrekt, gemmes den på disken. Hvis ikke, genererer AI en fejlrapport og forsøger at producere den korrekte kode igen, hvilket skaber en loop, indtil testene består. Ved at inkorporere AI på denne måde kan udviklere sikre, at deres kode er grundigt testet og valideret, hvilket minimerer risikoen for fejl.

Fordele ved at bruge generativ AI i TDD
Automatisering af kodegenerering og testproces kan fremskynde udviklingscyklusser betydeligt. Reducerer også risikoen for menneskelige fejl i testcases og kodeskrivning. Mens du gør dette, sikrer du, at alle tests er dækket omfattende og konsekvent og let skalering af udviklingsprocessen uden at øge den manuelle arbejdsbyrde.
Potentielle udfordringer og løsninger
Selvom integration af Generativ AI i TDD byder på adskillige fordele, er det ikke uden udfordringer. Den indledende opsætning af AI-systemer til TDD kan nogle gange være kompleks og tidskrævende. Udviklere kan have brug for træning for effektivt at bruge og stole på AI-værktøjer. Men selv hvis udviklerne er klar til at håndtere det, kan AI kæmpe med unikke eller edge cases, der ikke er velrepræsenteret i træningsdataene, så dette kan forvirre de stillede scenarier. Generativ AI reagerer med anstændig kode, men det er ikke det store og bedste valg. Fordi kode endnu ikke anvender nogen feedbackmekanisme. For at producere fantastisk kode bør vi anvende feedbackmekanismer til AI som udviklernes tilgang til kodegennemgang. Vi kan kombinere kunstig intelligens med menneskelig overvågning for at håndtere komplekse scenarier, i hvert fald indtil videre.. :)
Feedback Applied Generative AI i TDD

Feedback mekanisme
For yderligere at forfine processen kan der indføres en feedbackmekanisme. Udviklere skriver enhedstestene, og en udvikleragent genererer koden. Der tilføjes et nyt granskningslag med en kodeanmelderagent, som gennemgår koden og giver feedback til udvikleragenten.
Iterativ forbedring
Udvikleragenten reviderer koden baseret på anmelderagentens feedback og sender den igen til gennemgang. Denne iterative proces fortsætter, indtil koden har bestået gennemgangen.
Afsluttende test
Når koden er godkendt af anmelderagenten, køres enhedstests. Hvis de består, gemmes koden. Hvis de fejler, genereres en fejlrapport, og processen går tilbage til kodegenerering.
I bund og grund vil arbejdsgangen være som følger:
- Udvikleren skriver unit tests.ev
- AI'en læser disse tests og genererer den nødvendige kode.
- Hvis testene kører med succes, gemmes koden. Hvis ikke, genereres en fejlrapport, og AI'en forsøger at rette koden i en løkke.
- Denne indledende automatisering kan producere kode, der er tilbøjelig til fejl, og det er her feedbackmekanismen kommer i spil.
- Udviklere skriver enhedstestene, og udvikleragenten genererer den nødvendige kode og metoder.
- En kodeanmelderagent gennemgår koden og sender feedback til udvikleragenten.
- Udvikleragenten forfiner koden baseret på feedbacken og genindsender den til gennemgang.
- Denne cyklus fortsætter, indtil kodegennemgangsagenten godkender koden.
- Når de er godkendt, køres enhedstestene. Hvis det lykkes, gemmes koden; hvis ikke, genereres en fejlrapport, og løkken fortsætter.
Ved at inkorporere en feedback-mekanisme forbedres kvaliteten af den genererede kode betydeligt, hvilket sikrer, at den opfylder de nødvendige standarder og består alle tests pålideligt.
Konklusion
Integrering af generativ AI i testdrevet udvikling (TDD) har potentialet til at revolutionere softwareudvikling. Ved at automatisere genereringen af enhedstests og tilsvarende kode kan udviklere sikre højere kodekvalitet, reducere fejl og strømline deres arbejdsgang. Selvom der er udfordringer at overvinde, opvejer fordelene langt de indledende forhindringer, hvilket gør dette til en lovende tilgang til fremtidens kodning. Du kan tjekke vores Koder AI projekt, hvis du er interesseret i at understøtte programmering ved hjælp af generativ AI.
Fremtidige Retningslinjer
Der er tre elementer, som vi planlægger at bygge på denne tilgang:
Udvidelse af sprogunderstøttelse: Mens vi har fokuseret på Java, kan denne metode udvides til andre sprog som Python, JavaScript og mere.
Automatiseret testgenerering: Vi kan bede Generative AI om at skrive testene baseret på krav på højt niveau stillet af udviklere i stedet for at have manuelt skriftlige tests.
Udvidelse af Agentic AI-teamet: Ud over en simpel kodeanmelder kunne vi introducere mere specialiserede agenter såsom en QA-agent til at teste edge cases, en performanceagent til optimering af kodeydeevne og så videre.
Vi anbefaler enhver softwareudvikler at bruge deres tid på at skrive mere robuste og præcise testcases og derefter drage fordel af kraften i Generativ AI til at producere kode af høj kvalitet.