Å lage velkonstruert og riktig kode er målet for hver utvikler. En metodikk som skiller seg ut for å oppnå dette er testdrevet utvikling (TDD). Selv om TDD ikke designer koden din eller skriver den for deg, er det en metodikk innen programvareutvikling som lar deg få rask tilbakemelding på designbeslutninger i en iterativ utviklingssyklus.
Om du skriver enhetstester før eller etter koding eller aldri skriver tester, avhenger av utviklerens valg. Å skrive noen tester forårsaker åpenbart kritiske situasjoner i produksjonen, hvis utvikleren er heldig vil de oppdage feil under det manuelle teststadiet.
Å skrive tester etter å ha fullført koden er bedre enn ingen tester. De fleste utviklere, inkludert oss, bruker koden først tilnærmingen rett frem og deretter skriver tester. Likevel er ikke den skrevne koden noe bedre. Noen funksjonsfeil vil være tilstede hvis vi glemmer testsaken. Det er mye bedre å skrive sviktende testtilfeller før for hvert kodestykke, og deretter legge til koden for å få testen til å bestå ved å følge TDD-syklusen.
For tiden diskuterer vi hvordan vi kan bruke Generativ AI for å gjøre arbeidet vårt mer automatisert. I dette arbeidet introduserer vi et nytt eksperiment inspirert av Allen Heltons blogg. Vi skriver flere testcases for prosjektet og ber deretter ChatGPT generere den testrelaterte koden.
Generativ AI for test-første utvikling
Gitt potensialet for menneskelige feil ved manuell testing, oppstår spørsmålet: Hvorfor ikke automatisere TDD ved hjelp av Generativ AI? Generativ AI kan spille en transformativ rolle i TDD ved å automatisere opprettelsen av enhetstester og den tilhørende koden. Her er en foreslått arbeidsflyt:
- Tester skrevet av utviklere: Utviklere begynner med å skrive de første enhetstestene, og spesifisere de ønskede resultatene for koden deres.
- Kode generert av AI: Generativ AI leser disse enhetstestene og produserer den nødvendige koden for å bestå dem. Hvis koden kjører vellykket, lagres den på disken. Hvis ikke, genererer AI en feilrapport og prøver å produsere den riktige koden igjen, og skaper en løkke til testene består. Ved å inkorporere AI på denne måten kan utviklere sikre at koden deres blir grundig testet og validert, noe som minimerer risikoen for feil.

Fordeler med å bruke generativ AI i TDD
Automatisering av kodegenererings- og testprosessen kan fremskynde utviklingssyklusene betydelig. Dessuten reduserer potensialet for menneskelige feil i testtilfeller og kodeskriving. Mens du gjør dette, sikrer du at alle tester dekkes omfattende og konsekvent og enkelt skalere utviklingsprosessen uten å øke den manuelle arbeidsmengden.
Potensielle utfordringer og løsninger
Selv om integrering av Generativ AI i TDD gir mange fordeler, er det ikke uten utfordringer. Det første oppsettet av AI-systemer for TDD kan noen ganger være komplekst og tidkrevende. Utviklere kan trenge opplæring for å effektivt bruke og stole på AI-verktøy. Men selv om utviklerne er klare til å håndtere det, kan AI slite med unike eller avanserte tilfeller som ikke er godt representert i treningsdataene, så dette kan forvirre de spurte scenariene. Generativ AI svarer med anstendig kode, men det er ikke det gode og beste valget. Fordi koden ennå ikke bruker noen tilbakemeldingsmekanisme. For å produsere god kode bør vi bruke tilbakemeldingsmekanismer på AI som utviklernes kodegjennomgangstilnærming. Vi kan kombinere AI med menneskelig tilsyn for å håndtere komplekse scenarier, i det minste foreløpig.. :)
Tilbakemelding Applied Generative AI i TDD

Tilbakemeldingsmekanisme
For å avgrense prosessen ytterligere kan en tilbakemeldingsmekanisme introduseres. Utviklere skriver enhetstestene, og en utvikleragent genererer koden. Et nytt lag med gransking legges til med en kodegjennomgangsagent, som vurderer koden og gir tilbakemelding til utvikleragenten.
Iterativ forbedring
Utvikleragenten reviderer koden basert på anmelderagentens tilbakemelding og sender den inn på nytt for gjennomgang. Denne iterative prosessen fortsetter til koden har bestått gjennomgangen.
Endelig testing
Når koden er godkjent av kontrolløren, kjøres enhetstester. Hvis de består, lagres koden. Hvis de mislykkes, genereres en feilrapport, og prosessen går tilbake til kodegenerering.
I hovedsak vil arbeidsflyten være som følger:
- Utbygger skriver enheten tester.ev
- AI leser disse testene og genererer den nødvendige koden.
- Hvis testene kjører vellykket, lagres koden. Hvis ikke, genereres en feilrapport, og AI forsøker å korrigere koden i en sløyfe.
- Denne innledende automatiseringen kan produsere kode som er utsatt for feil, og det er her tilbakemeldingsmekanismen kommer inn i bildet.
- Utviklere skriver enhetstestene, og utvikleragenten genererer den nødvendige koden og metodene.
- En kodeanmelderagent vurderer koden og sender tilbakemelding til utvikleragenten.
- Utvikleragenten avgrenser koden basert på tilbakemeldingen og sender den inn for gjennomgang på nytt.
- Denne syklusen fortsetter til kodekontrollagenten godkjenner koden.
- Når de er godkjent, kjøres enhetstestene. Hvis vellykket, lagres koden; hvis ikke, genereres en feilrapport, og loopen fortsetter.
Ved å inkorporere en tilbakemeldingsmekanisme forbedres kvaliteten på den genererte koden betraktelig, noe som sikrer at den oppfyller de nødvendige standardene og klarer alle tester pålitelig.
Konklusjon
Integrering av generativ AI i testdrevet utvikling (TDD) har potensial til å revolusjonere programvareutvikling. Ved å automatisere genereringen av enhetstester og tilsvarende kode, kan utviklere sikre høyere kodekvalitet, redusere feil og effektivisere arbeidsflyten. Selv om det er utfordringer å overvinne, oppveier fordelene langt de første hindringene, noe som gjør dette til en lovende tilnærming for fremtidens koding. Du kan sjekke vår Koder AI prosjekt hvis du er interessert i å støtte programmering ved hjelp av generativ AI.
Fremtidige retninger
Det er tre elementer vi planlegger å bygge på denne tilnærmingen:
Utvide språkstøtte: Mens vi har fokusert på Java, kan denne metodikken utvides til andre språk som Python, JavaScript og mer.
Automatisert testgenerering: Vi kan be Generative AI om å skrive testene basert på høynivåkrav fra utviklere i stedet for å ha manuelt skriftlige tester.
Utvide Agentic AI-teamet: Utover en enkel kodeanmelder, kan vi introdusere mer spesialiserte agenter som en QA-agent for testing av edge-saker, en ytelsesagent for å optimalisere kodeytelse, og så videre.
Vi anbefaler alle programvareutviklere å bruke tiden sin på å skrive mer robuste og nøyaktige testsaker og deretter dra nytte av kraften til Generativ AI for å produsere kode av høy kvalitet.