Jak szybciej i skuteczniej testować swój kod z AI? Praktyczne porady
22.08.2024
Dowiedz się, jak sztuczna inteligencja może pomóc Ci w testowaniu oprogramowania. Za darmo!
Na naszym blogu staramy się podchodzić do tematyki AI od strony praktycznej. Nie lubimy straszyć, że “sztuczna inteligencja zabierze Wam pracę”, raczej staramy się pokazywać, w jaki sposób można ją okiełznać i wykorzystać do własnych zastosowań. W tym artykule pokazujemy, jak łatwo użyć wybranych rozwiązań AI do sprawnego pisania testów. Programujesz, tworzysz własne projekty i szkoda Ci czasu na pisanie testów “z palca”? A może interesujesz się zawodem testera? Koniecznie przeczytaj nasz tekst i poznaj nowe sposoby na szybkie testowanie oprogramowania.
Debugging z ChatemGPT
Bardzo istotną częścią pracy, zarówno testerów, jak i programistów, jest wyłapywanie błędów w kodzie. Oczywiście obecne środowiska programistyczne w dużej mierze ułatwiają ten proces i same podpowiadają nazwy klas lub wskazują bugi w naszych linijkach. Pomimo tego trudno nam wyeliminować błędy w 100% — zwłaszcza, gdy piszemy kod pod presją czasu lub w twórczym szale. Tropienie błędów jest jednak żmudnym zadaniem i co gorsza zajmuje czas. Na szczęście ChatGPT w podstawowej wersji może być sensownym narzędziem do automatycznego debugowania kodu. Zobacz, jak sprytnie sztuczna inteligencja poradziła sobie ze wskazaniem prostych błędów w kodzie. Umieściliśmy w oknie Chata kod z kilkoma drobnymi błędami:
public static void main(String[] args) {
Calculator calculator = new Calculator();
int a = 5;
int b = 8;
int sumResult = calculator.sum(a, b);
boolean correct = ResultChecker.assertEquals(13, sumResult);
if (correct) {
System.out.println("Metoda sum działa poprawnie dla liczb " + a + " i " + b);
} else {
System.out.println("Metoda sum nie działa poprawnie dla liczb " + a + " i " + b);
}
}
W odpowiedzi program wskazał nam dokładnie, gdzie znajdują się błędy, a także zaproponował kod w poprawnej wersji.
Wirutalna kaczka
Na pewno każdy kojarzy słynną metodę gumowej kaczuszki, w której to piszący kod powinien postawić sobie na biurku gumową kaczkę, następnie po kolei opisywać jej następujące po sobie linijki kodu. Chodzi tu oczywiście o to, by programista przeanalizował kod i działanie pisanego programu kod po kroku. Taka analiza nie tylko ułatwia naukę, ale także pozwala skutecznie odnaleźć błędy oraz zoptymalizować tworzony program. Okazuje się, że sztuczna inteligencja może być równie skutecznym asystentem programisty, co gumowa kaczka. Chat GPT potrafi świetnie opisywać poszczególne funkcje i dokładnie “opowiadać”, co dzieje się na danym etapie kodu. Wystarczy wkleić wybrany jego fragment (w dowolnym języku) i poprosić o jego przeanalizowanie. ChatGPT może też przygotować szczegółowe komentarze do konkretnych linijek kodu.
Choć są do stosunkowo proste funkcjonalności Chata, to jednak naprawdę użyteczne. Wspierają programistów w eliminowaniu błędów i tworzeniu bardziej przemyślanego kodu. Testerom z pewnością pomogą w tropieniu nieścisłości oraz lepszym rozumieniu testowanych funkcji w przypadku skomplikowanych programów.
Testy jednostkowe
Testy jednostkowe to testy, które weryfikują poprawność działania pojedynczych elementów oprogramowania (np. funkcji, obiektów, klas). Z pomocą sztucznej inteligencji można z powodzeniem tworzyć tego rodzaju testy. Wystarczy, tak jak w poprzednich przypadkach, wkleić kod w pole tekstowe ChataGPT i wydać polecenie napisania testów jednostkowych. Co ciekawe, ChatGPT przygotuje cały zestaw testów, a także precyzyjnie wskaże, co konkretnie sprawdza dany test.
Zleciliśmy Chatowi, by napisał testy do fragmentu kodu składającego się z kilkunastu metod w języku Java. W odpowiedzi na nasze polecenie algorytm przygotował całkiem interesujący kod. Nie tylko wygenerował testy do każdego elementu, ale również dodał potrzebne importy (linijki kodu, za pomocą których importowane są niezbędne dodatki, zależności i frameworki) i odpowiednio nazwał klasy testowe.
Jak działają napisane testy.? Być może zastanawiasz się, co oznaczają komentarze `//given //when //then` umieszczone w kodzie. To struktura przypadku testowego, która porządkuje to, co dzieje się na konkretnych etapach testowania:
- kod w sekcji `given` to założenia początkowe w testach;
- `when` to sekcja, w której wykonywana jest testowana funkcja;
- w `then` sprawdzamy. czy program zachował się zgodnie z oczekiwaniami;
- na końcu za pomocą asercji w formie metody `assertEquals` z języka Java następuje sprawdzenie, czy ocena została dodana poprawnie.
Testy API
Wciąż rosnąca popularność aplikacji i serwisów internetowych przekłada się na powszechnie wykorzystywanie API (ang. application programming interface) — specyficznego interfejsu opisującego szczegółowo, jak dane oprogramowanie może zostać połączone z innym. API składa się funkcji, protokołów i tzw. endpointów, czyli adresów, na które wysyłane są zapytania. Wiele systemów i programów udostępnia swoje API i rzecz jasna ten element również musi przejść testy. Na szczęście ChatGPT także radzi sobie z testowaniem API. Wystarczy, że podamy listę konkretnych endpointów, a otrzymamy dopasowane do nich sekwencje testów. Algorytm jest też w stanie wykryć w kodzie, czy korzystamy z dodatkowych komponentów. Zobacz, jak sprytnie Chat odgadł, że w naszym przykładzie korzystamy ze Springa.
Błyskawiczne scenariusze testowe
Wspominaliśmy już o przypadkach testowych, czyli o specyficznej strukturze, według której układane są testy konkretnych funkcjonalności. Innym rodzajem powszechnie wykorzystywanego w pracy testera schematu są tzw. scenariusze testowe. Scenariusz to zbiór przypadków testowych składających się na testy danej części oprogramowania, a także czynności przygotowawcze, jakie należy wykonać, by móc przystąpić do testów (np. by przetestować moduł logowania w środowisku desktopowym, tester musi mieć założoną skrzynkę mailową i zainstalowane przeglądarki komputerowe). W teorii tworzenie scenariuszy testowych brzmi świetnie. Spisujemy odpowiednie instrukcje i dokumentacje, które pomogą uporządkować pracę, a także pomogą zachować standaryzację testów. Istnieje jednak pewien minus. Pisanie scenariuszy to czasochłonne przedsięwzięcie. Okazuje się, że tę czynność również możemy zlecić sztucznej inteligencji. I to z całkiem niezłym skutkiem. Prosimy Chat, by napisał scenariusz testowy do przykładowego kodu:
Otrzymujemy rozbudowany scenariusz, z jasno określonym celem, opisem poszczególnych funkcji i działań, jakie należy wykonać:
Oczywiście możemy doprecyzować swoje wymogi odnośnie takiego scenariusza, rozpisując w poleceniu:
- jaka dokładnie ma być struktura przypadków testowych,
- które funkcje mają być ujęte w testach,
- czy umieszczać dodatkowe informacje w scenariuszu.
Taki bazowy scenariusz nie jest idealny i będzie wymagał częściowego doprecyzowania dla potrzeb konkretnych wymogów w zespole, jednak pamiętajmy, że algorytm się uczy. Prawdopodobnie z czasem będzie znacznie lepiej znał nasze wymogi i samodzielnie umieszczał niezbędne dla nas informacje.
Wbrew pozrom AI dostarcza nam sporo bezpłatnych możliwości testowania oprogramowania. Dzieje się tak, dlatego że pisanie testów jest w dużej mierze czynnością odtwórczą i schematyczną, która polega na wnikliwej analizie języka maszyn, a z tym algorytmy radzą sobie świetnie. Oczywiście to tylko narzędzia – zadziałają skutecznie, gdy dostaną odpowiednio przemyślane instrukcje. Niemniej eksperymenty z ChatemGPT w roli testera mogą być całkiem niezłym początkiem przygotowania do roli testera automatycznego albo wsparciem dla programistów tworzących własne projekty.
Jeśli ten artykuł był dla Ciebie pomocny i chcesz dowiedzieć się więcej o automatyzacji testów, to serdecznie zapraszamy Cię do zapoznania się z naszym kursem Tester Automatyzujący. To kompleksowe szkolenie, które od A do Z przeprowadzi Cię przez teorię testowania, podstawy wiedzy programistycznej oraz niezbędne techniki, frameworki i narzędzia.