Czy sztuczna inteligencja zastąpi testerów?
W tym artykule w przystępny sposób przedstawię, jak bardzo złożona jest sztuczna inteligencja i czy istnieje możliwość jej samodzielnego użycia w swoich testach. Powiem również o tym, jak jej rozwój może wpłynąć na rozwój branży testerskiej. Zapraszam do lektury.
Sztuczna inteligencja to termin, który ostatnio dosyć często pojawia się w naszym życiu. W branży IT często mówi się o niej w kontekście Big Data, uczenia maszynowego i automatyzacji. Chwalą się nią najwięksi giganci, jak Google, Amazon czy Microsoft, a startupy dzięki niej pozyskują inwestorów. Nasuwają się pytania: czym właściwie jest AI? I do czego można ją wykorzystać w testowaniu? Jednak zanim postaram się odpowiedzieć na te pytania, mały wstęp o powstaniu i zasadach działania sztucznej inteligencji.
Sztuczna inteligencja w sensie koncepcji nie jest niczym specjalnie nowym, pierwsze poważne prace nad jej stworzeniem rozpoczęły się w latach 50, XX wieku. Zakładano wtedy stworzenie maszyny, która miałaby odtworzyć wszelkie funkcje poznawcze ludzkiego mózgu, niestety do dzisiaj nie udało się spełnić wszystkich pierwotnych założeń, ale mamy już za sobą kilka ważnych przełomów w tej dziedzinie.
Definicja AI - jak to działa?
Jest wiele źródeł, które definiują sztuczną inteligencję w bardzo zbliżony sposób, czyli jako modelowanie zachowań inteligentnych, ale w jej prawdziwym komplementarnym znaczeniu, to zdolność do kreowania działań/decyzji na podstawie przeszłych doświadczeń oraz posiadanie autorefleksji.
Na obecnym etapie rozwoju AI nie spełnia pierwotnych założeń koncepcyjnych, więc postaram się wyjaśnić, czym ona jest, bazując na tym, co obecnie ma wartości użytkowe. Nie każdy będzie zadowolony z tego faktu, ale właściwie każdy element ludzkiej technologii wywodzi się z matematyki lub jest opisywany za jej pomocą. Nie inaczej jest w przypadku sztucznej inteligencji.
Elementarnym zadaniem przy tworzeniu sztucznej inteligencji (takiej, jaką znamy z otaczającego nas świata) jest rozwiązanie problemu polegającego na stworzeniu czegoś, co będzie podejmować za nas decyzję, czyli: wyręczy nas w analizowaniu danych, wyciąganiu wniosków i podjęciu decyzji. Jakkolwiek skomplikowanie to brzmi, matematyka umożliwia nam stworzenie takiego cuda, potem pozostaje tylko przetłumaczenie tego na język komputerów i voilà, wszystko robi samo.
Wszystko, co w przyrodzie i technologii jest skomplikowane, na podstawowym poziomie, składa się z prostych elementów. Analogicznie jest w przypadku sztucznej inteligencji, a więc takim najmniejszym i najprostszym elementem teoretycznym sztucznej inteligencji jest Perceptron, zwany sztuczny neuronem. Nie zagłębiając się w jego matematyczną genezę i budowę (funkcje: linowe, nieliniowe, aktywacji, błędu, macierze, pochodne etc.), można go opisać jako zbiór związanych ze sobą funkcji (inaczej algorytmów), które działając wspólnie, analizują dane, które im się dostarcza i „wypluwają” inne dane - wynik logiczny zadania.
Połączenie ze sobą dużej ilości takich neuronów daje ogromne możliwości i im więcej ich dodamy, tym bardziej możemy komplikować dane wejściowe. We współczesnych rozwiązaniach kategoryzowanych jako AI, są wykorzystywane dużo bardziej złożone (działające analogicznie) formy niż wspomniany perceptron.
Mamy sieć neuronów - i co dalej?
Aby móc wykorzystać cały potencjał sztucznej inteligencji, musimy zasilić naszą sieć wcześniej wspomnianymi danymi, zwanymi danymi treningowymi, które można określić jako reprezentatywne przykłady. Im więcej danych o szerokim zakresie dostarczymy, tym „precyzyjniej” będzie działać nasz sztuczny mózg.
Przykładowo, jeśli chcemy, żeby nasz sztuczny mózg analizował zdjęcia zwierząt i wskazywał nam na nich wszystkie psy, to nie wystarczy mu pokazanie miliona zdjęć psów. Owszem, dostarczenie zdjęć różnych ras, w różnych wieku naszych czworonogów pozwoli mu precyzyjnie stwierdzić, że na zdjęciu jest psiak. Jednak, aby nasz sztuczny mózg miał złożoną logikę, musimy rozważyć przypadek, kiedy na zdjęciu jest coś innego, np. kot lub inny zwierzak. Wbrew naszej intuicji, sztuczna inteligencja może sklasyfikować konia jako psa, gdy dane treningowe nie będą odpowiednio spreparowane.
W tym momencie muszę wspomnieć o uczeniu maszynowym i głębokim, które są nierozerwalnymi elementami składowymi sztucznej inteligencji. Cały jej czar polega na jej możliwościach „wyciągania wniosków” na podstawie dostarczonych danych. Mówiąc prościej, na budowaniu sobie doświadczeń w sposób zautomatyzowany - właśnie tym jest uczenie maszynowe.
Deep learning
Deep learning (uczenie głębokie), to poddziedzina uczenia maszynowego. Wbrew temu, co sugeruje nazwa, nie jest to uczenie się dogłębnej wiedzy. Deep learning jest analogią uczenia maszynowego, jednak w bardziej zaawansowanym wielowarstwowym zakresie. Tłumacząc to na ludzki język: uczenie maszynowe polega na uczeniu się prostych/pojedynczych rzeczy, w przeciwieństwie do deep learningu, który analizuje wiele informacji (wielowarstwowo), tak jak w przytoczonym wyżej przykładzie ze zdjęciami psów. Warstwami mogą być tu np.: kolory na zdjęciach, formaty plików lub charakterystyczne cechy obiektów na zdjęciach; wielkości uszu, pysków, oczu, długości sierści oraz wiele innych cech. Można je mnożyć w nieskończoność, a im więcej ich określimy, tym trafniejsze wnioski wyciągnie AI.
Wymieniając długość sierści itp., w znacznym stopniu uprościłem przykład. W rzeczywistości w takim przypadku AI wykonuje kolejno działania: analizuje kolory pikseli i stworzone przez ich różnice-krawędzie, na tej podstawie tworzy modele konturów i kątów, aby następnie zaklasyfikować te dane do części różnych obiektów. Dopiero składowa różnych części, jak właściwie rozpoznane oczy, uszy, sierść, tworzy obiekt, czyli ww. psiaka. Na podstawie jego unikalnych cech, sztuczna inteligencja jest w stanie stwierdzić, że pies to nie koń. Sam/a widzisz, ile dzieje się wewnątrz sztucznej inteligencji.
Ciekawostką może być, fakt, że pracownicy Microsoftu tworzący oprogramowanie do popularnego akcesorium konsoli XBOX zwanego Kinect, sami do końca nie wiedzą, co się dzieje wewnątrz ich własnego algorytmu, który bazuje na Deep learningu. Dzieje się tak, ponieważ sztuczna inteligencja stworzyła bardzo złożone i stosunkowo alternatywne metody analizy danych wejściowych, które są ciężkie w przyswojeniu i analizowaniu przez człowieka.
Wracając do QA
Wszystko to, co napisałem do tego momentu, może lekko przerażać i rzeczywiście nie twierdzę, że użycie sztucznej inteligencji do testowania jest proste, (zwłaszcza gdy ktoś chce samodzielnie implementować takie rozwiązania), jednak nie jest to też niewykonalne.
Na szczęście, nie trzeba wymyślać koła na nowo, ponieważ istnieją biblioteki, które pozwalają na zaimplementowanie AI do naszych testów. Są to rozwiązania typu open source, więc mogą być stosowane komercyjnie, jednak ich wykorzystywanie wymaga dobrej znajomości języka programowania, choćby ze względu na implementację i poprawę ewentualnych błędów w narzędziu (tego typu rozwiązania są tworzone nieodpłatnie przez środowiska entuzjastów, często zdarza się, że aktualizację pojawiają się na tyle rzadko, że rozwiązanie samo w sobie nie nadąża za zmianami w nowych wydaniach języków programowania).
Jednym z przykładów jest AI for Appium and Selenium napisane w Javie. Narzędzie wykorzystuje uczenie maszynowe do wyszukiwania elementów (lokatorów), bazując nawet na samym zrzucie ekranu! Rozwiązanie jest o tyle ciekawe, że sprytnie rozwiązano problem rozszerzenia Selenium (architektura Selenium sama w sobie utrudnia pisanie autorskich pluginów) poprzez implementację rozwiązania bezpośrednio w sterowniku przeglądarki. Działa to na zasadzie klonowania sesji przeglądarki i symultanicznej analizy klona.
Co do użycia w praktyce, trudnością może być konfiguracja serwera, który działa w trybie lokalnym na komputerze osoby testującej. Więcej informacji pod tym linkiem.
Jeśli chciał/abyś samodzielnie zbudować swoje własny testerski tool (od podstaw), wykorzystujący AI, możesz skorzystać z takich projektów jak:
- Java Machine Learningjest frameworkiem Java typu open source, zapewnia różne algorytmy uczenia maszynowego przygotowane specjalnie dla programistów. Oficjalna strona zawiera dokumentację API z wieloma próbkami kodu i tutorialami.
- Deep learning for Java jest biblioteką głębokiego uczenia się dla JVM, ale dostarcza również API do tworzenia sieci neuronowych. Oficjalna strona zawiera wiele tutoriali i prostych wyjaśnień teoretycznych dotyczących głębokiego uczenia się i sieci neuronowych.
- D3webjest open source'owym mechanizmem uczenia, służącym do rozwijania, procesów testowania, rozwiązywaniu problemów logicznych przy użyciu sieci neuronowych. Oficjalna strona zapewnia szybkie wprowadzenie z wieloma przykładami i dokumentacją.
- Deep java libraryto biblioteka open source stworzona przez AWS Labs. Dostarcza intuicyjne, niezależne od frameworków API Java do szkolenia i testowania modeli nauczania.
Wspominane projekty wymagają wiedzy co najmniej dobrego (z kilkunastomiesięcznym doświadczeniem) programisty i bardzo dużo czasu. Zdaję sobie sprawę, że możesz być na początku swojej przygody z programowaniem lub po prostu planujesz pozostać w ścisłej specjalizacji związanej tylko z wiedzą programistyczną testera automatyzującego. Jeśli tak, nadal możesz skorzystać z dobrodziejstw AI, w prostszy, ale niestety płatny sposób.
Przykładem może być narzędzie Shield34, który umożliwia łatwą implementację i integrację z testami Selenium oraz zapewnia odpowiednie wsparcie twórców w przypadku problemów. Autorzy chwalą się wykorzystaniem AI do rozwiązania problemów związanych z koniecznością utrzymania kodu testów, mianowicie rozwiązanie analizuje użycie lokatorów i ich ewentualne zmiany wynikające z aktualizacji kodu testowanej aplikacji, dodatkowo sprawdza realizacje scenariuszy testowych i ułatwia debugowanie testów.
Coraz więcej firm inwestuje w nowoczesne narzędzia programistyczne,. Jeśli pracujesz w projekcie, który wymaga szybkiej realizacji zadań, warto spróbować przekonać przełożonych do inwestycji w narzędzia korzystające z AI, która skróci czas procesu testowania, poprawi jakość produktu i ostatecznie wyręczy Cię w wykonywaniu żmudnych powtarzalnych zadań. Bez względu na to, jaki typ testów realizujesz, znajdziesz ofertę narzędzi wspierających Twoją pracę dzięki wykorzystaniu uczenia maszynowego i sztucznej inteligencji. Myślę, że warto poświęcić czas na poszukiwania.
Z drugiej strony zachęcam do pracy nad swoim własnym projektem nie tylko w zakresie samego testowania, ale i rozwijania swoich kompetencji. Bardzo wiele narzędzi, które dzisiaj wyznaczają światowe standardy, narodziło się z prostych potrzeb, mających na celu usprawnienie jednej drobnej funkcjonalności lub pobudek związanych z samokształceniem.
Podsumowanie
Kończąc odpowiedzią na tytułowe pytanie, "czy AI zastąpi testerów", odpowiedz, jest oczywista - z pewnością tak, to tylko kwestia czasu. Dzisiaj cała branża IT opiera się na udoskonalonych rozwiązaniach, które powstały 10, 20 i 30 lat temu. Z roku na rok pojawiają się nowe koncepcje programistyczne wymuszone choćby rozwojem architektury komputerów.
Obecnie AI stało się sztandarowym produktem, który jest kojarzony z czymś więcej niż tylko nowatorski pomysł na jakąś aplikację, a jej użycie gwarantuje innowacyjność z perspektywy użytkownika końcowego, co jednocześnie przekłada się na atrakcyjność i zyski. Z czasem, kiedy pożegnamy obecnie używane technologie, zawód testera w znaczącym stopniu zmieni się lub zaniknie. Już w tym momencie mamy potencjał do stworzenia praktycznie bezobsługowych narzędzi testerskich.
Ciężko sobie wyobrazić, jak będzie wyglądał świat, kiedy zostanie stworzona prawdziwa sztuczna inteligencja, ale to już są rozważania, rodem z sci-fi. Obecnie nie ma się co martwić na zapas. Zbliża się rok 2021, a wiele korporacji nadal utrzymuje swoje aplikacje na Systemie Windows XP. Mamy do czynienia ze swoistym paradoksem, gdzie praktycznie jesteśmy o krok od autonomicznych pojazdów sterowanych za pomocą AI i jednocześnie nadal są używane rozwiązania (z punktu widzenia rozwoju IT) prehistoryczne:).
Dlatego zachęcam do poszerzania wiedzy z zakresu obecnie stosowanych narzędzi, bo one jeszcze długo będą niezastąpione, ze względów ekonomicznych, jednocześnie warto zainteresować się AI, bo to z pewnością wyróżni Cię z tłumu osób zajmujących się testowaniem.