Wykorzystanie sztucznej inteligencji (AI) w automatyzacji testów to najnowszy trend w zapewnianiu jakości. Testowanie ogólnie, a w szczególności automatyzacja testów, wydają się podatne na „wszystko jest lepsze z AI”.
Skoro AI, uczenie maszynowe i sieci neuronowe są obecnie najgorętszym tematem, być może nieuniknione było, że AI w jakiś sposób trafi do automatyzacji testów.
Tło automatyzacji testów
Pamiętam czasy sprzed kilku lat, gdy automatyzacja testów była jeszcze nowością, a jeden z moich zespołów ds. zapewniania jakości pracował nad projektem dla dużego klienta. Była to aplikacja mobilna z milionami użytkowników i comiesięcznymi cyklami wydań. Zespół QA zwykle miał spokojne pierwsze dwa tygodnie cyklu, a później pracował gorączkowo aż do wydania — jeden z osobliwych skutków ubocznych zwinnego tworzenia oprogramowania, o którym nie przeczytacie w nagłówkach!
W końcu jeden z liderów QA, zmęczony bezczynnością podczas spokojnych dwóch tygodni, zaczął pracować nad strukturą do automatyzacji testów. Napisał kilka skryptów testowych w Ruby, wykorzystując Selenium / Appium, oraz Jenkins do utworzenia podstawowego potoku, wraz z efektownymi raportami zawierającymi czerwone, żółte i zielone wskaźniki niepowodzenia/pomyślnego wykonania testów.
Udało mu się to zrobić w ciągu kilku cykli wydań. Wtedy przedstawiliśmy rozwiązanie naszemu dyrektorowi ds. jakości, który zaprezentował je klientom i na tyle ich zainteresował, że zgodzili się zapłacić za automatyzację testów jako podprojekt. Byliśmy w siódmym niebie, na absolutnym technologicznie froncie!
Jednak po kilku miesiącach „technologiczny front” nabrał nowego znaczenia, gdy odkryliśmy fundamentalną prawdę o automatyzacji testów, z którą dziś zmaga się każdy dobry inżynier automatyzacji QA:

Dlaczego o tym mówię? Ponieważ wkrótce poczuliśmy się jak Alicja w krainie Mordoru, biegnąca jak szalona wraz z Królową Kier:

Właśnie odkryliśmy brutalną rzeczywistość pułapki automatyzacji testów: jeden z naszych inżynierów QA musiał aktualizować zestaw automatyzacji tak, aby nadążał za aplikacją niemal w każdym cyklu wydań, ponieważ zmiany pojawiały się szybko i masowo!
Jedna zmiana nazwy pola i nasze zautomatyzowane testy oprogramowania wpadały do przysłowiowej króliczej nory. Początek nowego wydania był szczególnie kłopotliwy, ponieważ zespół programistów dodawał mnóstwo nowych elementów.
Od tamtej pory automatyzacja testów nie zmieniła się zasadniczo, ponieważ nadal wymaga ciągłego monitorowania i utrzymania. Możliwość znaczącej poprawy podejścia i implementacji pojawiła się dopiero wraz z niedawnym rozwojem możliwości AI.
Rozgłos wokół AI a rzeczywistość
Technologia AI w swojej obecnej postaci polega głównie na wykorzystywaniu algorytmów uczenia maszynowego do trenowania modeli na dość dużych zbiorach danych, a następnie używaniu wytrenowanych modeli do tworzenia prognoz lub generowania określonych wyników. Niemal wszystko, co dotyczy AI, mieści się w tym przyznajmy nadmiernie uproszczonym opisie. Z naszego punktu widzenia najważniejsze pytanie brzmi jednak:
Czy AI rzeczywiście będzie w stanie automatycznie generować i aktualizować przypadki testowe? Wykrywać błędy? Zwiększać pokrycie kodu?
Odpowiedź na to pytanie jest obecnie daleka od jasnej, ponieważ znajdujemy się u szczytu cyklu rozgłosu AI. To właśnie konkretna dziedzina, czyli uczenie głębokie, wywołała znaczną część tego entuzjazmu.

Najbardziej interesuje mnie w tym wykresie to:
Jeśli Siri ma już znajdować się za szczytem krzywej rozgłosu, to wciąż jesteśmy bardzo daleko od Kansas, Dorotko!
Mam na myśli to, że znam wiele osób, które muszą powtarzać swoje słowa, aby Siri zrozumiała, co mówią (bez urazy dla fanów Siri. Naprawdę 😉).
Krzywa rozgłosu pokazuje nam, że istnieje wiele emocji związanych z potencjałem sztucznej inteligencji, które opadają, zanim wszyscy przejdą do codziennego, rutynowego trybu działania. Mówiąc prościej, wyszukany wykres firmy Gartnera przekazuje nam następującą informację:

Jednak choć do osobliwości technologicznej jeszcze daleko, sztuczna inteligencja w obecnym wydaniu nadal może znacząco usprawnić automatyzację testów.
Jak uczenie maszynowe tworzy zautomatyzowane testy?
- Trenowanie: W fazie trenowania model uczenia maszynowego musi zostać wytrenowany na konkretnym zbiorze danych organizacji, obejmującym bazę kodu, interfejs aplikacji, dzienniki, przypadki testowe, a nawet dokumenty specyfikacji. Brak wystarczająco dużego zbioru danych treningowych może obniżyć skuteczność algorytmu.
Niektóre narzędzia mają wstępnie wytrenowane modele, które są aktualizowane poprzez ciągłe uczenie dla konkretnych zastosowań, takich jak testowanie interfejsu użytkownika, dzięki czemu uogólnione uczenie może być wykorzystywane w konkretnej organizacji. - Generowanie danych wyjściowych / wyników: W zależności od zastosowania model generuje przypadki testowe, sprawdza istniejące przypadki testowe pod kątem pokrycia kodu, kompletności i dokładności, a nawet wykonuje testy. We wszystkich przypadkach tester musi sprawdzić wygenerowane dane wyjściowe, aby je zweryfikować i upewnić się, że można ich użyć.
Jeśli posłużymy się analogią do samochodów autonomicznych, wyniki przypominają raczej system wspomagania kierowcy niż rzeczywiście bezkierunkowy samochód. - Ciągłe doskonalenie: W miarę regularnego korzystania z narzędzia przez organizację ilość danych treningowych stale rośnie, co potencjalnie zwiększa dokładność i skuteczność istniejących wytrenowanych sieci. Krótko mówiąc, system AI stale się uczy i doskonali.
Algorytmy uczenia maszynowego rewolucjonizują automatyzację testów. Aby znaleźć narzędzia wykorzystujące te zaawansowane algorytmy, zapoznaj się z naszym przewodnikiem po najlepszych narzędziach do testowania oprogramowania
Zastosowania AI w automatyzacji testów
Przyjrzyjmy się bliżej niektórym zastosowaniom AI w automatyzacji testów, w tym testowaniu jednostkowemu, testowaniu interfejsu użytkownika, testowaniu API oraz utrzymywaniu zestawu testów automatycznych.
Have an account? Log In
Tworzenie i aktualizowanie testów jednostkowych
Testowanie jednostkowe, często stosowane jako część ciągłego testowania oraz ciągłej integracji / ciągłego dostarczania (CI / CD) w środowisku DevOps, może być prawdziwą udręką w… pasie asteroid.
Zazwyczaj programiści poświęcają wiele czasu na tworzenie i utrzymywanie testów jednostkowych, co nie jest nawet w przybliżeniu tak przyjemne jak pisanie kodu aplikacji. W tym przypadku produkty oparte na AI, służące do automatycznego tworzenia testów jednostkowych, mogą być przydatne, szczególnie dla organizacji, które planują wprowadzić testy jednostkowe na późnym etapie cyklu życia produktu.
Korzyści:
- Oparte na AI automatyczne testy jednostkowe stanowią znaczący krok naprzód w porównaniu z opartym na szablonach generowaniem automatycznych testów jednostkowych za pomocą analizy statycznej lub dynamicznej. Wygenerowane w ten sposób testy są rzeczywistym kodem, a nie tylko szkieletami.
- Testy jednostkowe oparte na AI można wygenerować bardzo szybko, co jest przydatne w przypadku dużej istniejącej bazy kodu.
- Programiści muszą jedynie zmodyfikować testy i mogą stosunkowo szybko skonfigurować zestaw testów regresji jednostkowej.
Ograniczenia:
- Testy jednostkowe wygenerowane przez AI po prostu odzwierciedlają kod, na podstawie którego powstały. Na razie nie potrafią odgadnąć zamierzonej funkcjonalności kodu. Jeśli kod nie działa zgodnie z założeniami, test jednostkowy wygenerowany dla tego kodu będzie odzwierciedlał to niezamierzone działanie.
Jest to istotna wada, ponieważ głównym celem testów jednostkowych jest egzekwowanie i weryfikowanie dorozumianego lub jawnego kontraktu. - Testy jednostkowe wygenerowane przy użyciu uczenia maszynowego mogą zepsuć istniejące, działające testy jednostkowe, a dopilnowanie, aby tak się nie stało, należy do programisty.
- Programiści muszą samodzielnie pisać testy dla złożonej logiki biznesowej.
Automatyczne testowanie interfejsu użytkownika
Jest to obszar, w którym sztuczna inteligencja zaczyna odgrywać coraz większą rolę. W testowaniu interfejsu użytkownika opartym na sztucznej inteligencji narzędzia do automatyzacji testów analizują model DOM i powiązany kod, aby określić właściwości obiektów. Wykorzystują również techniki rozpoznawania obrazów do poruszania się po aplikacji oraz wizualnego weryfikowania obiektów i elementów interfejsu użytkownika w celu tworzenia testów interfejsu użytkownika.
Ponadto systemy testowe wykorzystujące sztuczną inteligencję stosują testowanie eksploracyjne w celu znajdowania błędów lub różnic w interfejsie użytkownika aplikacji oraz generują zrzuty ekranu do późniejszej weryfikacji przez inżyniera zapewnienia jakości. W podobny sposób można weryfikować aspekty wizualne testowanego systemu (SUT), takie jak układ, rozmiar i kolor.
Korzyści:
- Automatyczne testowanie interfejsu użytkownika może prowadzić do zwiększenia pokrycia kodu.
- Niewielkie odchylenia w interfejsie użytkownika nie powodują niepowodzenia zestawu testów. Modele sztucznej inteligencji produktu potrafią sobie z nimi poradzić.
Ograniczenia:
- W przypadku każdej nowoczesnej aplikacji liczba platform, wersji aplikacji i wersji przeglądarek jest duża. Nie jest jasne, jak dobrze automatyzacja interfejsu użytkownika oparta na sztucznej inteligencji radzi sobie w takich warunkach. Narzędzia do testowania w chmurze mogą jednak wykonywać testy równolegle, dlatego będzie to interesujący obszar do obserwowania!
Wykorzystanie sztucznej inteligencji do wspomagania testowania API
Nawet bez sztucznej inteligencji automatyzacja testowania API jest nietrywialnym zadaniem, ponieważ wymaga zrozumienia API, a następnie skonfigurowania testów dla wielu scenariuszy w celu zapewnienia odpowiedniej głębokości i szerokości pokrycia.
Obecne narzędzia do automatyzacji testów API, takie jak Tricentis i SoapUI, rejestrują działania i ruch API, aby je analizować i tworzyć testy. Modyfikowanie i aktualizowanie testów wymaga jednak od testerów zagłębienia się w szczegóły wywołań REST i parametrów, a następnie zaktualizowania zestawu testów API.
Narzędzia do automatyzacji testów API oparte na sztucznej inteligencji próbują ograniczyć ten problem, analizując ruch i identyfikując wzorce oraz powiązania między wywołaniami API, skutecznie grupując je według scenariuszy. Narzędzia wykorzystują również istniejące testy do poznawania relacji między interfejsami API, używają tych informacji do zrozumienia zmian w API oraz aktualizują istniejące testy lub tworzą nowe testy oparte na scenariuszach.
Korzyści:
- W przypadku początkujących testerów lub osób bez doświadczenia w programowaniu może to być bardzo pomocne, umożliwiając im „szybki start”.
Zarządzanie zmianami byłoby ponownie znacznie łatwiejsze, ponieważ przynajmniej część zmian w API może być obsługiwana przez narzędzie do automatyzacji wykorzystujące sztuczną inteligencję.
Ograniczenia:
- Ogólnie rzecz biorąc, skonfigurowanie testowania API jest trudne, a niewiele narzędzi oferuje w tym obszarze funkcje oparte na uczeniu maszynowym. Te, które je oferują, wydają się mieć dość podstawowe możliwości.
Utrzymanie testów automatyzacji
Narzędzia oparte na sztucznej inteligencji mogą oceniać zmiany w kodzie i naprawiać kilka istniejących testów, które nie są zgodne z tymi zmianami, zwłaszcza jeśli zmiany w kodzie nie są zbyt złożone. Aktualizacje elementów interfejsu użytkownika, nazw pól i tym podobnych elementów nie muszą już powodować niepowodzenia zestawu testów.
Niektóre narzędzia wykorzystujące sztuczną inteligencję monitorują uruchomione testy i wypróbowują zmodyfikowane warianty w przypadku nieudanych testów, wybierając elementy interfejsu użytkownika na podstawie najlepszego dopasowania. Mogą również weryfikować pokrycie testami i w razie potrzeby uzupełniać luki.
More Articles
Generowanie danych testowych z wykorzystaniem sztucznej inteligencji
Generowanie danych testowych to kolejny obiecujący obszar dla modeli sztucznej inteligencji. Uczenie maszynowe może z łatwością generować zestawy danych, takie jak zdjęcia profilowe i informacje osobowe, na przykład wiek i wagę, na podstawie wytrenowanych modeli uczenia maszynowego, które uczą się z istniejących zbiorów danych produkcyjnych.
W ten sposób wygenerowane dane testowe są bardzo podobne do danych produkcyjnych, co idealnie sprawdza się w testowaniu oprogramowania. Model uczenia maszynowego generujący dane nosi nazwę generatywnej sieci przeciwstawnej (GAN).
Narzędzia do automatyzacji testów wykorzystujące uczenie maszynowe
Zapoznaj się z poniższymi narzędziami, jeśli szukasz oprogramowania wykorzystującego uczenie maszynowe do przeprowadzania i śledzenia automatycznych testów. Wiele z nich obejmuje opcje otwartego oprogramowania lub niewymagające kodowania, aby spełnić potrzeby Twojego zespołu testowego.
Podsumowanie
Sztuczna inteligencja wywarła znaczący wpływ na narzędzia i metody testowania, a w szczególności na automatyzację testów. Przegląd obecnych narzędzi wykorzystujących sztuczną inteligencję pokazuje, że choć pojawia się wiele nowych funkcji, kilka z nich wciąż nie osiągnęło pełnej dojrzałości.
Jeśli ten artykuł okazał się pomocny, zasubskrybuj biuletyn The QA Lead i bądź na bieżąco ze wszystkimi najnowszymi aktualizacjami ze świata testowania.



