AI/ML v testingu: Už tam budeme? 

Kdysi to začalo testováním skupinou nadšenců v jedné místnosti. Pracovali s vytištěnými testy a později pokračovali manuálně s použitím testovacího nástroje. Nastavilo se testovací prostředí, spustily se skripty, psaly se defekty a vyhodnocovaly výsledky. Byl to občas skličující a zdlouhavý proces. Pak přišla automatizace, která velmi účinně posloužila testovacím postupům a zrychlila tak testovací procesy.

V současné době umělá inteligence (AI) a machine learning (ML) přibývají ve veškerých průmyslových odvětvích a mají co nabídnout i v procesu vývoje softwaru. Manuální práci testerů nicméně nelze úplně eliminovat, protože je stále potřeba umět vyhodnocovat výsledky testů. Ještě nějakou chvíli zkrátka potrvá, než si umělá inteligence osvojí různé rozhodovací schopnosti. Organizace však stále investují do testování a budou chtít udržet krok s aktuálními trendy. Následující text přináší několik příkladů pro využití AI a ML v testování.

Co to je ML a AI

Co tyto pojmy znamenají a jak spolu souvisí?

Machine learning (ML) - česky strojové učení, je obor zabývající se zkoumáním učení strojů. Pracuje s obrovským množstvím dat, která analyzuje, uspořádá do souvislostí a následně vyhodnotí s cílem pochopení principů reálného světa. Výsledné algoritmy ukládá do modelů, ze kterých následně čerpá při řešení obdobného problému.

Aritificial intelligence (AI) - česky umělou inteligenci, můžeme klasifikovat jako obor zabývající se tvorbou systémů, které dokážou napodobit lidský intelekt a lidské chování, přičemž jejím hnacím motorem je právě strojové učení. Umělá inteligence ovšem do původní analýzy přidává i další aspekty, jako je filosofie, sociologie a etika. Je tedy mnohem podobnější lidskému způsobu uvažování.

Příklady využití AI/ML v rámci testovacího procesu

Vybrali jsme některé aktivity testování, kde nám aplikace AI/ML může zjednodušit naše testerské životy:

  • Příprava: analýza rizik, generování testů, testovací data
  • Testování: code coverage, spidering, reportování chyb

Jak nám v těchto aktivitách pomůže AI nebo ML?

Příprava na testování

Analýza rizik

V případě fáze plánování testování a testovacích kapacit se zaměřujeme především na rozsah (scope) a rizika. AI a ML nástroje dokážou interpretovat definované požadavky a vybrat z nich nejdůležitější slova či slovní kombinace, kterým následně přidělí tzv. risk skóre. To lze přidat buď manuálním zásahem nebo postupným trénováním na ukázkových textech. Rizikové oblasti dokumentace jsou následně vybrány jako ty s největším dopadem a mohou posloužit jako zdroj informací pro fázi plánování.

Generování testů

Ve fázi analýzy a designu nám AI a ML nástroje už dokážou nabídnout zajímavější a rozsáhlejší využití. Například při vytváření testovacích případů. Algoritmy AI/ML mohou postupně číst vaši aplikaci a učit se o ní. Tyto algoritmy jsou na základě pozorování aplikace schopny vytvořit datovou sadu, včetně toho, jak by se její různé funkce měly chovat za určitých podmínek. To jim pomáhá automaticky navrhnout testovací případy, včetně očekávaných výsledků.

Testovací data

Ve fázi analýzy a designu je důležité dokázat vydefinovat potřebná testovací data – i tady nám AI/ML nástroje mohou posloužit. Tyto nástroje dokážou generovat testovací data tak, aby obsahově a svými vlastnostmi vyhovovala testům pomocí různých validačních technik. V podstatě sledují využívání testovacích dat v aplikaci a automaticky pak vytváří podobná data.

Testování

Code coverage

V průběhu exekuce testů dokážou AI a ML nástroje pomoci s postupným vylepšováním „code coverage“ neboli míry pokrytí kódu v aplikaci. AI nástroje mohou analyzovat vaše aktuální pokrytí testy a označit tak oblasti, které mají malé pokrytí nebo alespoň upozornit na oblasti v aplikaci, které jsou případně ohroženy. AI nástroje můžou poskytnout lepší přehled o tom, jaké testy by měly být spuštěny pro každý testovací cyklus.

Pomocí shromážděných dat z předchozích cyklů dokáže AI identifikovat, který kód se změnil, a tím automaticky definovat testovací sady na základě rizika či míry důležitosti funkčnosti v aplikaci. Identifikovat tak minimální počet testů, které je potřeba spustit, aby se po změně kódu ověřila správnost a snížit tak manuální pracnost s vyhodnocováním výsledků testů.

Spidering

Postup, kterému se říká „spidering“ znamená, že učící se bot je nasměrován na webovou aplikaci, aby se aplikace automaticky začala procházet. Sbírá snímky obrazovky, stahuje HTML kód každé stránky, měří dobu načítání, provádí stejné kroky pořád dokola a propojuje tak aplikaci. Díky tomu se v průběhu času tvoří datová sada, která jednotlivé ML modely učí, jaké jsou očekávané vzorce aplikace.

Když nástroj běží, porovnává svůj aktuální stav se všemi dříve naučenými vzory. Pokud existuje odchylka (například stránka, která obvykle nemá chyby JavaScriptu, ale nyní má), vizuální rozdíl nebo problém s pomalejším chováním, nástroj to označí jako potenciální problém. V takovém případě musí člověk s doménovými znalostmi aplikace ověřit, zda problémy označené algoritmy ML jsou, či nejsou skutečně chyby.

Reportování chyb

V této testovací fázi dochází k reportování defektů. Testování s AI a ML nástroji umožňuje analýzu defektů v samotném kódu a predikci případných chyb do budoucna. AI může předvídat, u jakého typu chyb a systémového malwaru lze očekávat, že se objeví v procesu vývoje softwaru. Schopnost předvídat problémy objevující se v systému může zabránit jakýmkoli nepředvídaným problémům ve vývoji aplikací.

ML algoritmům umožňuje předpovídat výstup na základě historických příkladů dvojic vstupů a výstupů, tedy označených dat (labelled data). Určité vzory v kódové základně aplikace s sebou nesou vyšší riziko zavedení chyb. Pokud nový vývojář například provádí změny v souboru, který má historicky vyšší výskyt chyb, tak se tato změna může projevit napříč podobnými soubory. Tyto vzory se postupně pomocí nastavených algoritmu učí, dále se klasifikují a dokážou pak předpovídat, kde by mohla být chyba. To umožňuje nalézat defekt dřív, než se objeví samotným testováním, a tím tak snižovat náklady na opravy defektů.

V praxi to probíhá tak, že pro jednotlivé projekty v repozitáři jsou vytvořeny vlastní modely klasifikace, založené na metadatech přidružených k historickým revizím. Označená data pro učící se model jsou vytvořena pomocí metadat shromážděných z úložiště. Když tento model zaznamená změnu kódu (změnu v souboru), získá metadata pro každou z těchto změn a posléze je schopen předpovědět, zda některý z dalších podobných souborů nese riziko vzniku chyby.

Asi každý tester se setkal s problémem duplicit. Díky AI a ML nástrojům lze proces hledání duplicit v otevřených chybách znatelně urychlit, a tím tak zkrátit manuální práci s vyhledáváním již reportovaných chyb. Nástroj dokáže v reálnem čase při reportování chyby podle klíčových slov hledat již zadané chyby a podle toho vyhodnotit, zda se jedná o duplicitu, nebo o již jednou reportovanou a zavřenou chybu. Tím pak upozorní zadavatele chyby.

Závěr - AI & ML v testingu: Mami?! Tak kdy už tam budeme?

AI a ML mění testování softwaru a nadále vylepšují procesy spojené s vývojem a testováním softwaru. Přestože některé společnosti dosud v rámci svých procesů AI/ML nepřijaly, není pochyb o tom, že tady tato technologie zůstane. Stále ale bude platit, že potřebujeme lidi k tomu, aby tyto vzorce a modely vylepšovali. Jedině tak totiž budeme moct dosahovat očekávaných výsledků. Bezesporu dojde ke zrychlení vydávání verzí systému a v tomto turbulentním světě bude potřeba být schopen rychle a pragmaticky reagovat na všechny změny.

V Teseně pracujeme na několika prototypech, v rámci kterých testujeme nové přístupy a nástroje. Na naše akce zveme mezinárodní odborníky a diskutujeme, jak tato témata posouvat dál. Kromě toho nám dělá velkou radost, že mezi našimi zákazníky máme i několik „early adopters“.

S nimi realizujeme různé projekty formou PoC (proof of concept) nebo pro ně vytváříme dema a prototypy. Těchto několik inovativních iniciativ nám již využitím AI/ML v testování umožnilo zlepšit efektivitu vyhodnocování výsledků automatizovaných testů, automatizovat vizuální kontroly při testování různých konfigurací, testovat tisk i kontrolovat PDF smlouvy. Do testovacích procesů našich zákazníku tato vylepšení zavádíme a zvyšujeme tím efektivitu jejich testování.

Jak daleko jste se zaváděním těchto vylepšení u vás? Už jste blízko?

Rádi s vámi vymyslíme vhodné řešení, pomůžeme ušetřit náklady a rychleji vylepšovat produkt. 

Autorka: Klára Siegelová

Klára pracuje jako test manažerka hned v rámci několika různých projektů. Mimo to se aktivně podílí také na rozvoji Teseny. Má zkušenosti z mezinárodního prostředí a v současné době pomáhá s vylepšováním produktů jedné z největších evropských bankovních institucí.