Rozwój kierowany testami (Test-Driven Development, TDD) to potężna metodologia tworzenia niezawodnego oprogramowania. Pisząc testy przed implementacją, zapewniasz, że twój kod jest poprawny z założenia. Gdy połączysz TDD z asystentem kodowania AI, proces staje się jeszcze potężniejszy i wydajniejszy.
AI jest wyjątkowo dobry w podstawowej pętli TDD: generowaniu testów, pisaniu kodu, aby przeszły te testy, i iterowaniu aż wymagania zostaną spełnione. Twoja rola przesuwa się z pisania kodu boilerplate na definiowanie zachowania i weryfikowanie rezultatów.
Klasyczny cykl TDD to “czerwony, zielony, refaktor”. Z asystentem AI wygląda tak:
1. Napisz testy (czerwony)
Instruujesz AI, aby napisało kompleksowy pakiet testów dla nowej funkcji na podstawie jej wymagań. Wyraźnie mówisz mu, aby jeszcze nie pisało kodu implementacji. To faza “czerwona” — testy powinny się nie powieść, ponieważ kod nie istnieje.
2. Potwierdź niepowodzenie (czerwony)
Następnie instruujesz AI, aby uruchomiło nowo utworzone testy. Potwierdzi, że się nie powiodły, weryfikując, że twoje testy poprawnie celują w niezaimplementowaną funkcjonalność. To kluczowa kontrola poprawności.
3. Implementuj do przejścia (zielony)
Teraz dajesz AI nową, prostą instrukcję: “Napisz kod, który sprawi, że te testy przejdą”. Cel AI nie jest już niejednoznaczny; ma jasny, weryfikowalny cel do osiągnięcia.
4. Iteruj i refaktoryzuj (zielony -> refaktor)
AI napisze implementację, uruchomi testy, a jeśli się nie powiodą, przeanalizuje błędy i automatycznie udoskonali kod. Ta pętla trwa, aż wszystkie testy przejdą. Gdy są zielone, możesz poprosić AI o refaktoryzację kodu dla przejrzystości lub wydajności, wiedząc, że testy zapewnią poprawność.
Oto jak możesz zastosować ten przepływ pracy do zbudowania nowej funkcji.
Promptuj o testy.
Zacznij od jasnego promptu, który określa wymagania i prosi tylko o testy.
Napisz kompleksowy pakiet testów Vitest dla nowej funkcji TypeScript `calculateTotalPrice`.
Ta funkcja powinna przyjmować tablicę elementów, każdy z `price` i `quantity`, oraz opcjonalny string `discountCode`.
- Powinna poprawnie obliczać łączną cenę.
- Powinna obsługiwać pustą tablicę, zwracając 0.
- Jeśli kod rabatowy to "SAVE10", powinna zastosować 10% rabatu.
- Napisz testy w `src/lib/calculate.test.ts`, ale nie pisz jeszcze implementacji w `src/lib/calculate.ts`.
Uruchom i zobacz czerwony.
Poproś AI o wykonanie testów.
Świetnie. Teraz uruchom testy i potwierdź, że się nie powiodły.
AI uruchomi polecenie testowe (np. npm test) i zgłosi oczekiwane niepowodzenia, udowadniając, że twoja uprząż testowa działa poprawnie.
Zaimplementuj kod.
Teraz daj zielone światło dla implementacji.
Doskonale. Teraz zaimplementuj funkcję `calculateTotalPrice` w `src/lib/calculate.ts`, aby wszystkie testy w `src/lib/calculate.test.ts` przeszły. Nie modyfikuj testów.
Obserwuj pracę AI.
AI wejdzie teraz w swoją pętlę iteracyjną. Napisze funkcję, uruchomi testy, zobaczy wynik i dostosuje kod, aż odniesie sukces. Tu błyszczą funkcje takie jak “tryb YOLO” Cursor, ponieważ mogą zautomatyzować tę pętlę test-napraw-przetestuj ponownie bez wymagania ręcznej interwencji przy każdym kroku.
Przejrzyj i refaktoryzuj.
Gdy testy przechodzą, masz kod, który jest funkcjonalnie poprawny zgodnie z twoją specyfikacją. Możesz teraz przejrzeć implementację i poprosić o ulepszenia.
Testy przechodzą. Proszę refaktoryzuj funkcję `calculateTotalPrice`, aby poprawić czytelność i dodać komentarze JSDoc.
Używając TDD ze swoim asystentem AI, przesuwasz swoją uwagę z żmudnych aspektów pisania kodu na wysokopoziomową pracę definiowania zachowania i zapewniania jakości. To nie tylko przyspiesza rozwój, ale również prowadzi do bardziej solidnego i niezawodnego kodu.