• Data publikacji
    November 26, 2024
  • Udziały

Tworzenie dobrze zaprojektowanego i poprawnego kodu jest celem każdego programisty. Jedną z metodologii, która wyróżnia się w osiąganiu tego celu, jest Test-driven development (TDD). Podczas gdy TDD nie projektuje kodu ani nie pisze go za Ciebie, jest to metodologia w rozwoju oprogramowania, która pozwala Ci uzyskać szybką informację zwrotną na temat decyzji projektowych w iteracyjnym cyklu rozwoju. 

Czy pisanie testów jednostkowych przed lub po kodowaniu, czy nigdy nie pisanie testów, zależy od wyboru programisty. Oczywiste jest, że nigdy niepisanie testów powoduje krytyczne sytuacje w produkcji, jeśli programista ma szczęście, odkryje błędy na etapie testów ręcznych. 

Pisanie testów po ukończeniu kodu jest lepsze niż brak testów. Większość programistów, w tym my, stosuje podejście „kod najpierw” wprost, a następnie pisze testy. Niemniej jednak napisany kod nie jest lepszy. Niektóre błędy funkcjonalne będą obecne, jeśli zapomnimy o przypadku testowym. Pisanie nieudanych przypadków testowych przed każdym fragmentem kodu, a następnie dodawanie kodu, aby test przeszedł, zgodnie z cyklem TDD, jest znacznie lepsze.

Obecnie omawiamy, jak możemy użyć Generative AI, aby nasza praca była bardziej zautomatyzowana. W tej pracy wprowadzamy nowy eksperyment inspirowany Blog Allena Heltona. Piszemy kilka przypadków testowych dla projektu, a następnie prosimy ChatGPT o wygenerowanie kodu związanego z testem. 

Generatywna sztuczna inteligencja do tworzenia oprogramowania w oparciu o testy 

Biorąc pod uwagę potencjalne błędy ludzkie w testowaniu ręcznym, pojawia się pytanie: dlaczego nie zautomatyzować TDD za pomocą Generative AI?Generative AI może odegrać transformacyjną rolę w TDD poprzez automatyzację tworzenia testów jednostkowych i odpowiadającego im kodu. Oto proponowany przepływ pracy:

  1. Testy tworzone przez programistów: Programiści zaczynają od napisania początkowych testów jednostkowych, określając pożądane wyniki dla swojego kodu.
  2. Kod generowany przez AI: Generative AI odczytuje te testy jednostkowe i generuje kod niezbędny do ich zaliczenia. Jeśli kod zostanie pomyślnie uruchomiony, zostanie zapisany na dysku. Jeśli nie, AI generuje raport o błędach i próbuje ponownie wygenerować poprawny kod, tworząc pętlę, aż testy zostaną zaliczone. Dzięki włączeniu AI w ten sposób programiści mogą mieć pewność, że ich kod zostanie dokładnie przetestowany i zweryfikowany, minimalizując ryzyko błędów.
Ekran Resmi 2024-11-04 13.29.43.png

Korzyści ze stosowania generatywnej AI w TDD

Automatyzacja procesu generowania kodu i testowania może znacznie przyspieszyć cykle rozwoju. Ponadto zmniejsza ryzyko wystąpienia błędów ludzkich w przypadkach testowych i pisaniu kodu. Jednocześnie zapewnia kompleksowe i spójne objęcie wszystkich testów oraz łatwe skalowanie procesu rozwoju bez zwiększania ręcznego obciążenia pracą.

Potencjalne wyzwania i rozwiązania

Podczas gdy integracja Generative AI w TDD oferuje liczne korzyści, nie jest pozbawiona wyzwań. Początkowa konfiguracja systemów AI dla TDD może być czasami skomplikowana i czasochłonna. Deweloperzy mogą potrzebować szkolenia, aby skutecznie korzystać z narzędzi AI i im ufać. Ale nawet jeśli deweloperzy są gotowi się tym zająć, AI może mieć problemy z wyjątkowymi lub skrajnymi przypadkami, które nie są dobrze reprezentowane w danych treningowych, więc może to mylić zadawane scenariusze. Generative AI odpowiada przyzwoitym kodem, ale nie jest to świetny i najlepszy wybór. Ponieważ kod nie stosuje żadnego mechanizmu sprzężenia zwrotnego. Aby wytworzyć świetny kod, powinniśmy zastosować mechanizmy sprzężenia zwrotnego do AI, takie jak podejście programistów do przeglądu kodu. Możemy połączyć AI z nadzorem człowieka, aby obsługiwać złożone scenariusze, przynajmniej na razie.. :)

Opinia Zastosowana Generatywna AI w TDD

Ekran Resmi 2024-11-04 13.31.52.png

Mechanizm sprzężenia zwrotnego

Aby jeszcze bardziej udoskonalić proces, można wprowadzić mechanizm sprzężenia zwrotnego. Programiści piszą testy jednostkowe, a agent programisty generuje kod. Dodano nową warstwę kontroli za pomocą agenta recenzenta kodu, który sprawdza kod i przekazuje informacje zwrotne agentowi programisty.

Ulepszenie iteracyjne

Agent deweloperski rewiduje kod na podstawie opinii agenta recenzenta i ponownie przesyła go do recenzji. Ten iteracyjny proces trwa, aż kod pomyślnie przejdzie recenzję.

Testowanie końcowe

Po zatwierdzeniu kodu przez agenta recenzenta uruchamiane są testy jednostkowe. Jeśli przejdą pomyślnie, kod jest zapisywany. Jeśli nie, generowany jest raport o błędzie, a proces wraca do generowania kodu.

W istocie przepływ pracy wyglądałby następująco:

  1. Programista pisze testy jednostkowe.ev
  2. Sztuczna inteligencja odczytuje te testy i generuje niezbędny kod.
  3. Jeśli testy przebiegną pomyślnie, kod zostanie zapisany. Jeśli nie, zostanie wygenerowany raport o błędzie, a AI spróbuje poprawić kod w pętli.
  4. Ta początkowa automatyzacja może wygenerować kod podatny na błędy. W tym miejscu do gry wkracza mechanizm sprzężenia zwrotnego.
  5. Programiści piszą testy jednostkowe, a agent programisty generuje wymagany kod i metody.
  6. Agent recenzujący kod przegląda kod i wysyła opinię do agenta programisty.
  7. Agent programistyczny udoskonala kod na podstawie opinii i ponownie przesyła go do sprawdzenia.
  8. Cykl ten jest powtarzany do momentu zatwierdzenia kodu przez agenta recenzującego kod.
  9. Po zatwierdzeniu uruchamiane są testy jednostkowe. Jeśli się powiodą, kod jest zapisywany; jeśli nie, generowany jest raport o błędzie, a pętla jest kontynuowana.

Dzięki zastosowaniu mechanizmu sprzężenia zwrotnego jakość generowanego kodu ulega znacznej poprawie, co daje pewność, że spełnia on niezbędne standardy i niezawodnie przechodzi wszystkie testy.

Wniosek

Integracja Generative AI w Test-Driven Development (TDD) ma potencjał zrewolucjonizowania rozwoju oprogramowania. Automatyzując generowanie testów jednostkowych i odpowiadającego im kodu, programiści mogą zapewnić wyższą jakość kodu, zmniejszyć liczbę błędów i usprawnić swój przepływ pracy. Chociaż istnieją wyzwania do pokonania, korzyści znacznie przewyższają początkowe przeszkody, co czyni to obiecującym podejściem dla przyszłości kodowania. Możesz sprawdzić nasze Programista AI projekt, jeśli jesteś zainteresowany wsparciem programowania z wykorzystaniem sztucznej inteligencji generatywnej. 

Przyszłe kierunki

W oparciu o to podejście planujemy rozwinąć trzy elementy:

  • Rozszerzanie obsługi języków: Choć skupialiśmy się na Javie, tę metodologię można rozszerzyć na inne języki, takie jak Python, JavaScript i inne.

  • Automatyczne generowanie testów: Możemy zlecić Generative AI pisanie testów w oparciu o ogólne wymagania określone przez programistów, zamiast zlecać ręczne pisanie testów. 

  • Rozszerzenie zespołu Agentic AI: Oprócz prostego recenzenta kodu moglibyśmy wprowadzić bardziej wyspecjalizowanych agentów, takich jak agent QA do testowania skrajnych przypadków, agent wydajności do optymalizacji wydajności kodu i tak dalej.

Zalecamy każdemu programistowi oprogramowania poświęcenie czasu na pisanie bardziej solidnych i dokładnych przypadków testowych, a następnie skorzystanie z potencjału generatywnej sztucznej inteligencji w celu tworzenia wysokiej jakości kodu.