W dzisiejszym świecie inżynierii oprogramowania szybkie tworzenie dokumentacji może być równie ważne, co samo opracowanie kodu. W moim doświadczeniu, zespół deweloperów może zaoszczędzić nawet 70% czasu poświęcanego na spotkania projektowe, nie tracąc przy tym jakości dokumentacji. Proces dokumentowania nie kończy się jednak na wygenerowaniu jednego dokumentu — wymaga on nieustannych poprawek, redakcji i rewizji. Niemniej jednak, dzięki technologii takiej jak ChatGPT, czas poświęcony na wstępną koncepcję dokumentu może zostać znacząco zredukowany, pozostawiając więcej przestrzeni na kreatywne działania. To kluczowa zaleta, którą przedstawiam w niniejszej książce — oszczędzanie czasu na „nudnych” aspektach pracy, by skupić się na twórczych i wymagających wyzwań.

Chociaż generowanie dokumentów przy pomocy sztucznej inteligencji nie zwalnia nas z obowiązku ich redagowania i dopracowywania, to wstępne przygotowanie materiału przez AI skutecznie eliminuje czasochłonną część procesów projektowych. W tym kontekście, wykorzystanie ChatGPT do stworzenia dokumentu projektowego staje się niezwykle efektywne.

Cykl życia oprogramowania (SDLC) to zbiór etapów, przez które przechodzi każde oprogramowanie — od początkowego planowania po wdrożenie i konserwację. SDLC wprowadza porządek w chaotyczny proces tworzenia oprogramowania, co jest kluczowe, by móc trzymać się najlepszych praktyk w branży. Chociaż ten model może być dobrze znany każdemu, kto pracuje w tej dziedzinie, warto pamiętać, że przynajmniej ogólna znajomość SDLC może ułatwić zrozumienie, jakie dokumenty są potrzebne na każdym etapie rozwoju projektu.

Kiedy zaczniemy pracować z ChatGPT, nasz cel jest prosty: stworzenie dokumentu projektowego, który pomoże zaplanować naszą aplikację. Dokument ten nie będzie skomplikowanym zbiorem dokumentów, jakie tworzy się przy dużych projektach korporacyjnych, ale raczej zarysem, który pozwoli na organizację i zrozumienie kluczowych elementów aplikacji. W pracy z ChatGPT będziemy dążyć do tego, by nasz dokument pomógł w określeniu wymagań i stanowił przewodnik po procesie tworzenia oprogramowania. Warto zaznaczyć, że ChatGPT działa w kontekście rozmowy — informacje, które dostarczymy, będą wykorzystywane w kolejnych etapach rozmowy, pomagając rozwijać i doskonalić dokumentację w czasie rzeczywistym.

Każdy etap cyklu życia oprogramowania ma swoje zadania, które wiążą się z tworzeniem odpowiedniej dokumentacji:

  1. Planowanie: Określenie celów i założeń projektu.

  2. Analiza: Zrozumienie wymagań użytkowników i technicznych.

  3. Projektowanie: Stworzenie koncepcji aplikacji, jej struktury i interakcji.

  4. Implementacja: Programowanie i integracja poszczególnych komponentów.

  5. Testowanie: Sprawdzanie, czy aplikacja działa zgodnie z oczekiwaniami.

  6. Wdrożenie: Przeniesienie aplikacji do środowiska produkcyjnego.

  7. Utrzymanie: Monitorowanie i aktualizowanie aplikacji.

Każdy z tych etapów wymaga odpowiednich dokumentów, które można stworzyć z pomocą ChatGPT. Przykład, który analizujemy w tym rozdziale, to dokument projektowy dla aplikacji do przygotowywania testów na licencję radiową HAM. Naszym celem jest stworzenie aplikacji, która będzie losować 35 pytań z bazy danych, prezentować możliwe odpowiedzi i na końcu wyliczać wynik procentowy.

Początkowy dokument zawiera wszystkie niezbędne elementy systemu, takie jak: baza danych pytań, komponent do losowania pytań, interfejs użytkownika oraz moduł oceniania wyników. To klasyczny podział, który pozwala na rozbicie całego projektu na mniejsze, łatwiejsze do zarządzania jednostki. Każdy z tych komponentów wymaga dokładnego zaplanowania i rozważenia potencjalnych pułapek, jak np. trudności z aktualizowaniem bazy pytań lub konieczność uwzględnienia weryfikacji poprawności danych.

Ważne jest również, by zdawać sobie sprawę z pewnych ryzyk, jakie wiążą się z generowaniem dokumentacji przez AI. Chociaż ChatGPT oferuje szybkość i efektywność, istnieje ryzyko, że dokumenty mogą zawierać:

  • Zbyt ogólne wzorce architektoniczne, które nie uwzględniają specyfiki projektu.

  • Rekomendacje technologiczne, które nie są dostosowane do konkretnych ograniczeń projektu.

  • Brak uwzględnienia odpowiednich zabezpieczeń i obsługi błędów.

  • Ignorowanie kwestii kompatybilności między platformami, co może być kluczowe dla aplikacji.

Zanim przejdziemy do dalszego rozwoju projektu, musimy upewnić się, że każdy element jest odpowiednio zaplanowany i uwzględnia wszystkie wymagania techniczne i użytkowe.

Wspomniany wcześniej przykład aplikacji do nauki na licencję HAM ukazuje, jak można wykorzystać ChatGPT do wygenerowania dokumentacji projektowej w sposób szybki i wydajny. Jednak kluczowe jest, by pamiętać, że nawet najlepiej wygenerowany dokument wymaga dalszej analizy i przemyślanej edycji. Celem jest nie tylko stworzenie struktury aplikacji, ale także zrozumienie, jak każdy element współpracuje ze sobą, by stworzyć spójną i funkcjonalną całość.

Jak sztuczna inteligencja może wspierać pisanie testów jednostkowych?

Pisanie testów jednostkowych to nieodłączny element procesu tworzenia oprogramowania, który zapewnia, że nasz kod działa zgodnie z założeniami. Jednak pisanie testów może być żmudne i czasochłonne, zwłaszcza gdy projekt rozrasta się i liczba funkcji wzrasta. W takich chwilach wsparcie generatywnej sztucznej inteligencji może stanowić istotną różnicę w efektywności pracy programisty.

Narzędzia takie jak GitHub Copilot, Tabnine czy Blackbox AI zmieniają sposób, w jaki programiści podchodzą do generowania testów jednostkowych. Każde z tych narzędzi ma swoje unikalne cechy, ale wszystkie wspierają proces tworzenia kodu testowego, przyspieszając go i zmniejszając liczbę potencjalnych błędów. Copilot, korzystając z technologii opartych na dużych zbiorach danych, jest w stanie wygenerować testy jednostkowe, które pasują do napisanego kodu. Dzięki temu programista zyskuje czas, który może poświęcić na bardziej kreatywne aspekty pracy.

W przypadku Copilota proces jest prosty. Programista pisze kod, a Copilot analizuje go, sugerując fragmenty testów, które mogą sprawdzić poszczególne funkcje lub klasy. Co więcej, narzędzie może sugerować testy oparte na najlepszych praktykach, takich jak asercje czy testy graniczne. W ten sposób programiści nie muszą tworzyć testów od zera – mogą skupić się na ich dostosowywaniu i optymalizowaniu.

Tabnine, podobnie jak Copilot, korzysta z dużych modeli językowych, ale oferuje bardziej elastyczne podejście. Dzięki integracji z popularnymi IDE, Tabnine może w czasie rzeczywistym generować sugestie dotyczące nie tylko samego kodu, ale również testów. To narzędzie może działać na różnych poziomach – od prostych podpowiedzi, po bardziej złożone propozycje testów, które uwzględniają zależności pomiędzy funkcjami w kodzie.

Blackbox AI, z kolei, idzie o krok dalej, oferując pełną automatyzację generowania testów jednostkowych. Dzięki wykorzystaniu sztucznej inteligencji opartej na analizie kodu źródłowego, narzędzie może wygenerować całą bazę testów bez potrzeby angażowania programisty w proces pisania testów. Choć takie podejście może budzić obawy o jakość generowanych testów, Blackbox AI oferuje funkcje umożliwiające ich łatwe dostosowanie i poprawienie.

Wybór odpowiedniego narzędzia do generowania testów jednostkowych zależy od kilku czynników. Przede wszystkim warto zwrócić uwagę na zakres wsparcia, który oferuje dane narzędzie. Copilot i Tabnine działają świetnie w codziennym programowaniu, oferując pomoc na poziomie sugestii kodu, w tym testów, natomiast Blackbox AI jest bardziej ukierunkowane na pełną automatyzację generowania testów, co może być przydatne w dużych projektach, gdzie manualne pisanie testów staje się zbyt czasochłonne.

Pomimo wszechobecnej automatyzacji, ważne jest, by programista nie zapominał o roli, jaką odgrywa w procesie testowania. Generowane przez AI testy mogą być użyteczne, ale wymagają nadzoru i czasami koniecznej modyfikacji. AI, mimo swojej potężnej mocy obliczeniowej, nie zawsze wychwytuje subtelne błędy lub niuanse, które mogą wystąpić w bardziej złożonych aplikacjach. Z tego powodu istotne jest, by programista nadal posiadał pełną kontrolę nad procesem testowania i umiał odpowiednio dostosować generowane testy do specyfiki swojego projektu.

Co więcej, AI może przyspieszyć proces generowania testów, ale nie zastąpi w pełni doświadczenia i intuicji programisty. AI nie będzie w stanie przewidzieć wszystkich potencjalnych problemów, które mogą wystąpić w trakcie użytkowania aplikacji przez końcowego użytkownika. To zadanie pozostaje w rękach programisty, który powinien umieć wykorzystać AI jako wsparcie, a nie jako jedyne narzędzie do pisania testów.

Warto również pamiętać, że korzystanie z narzędzi AI do generowania testów jednostkowych może zrewolucjonizować sposób, w jaki pracujemy. Niemniej jednak, jak w przypadku każdej nowej technologii, trzeba zachować zdrowy rozsądek. Automatyzacja testów przez AI sprawdza się najlepiej, gdy jest stosowana w odpowiednich kontekstach – w mniejszych projektach, gdy zależy nam na szybkim wdrożeniu, lub w przypadku mniej skomplikowanego kodu. Z kolei w większych systemach, w których skomplikowana logika i interakcje między komponentami mają kluczowe znaczenie, pełne zaufanie do narzędzi AI może okazać się ryzykowne.

Również z perspektywy zarządzania projektem, warto mieć na uwadze, że korzystanie z AI do generowania testów może zmniejszyć koszt początkowy pracy nad projektem. Jednak, jak to bywa z każdą technologią, korzyści w postaci szybszego pisania kodu mogą zostać zniwelowane przez konieczność przeprowadzania dodatkowej weryfikacji i testowania wygenerowanego kodu.

W kontekście pracy zespołowej, integracja narzędzi AI w procesie pisania testów wymaga również współpracy z innymi członkami zespołu programistycznego. Ważne jest, by wszyscy byli świadomi, jakie narzędzia są wykorzystywane, jak działają oraz jakie mają swoje ograniczenia. Tylko wówczas możliwe będzie skuteczne wdrożenie generatywnej sztucznej inteligencji do procesu pisania testów jednostkowych, zapewniając przy tym jakość końcowego produktu.