Przejdź do treści
Ten artykuł został przetłumaczony z języka japońskiego za pomocą AI
Czytaj po japońsku
Ten artykuł znajduje się w Domenie Publicznej (CC0). Możesz go swobodnie używać. CC0 1.0 Universal

Rozwój sterowany rozwojem i testowanie oparte na refaktoryzacji

Rozwój to proces ciągłego tworzenia czegoś nowego i użytecznego.

Gdy słyszymy „rozwój”, często przychodzi nam na myśl rozwój nowego produktu. Różni się to od wytwarzania pojedynczych produktów; oznacza raczej tworzenie projektów lub form produktu, że tak powiem.

Dlatego projekty i formy stworzone w ramach rozwoju nowego produktu są wielokrotnie wykorzystywane w fabrykach do masowej produkcji identycznych produktów.

Istnieją również inne zastosowania słowa „rozwój”, takie jak rozwój zdolności indywidualnych, czy rozwój społeczeństwa i narodu. Oznaczają one nie tylko wzrost posiadanych dóbr, ale raczej zdolność do wielokrotnego wykorzystywania i czerpania korzyści z rozwiniętych zdolności.

Choć siła ekonomiczna jednostek i społeczeństw może wahać się w zależności od warunków gospodarczych, rozwinięte zdolności są zazwyczaj trwałe.

Nawet jeśli się zmniejszą, jest to postrzegane jako upadek, a nie wahania, jak w przypadku dobrobytu gospodarczego.

Ponadto istnieje rozwój technologii i wiedzy. W przeciwieństwie do zdolności jednostek czy konkretnych społeczeństw, te mają tę cechę, że są łatwo udostępniane.

Wśród rezultatów tych działań rozwojowych — produktów, zdolności, wiedzy i technologii — niektóre mogą być przydatne do dalszego rozwoju.

Rozwijając takie użyteczne rezultaty, zakres rozwoju się poszerza, a efektywność i jakość również ulegają poprawie.

Rozwój oprogramowania sterowany przez AI

Ogólnie rzecz biorąc, rozwój wymagał znacznego czasu i wysiłku. Zwłaszcza, gdy społeczeństwo się rozwija, a różne dziedziny stają się coraz bardziej zaawansowane, tworzenie nowych rzeczy staje się coraz trudniejsze.

Jednak wraz z pojawieniem się generatywnej sztucznej inteligencji, ta sytuacja ulega zmianie. Obecnie rozwój oprogramowania przechodzi dramatyczną transformację, korzystając z wysokich możliwości programistycznych generatywnej AI.

Wizja przyszłości, w której autonomiczne agenty oparte na generatywnej AI staną się centralnym elementem rozwoju oprogramowania jako inżynierowie oprogramowania, staje się już rzeczywistością.

Obecnie znajdujemy się w okresie przejściowym. Chociaż nie możemy w pełni powierzyć rozwoju generatywnej AI, umiejętne jej wykorzystanie może znacząco przyspieszyć rozwój oprogramowania.

Nazywa się to rozwojem oprogramowania sterowanym przez AI.

Rozwój sterowany rozwojem

Gdy generatywna sztuczna inteligencja usprawnia rozwój oprogramowania, może ona nie tylko zwiększyć efektywność tworzenia oprogramowania docelowego, ale także rozwoju oprogramowania wspomagającego sam proces tworzenia.

Jak wspomniano wcześniej, rezultaty wspomagające rozwój poszerzają jego zakres i przyczyniają się do zwiększenia efektywności i jakości. Co więcej, jeśli zostaną stworzone efektywnie, mogą być ponownie wykorzystane w innych projektach.

Dlatego, rozwijając przydatne oprogramowanie w trakcie tworzenia oprogramowania, można ostatecznie zwiększyć ogólną efektywność, a te zasoby mogą być wykorzystane również w przyszłych projektach.

Tradycyjnie, rozwijanie takiego oprogramowania wspomagającego rozwój było powszechną praktyką w branży, ale wymagało ono własnego czasu i wysiłku, co wymagało starannej oceny i ukierunkowanego wdrożenia.

Wykorzystując generatywną sztuczną inteligencję, proste oprogramowanie do automatyzacji małych, doraźnych zadań można szybko stworzyć. W przypadku zadań o jasnych procesach, generatywna AI może generować dokładne programy niemal bez błędów.

Ułatwia to bardziej niż kiedykolwiek rozwijanie oprogramowania wspomagającego rozwój w trakcie tworzenia oprogramowania.

A po głębszej refleksji, wyłania się styl rozwoju, w którym użyteczne narzędzia są ciągle rozwijane w trakcie procesu tworzenia, tym samym zmieniając samą metodę rozwoju.

Nazwiemy to Rozwojem sterowanym rozwojem.

Aby praktykować Rozwój sterowany rozwojem, wymaga to nawyku obiektywnego obserwowania własnego rozwoju oprogramowania, aby zastanowić się, które części można delegować oprogramowaniu, a które tylko ludzie mogą wykonać, wraz z umiejętnością tworzenia takiego oprogramowania wspomagającego rozwój.

Ponadto, generatywna sztuczna inteligencja może być zintegrowana z tymi narzędziami programistycznymi. Wbudowanie jej w oprogramowanie, w przeciwieństwie do samodzielnego agenta generatywnej AI, pozwala w pewnym stopniu zawęzić zakres przetwarzania i określić jasną ścieżkę.

Chociaż agenty AI mogą osiągnąć podobne rezultaty poprzez podpowiedzi, oprogramowanie integrujące generatywną AI może łatwiej zwiększyć dokładność, łącząc zarówno programy, jak i podpowiedzi.

Jeśli Rozwój sterowany rozwojem zostanie wdrożony, drugi projekt przyniesie poprawę zarówno jakości, jak i kosztów w porównaniu z pierwszym. Co więcej, z każdym kolejnym projektem – trzecim, czwartym i tak dalej – ulepszenia będą się kumulować.

To całkowicie różni się od samego tworzenia oprogramowania za pomocą generatywnej sztucznej inteligencji. Z czasem pojawi się znacząca przepaść między zespołami, które po prostu opanują narzędzia generatywnej AI, a zespołami, które praktykują Rozwój sterowany rozwojem.

Testowanie oparte na refaktoryzacji

Istnieje koncepcja Test-Driven Development (TDD), która polega na najpierw projektowaniu testów w oparciu o specyfikacje, a następnie tworzeniu oprogramowania, które przejdzie te testy.

Początkowo również myślałem, że dzięki generatywnej sztucznej inteligencji, która ułatwia tworzenie programów testowych do automatycznego testowania, Test-Driven Development może być praktyczne.

Jednakże, gdy zacząłem praktykować Rozwój sterowany rozwojem, doszedłem do przekonania, że podejście polegające na projektowaniu testów przed implementacją nie zawsze jest odpowiednie.

Szczególnie w przypadku oprogramowania, takiego jak aplikacje internetowe, które obejmują subiektywne aspekty, takie jak użyteczność i wygląd wizualny, które można doświadczyć poprzez interakcję, zdałem sobie sprawę, że faktyczne uruchomienie i interakcja z oprogramowaniem ma pierwszeństwo przed szczegółowym testowaniem.

Wynika to z faktu, że jeśli po interakcji pojawią się znaczące niezadowolenie na poziomie UI/UX, istnieje możliwość, że konieczna będzie zmiana fundamentalnych części, takich jak struktura, podstawowa architektura, model danych czy przypadki użycia.

W moim obecnym projekcie osobistego rozwoju oprogramowania również zauważyłem problemy z elastycznością funkcjonalną i wydajnością, co skłoniło mnie do zamiany dwóch struktur na inne.

Była też część o słabej efektywności wykorzystania pamięci, która wymagała całkowitego przeglądu przetwarzania.

To właśnie w tych momentach refaktoryzacji testowanie staje się po raz pierwszy świadomą kwestią.

Jeśli dzieje się to na wczesnych etapach rozwoju lub jeśli funkcje i specyfikacje i tak ulegną znaczącej zmianie, testy mogą nie być konieczne.

Jednakże, jeśli rozwój jest już w toku i istnieje wiele elementów do sprawdzenia, testy będą prawdopodobnie potrzebne podczas refaktoryzacji, aby upewnić się, że nie ma braków funkcjonalnych ani pominięć.

Dlatego pomysł tworzenia programów testowych w momencie, gdy rozwój osiągnął pewien stopień zaawansowania i konieczna staje się refaktoryzacja, nie jest zły.

W tym momencie kluczem jest nie tworzenie testów dla całego kodu, ale skupienie się na testach tych części, które są już dojrzałe i prawdopodobnie nie ulegną dużym zmianom w przyszłości, pozostawiając te nadal płynne części bez automatycznych testów.

Można to nazwać testowaniem opartym na refaktoryzacji.

Podsumowanie

Generatywna sztuczna inteligencja dramatycznie zmienia rozwój oprogramowania.

W poprzednich artykułach pisałem o znaczeniu dążenia do zostania Inżynierem Wszechstronnym, który może wyjść poza tradycyjną rolę inżyniera full-stack i rozwijać systemy wszechstronne, łączące różne domeny, infrastrukturę i środowiska wykonawcze.

Napisałem również artykuł sugerujący, że wkraczamy w erę Rozwoju kierowanego doświadczeniem i zachowaniem, który koncentruje się na poprawie doświadczenia użytkownika poprzez zachowanie oprogramowania, zamiast tradycyjnego podejścia do rozwoju oprogramowania polegającego na dopasowywaniu specyfikacji do implementacji.

Rozwój sterowany rozwojem i testowanie oparte na refaktoryzacji to dokładnie te podejścia, które poprowadzą nas ku nowym horyzontom w rozwoju oprogramowania.