Programowanie sterowane testami z agentami AI

Poznaj najlepsze praktyki łączenia TDD z agentami kodującymi AI, takimi jak Windsurf i Claude 3.5 Sonnet, aby zautomatyzować i usprawnić proces wytwarzania oprogramowania.

Programowanie sterowane testami z agentami AI

Czym jest TDD (Test Driven Development)?

U podstaw TDD leży cykliczny proces znany jako Red-Green-Refactor. Cykl zaczyna się od fazy „Red”, w której programista pisze automatyczny przypadek testowy definiujący pożądaną funkcjonalność lub zachowanie. Test ten jest celowo na początku nieprzechodzący, ponieważ odpowiadający mu kod jeszcze nie istnieje. Ta początkowa porażka jest kluczowa, ponieważ zapewnia, że test faktycznie sprawdza zamierzoną funkcjonalność i będzie wyłapywał błędy po implementacji kodu.

Następna faza to „Green”, czyli napisanie minimalnej ilości kodu niezbędnej, aby wcześniej nieprzechodzący test przeszedł. Ta zasada zachęca programistów do skupienia się na bezpośrednim wymaganiu określonym przez test, utrzymania czystości kodu i unikania nadmiarowej inżynierii.

Ostatnia faza, „Refactor”, koncentruje się na poprawie struktury, czytelności i łatwości utrzymania zarówno kodu testowego, jak i produkcyjnego, przy jednoczesnym zapewnieniu, że wszystkie istniejące testy nadal przechodzą. Refaktoryzacja pozwala utrzymać zdrową i elastyczną bazę kodu, gotową na przyszłe zmiany bez wprowadzania regresji, a istniejący zestaw testów stanowi zabezpieczenie w tym procesie.

Jak w pełni zautomatyzować pipeline TDD?

Na wydajność agentów AI podczas kodowania wpływa wiele czynników – od wybranego modelu LLM po sposób organizacji kodu i pipeline’u deweloperskiego. Zauważyliśmy, że TDD jest skuteczne w połączeniu z Windsurf i Claude 3.5 sonnet. Oto przykładowe zadanie zrealizowane w TDD.

Czego potrzebujesz?

Zanim zaczniemy kodować, potrzebujemy następujących elementów:

Wystarczająca liczba testów

Upewnij się, że masz już testy zgodnie z TDD i obejmują one większość zakresu Twojego problemu, który uznajesz za logiczny i pomocny dla agenta AI. Nie musisz nic zmieniać ani dostosowywać specjalnie pod agenta AI. Jeśli Twoje testy i ich nazewnictwo są oparte na standardzie, to jeszcze lepiej. W pierwszym kroku agent AI zobaczy te testy i na ich podstawie rozpocznie implementację.

Oto przykład testu, który sprawdza, czy dokument został poprawnie wstawiony do MongoDB:

MongoDB test example

Interfejsy

Interfejs w Javie (lub innym języku programowania) to struktura określająca, jak powinny wyglądać klasy i jakie metody muszą implementować. Aby jeszcze lepiej poprowadzić agenta AI, warto utworzyć interfejs repozytorium do wstawiania dokumentów:

Java interface example Java interface code

Szczegółowy opis zadania

Na końcu potrzebujemy konkretnego opisu zadania. Zwykle możesz użyć JIRA lub zgłoszenia na GitHubie, gdzie opisujesz zadanie. Oto nasz przykład:

Task description screenshot

Rozpocznij Vibe Coding

Vibe coding oznacza, że opisujesz to, czego potrzebujesz, w prostym języku angielskim (lub nawet komendami głosowymi), a AI generuje dla Ciebie kod w czasie rzeczywistym. Szczegóły dotyczące Vibe Coding omawiamy w tym wpisie na blogu. Oto prompt, którego użyłem w Windsurf do realizacji zadania:

Prompt example for Windsurf

Zaimplementuj poniższe zapytanie jako kombinację jednego lub więcej zapytań nazwanych oraz kodu Java.

Znajdź wszystkich kierowców, którzy ukończyli co najmniej X kursów z oceną powyżej 5 w określonym przedziale dat i nigdy nie otrzymali oceny poniżej 3 gwiazdek.

Uwaga:
Nie musisz tworzyć jednego zapytania, które rozwiąże to zadanie (możesz użyć kombinacji kodu Java i zapytań nazwanych), ale musisz pamiętać o wydajności ORM, tzn. rozwiązanie powinno być odpowiednio szybkie przy dużej liczbie encji. Podczas sesji dyskusyjnej powinieneś być w stanie wyjaśnić, jakie problemy mogą pojawić się przy źle napisanych zapytaniach.

@Ass1_2_2Test.java#L35-60 to są odpowiadające testy. Zaimplementowano w @DriverDAO.java#L34-63

Wskazanie plików jest najważniejszym aspektem podczas vibe codingu. Teraz możesz usiąść wygodnie i obserwować, jak agent AI wykonuje swoją magię. Zaimplementował klasę, uruchomił testy i powtarzał proces, aż testy przeszły:

AI Agent coding flow

Najczęściej zadawane pytania

Czym jest Test Driven Development (TDD)?

Test Driven Development (TDD) to podejście do rozwoju oprogramowania, w którym najpierw pisze się automatyczne testy przed właściwym kodem. Proces przebiega w cyklu Red-Green-Refactor: napisanie testu, który nie przechodzi (Red), implementacja kodu, aby test przeszedł (Green), a następnie refaktoryzacja kodu przy zachowaniu wszystkich przechodzących testów.

Jak agenci AI mogą zautomatyzować pipeline TDD?

Agenci AI, tacy jak Windsurf, zwłaszcza w połączeniu z modelami takimi jak Claude 3.5 Sonnet, mogą automatyzować generowanie kodu, uruchamiać testy i wykonywać iteracyjne ulepszenia, dzięki czemu proces TDD jest szybszy i bardziej wydajny.

Jakie są wymagania wstępne do automatyzacji TDD z agentami AI?

Aby zautomatyzować TDD z agentami AI, potrzebujesz kompletnego zestawu testów, jasno zdefiniowanych interfejsów oraz precyzyjnych opisów zadań. Ustandaryzowane nazewnictwo testów i przejrzysta dokumentacja pomagają poprowadzić agenta AI do osiągnięcia optymalnych rezultatów.

Czym jest Vibe Coding?

Vibe Coding to podejście wspomagane przez AI, w którym programista opisuje wymagania w prostym języku angielskim (lub głosowo), a AI generuje kod w czasie rzeczywistym, iterując, aż wszystkie testy przejdą, a rozwiązanie spełni wymagania.

Yasha jest utalentowanym programistą specjalizującym się w Pythonie, Javie i uczeniu maszynowym. Yasha pisze artykuły techniczne o AI, inżynierii promptów i tworzeniu chatbotów.

Yasha Boroumand
Yasha Boroumand
CTO, FlowHunt

Zwiększ efektywność rozwoju z agentami AI

Dowiedz się, jak inżynierowie przepływów AI i agenci kodujący FlowHunt mogą zautomatyzować Twój proces wytwarzania oprogramowania dla maksymalnej wydajności i innowacyjności.

Dowiedz się więcej