CHATGPT a automatizácia testov

Automatizácia testov je dôležitou úlohou pri vývoji softvéru, ktorá je potrebná na rýchle vykonanie testovacích prípadov na kontrolu reprodukovateľnosti, konzistentnosti a včasné odhalenie chýb.

Jednou z bežne používaných a praktických umelých inteligencií je ChatGPT, LLM jazykový model vyvinutý spoločnosťou OpenAI. Má množstvo funkcií a pomáha efektívne vykonávať úlohy aj pri automatizácii testovania. ChatGPT možno integrovať do súboru nástrojov na automatizáciu testovania na validáciu údajov, zefektívnenie generovania testovacích prípadov a zjednodušenie komplexných testovacích scenárov. Prečítaj si aj článok: Umelá inteligencia a testovanie softvéru.

Čo je LLM?

Veľké jazykové modely (LLM) predstavujú najvýznamnejší prelom v oblasti umelej inteligencie od čias hlbokého učenia. Tieto modely sa učia rozpoznávať jazykové vzory pomocou konceptov strojového učenia a rozsiahlych súborov údajov. Vďaka tomu dokážu predpovedať odpovede gramaticky správnym a pre človeka zmysluplným spôsobom.

ChatGPT – čo to je?

ChatGPT je jazykový model riadený umelou inteligenciou, ktorý môže pomôcť pri vytváraní testovacích prípadov a skriptov pre automatizované testovanie. Je to nástroj, ktorý podporuje, ale  nenahrádza ľudských testerov, čím zvyšuje rýchlosť a efektívnosť procesu testovania.

CHATGPT – ako funguje?

ChatGPT funguje na princípe strojového učenia. Je to druh umelej inteligencie, ktorý sa dokáže učiť a zlepšovať na základe údajov, na ktorých je vyškolený. ChatGPT bol vyškolený na súbore textov a kódu, ktorý obsahuje rôzne druhy informácií, vrátane faktických informácií, kreatívneho obsahu a kódu.

Keď ChatGPT dostane otázku alebo požiadavku, najprv ju analyzuje a snaží sa pochopiť, čo sa od neho žiada. Potom použije svoje vedomosti a schopnosti na generovanie odpovede alebo vykonanie úlohy.

ChatGPT je stále vo vývoji, ale už dokáže vykonávať mnoho druhov úloh. Medzi jeho schopnosti patria:

  • Generovanie textu: ChatGPT dokáže generovať text rôznych štýlov a formátov, vrátane novinových článkov, kníh, kódu, scenárov, hudobných skladieb, e-mailov, listov atď.
  • Preklad jazykov: ChatGPT dokáže prekladať medzi rôznymi jazykmi.
  • Odpovedanie na otázky: ChatGPT dokáže odpovedať na otázky informatívnym spôsobom, aj keď sú otvorené, náročné alebo zvláštne.
  • Tvorba kreatívneho obsahu: ChatGPT dokáže generovať rôzne druhy kreatívneho obsahu, ako sú básne, kód, scenáre, hudobné skladby, e-maily, listy atď.

Ako vytvoriť testovacie prípady pomocou ChatGPT?

1. Definuj testovací scenár (test scenario):

Najprv sa rozhodni, čo chceš testovať, napríklad akciu používateľa alebo konkrétnu funkciu v aplikácii. Ak napríklad testuješ funkciu vyhľadávania na webovej stránke, načrtni kľúčové kroky tejto funkcie.

2. Vyber si framework a programovací jazyk:

Selenium podporuje rôzne jazyky, napríklad Java, Python a C#. Robot Framework podporuje Python a Cypress podporuje len JavaScript. Vyber si, ktorý framework  a jazyk je najvhodnejší vzhľadom na tvoje skúsenosti. My sme si pre príklad vybrali Selenium.

3. Priprav si vývojové prostredie:

Nainštaluj Selenium WebDriver a väzby pre zvolený programovací jazyk. Toto nastavenie ti umožní automatizovať interakcie s prehliadačom v tvojich testoch.

4. Zadaj údaje do ChatGPT:

Pristúp k ChatGPT s tvojim testovacím scenárom. Môžeš napríklad povedať: „Potrebujem otestovať funkciu vyhľadávania na webovej stránke. Môžeš mi navrhnúť nejaké testovacie prípady?“

5. Prijatie testovacích prípadov (test cases) z ChatGPT:

ChatGPT spracuje tvoju požiadavku a poskytne príslušné testovacie prípady (test cases). Typický testovací prípad pre funkciu vyhľadávania môže zahŕňať prechod na stránku vyhľadávania, vyhľadávanie prázdneho dotazu, zadanie korektného dotazu, zadanie nesprávneho dotazu (napríklad rôzne náhodné znaky, čísla, reťazce), kliknutie na tlačidlo vyhľadávania a overenie výsledkov.

Prijatie testovacích prípadov (test cases) z ChatGPT

6. Transformácia testovacích prípadov do skriptov Selenium:

Použi návrhy ChatGPT na napísanie skriptu Selenium vo vybranom jazyku. Napríklad skript Java pre poskytnutý testovací prípad by zahŕňal kódovanie krokov na otvorenie prehliadača, vykonanie akcií vyhľadávania a kontrolu výsledkov. Tu je príklad testovacieho skriptu Selenium Java pre druhý, vyššie vygenerovaný testovací prípad:

 

 

 

 

 

 

 

 

 

 

Transformácia testovacích prípadov do skriptov Selenium

Transformácia testovacích prípadov do skriptov Selenium

7. Vykonaj testovací skript:

Spusti svoj skript, aby si skontroloval, či prešiel alebo či identifikoval nejaké problémy.

Začlenenie ChatGPT do generovania testovacích prípadov môže zefektívniť tvoj pracovný postup testovania. Napriek tomu je veľmi dôležité skontrolovať prípady vygenerované umelou inteligenciou, aby si sa uistil, že presne a komplexne spĺňajú tvoje potreby testovania.

Príklady použitia ChatGPT na automatizáciu testovania

ChatGPT na automatizované testovanie možno okrem mnohých iných scenárov použiť aj v nasledujúcich prípadoch:

Písanie testovacích skriptov pomocou ChatGPT

ChatGPT dokáže generovať testovacie skripty, pričom nezávisle od seba predpokladá rôzne scenáre pre automatizáciu testovania ChatGPT.

Jeho kompletné fungovanie bolo zrejmé, keď sme zadali testovací dotaz „Vytvor testovací skript s 2 predpokladanými metódami na otvorenie webovej stránky školy a stiahnutie brožúry“. ChatGPT predpokladal dve metódy, jednu na priame stiahnutie brožúry prostredníctvom dostupného tlačidla a druhú na navigáciu po stránke a dosiahnutie požadovaného miesta na jej stiahnutie.

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.concurrent.TimeUnit;

public class TestovanieStrankySkoly {

    public static void main(String[] args) {
        // Nastavenie cesty k ChromeDriver
        System.setProperty("webdriver.chrome.driver", "cesta_k_chromedriver\\chromedriver.exe");

        // Inicializácia ChromeDrivera
        WebDriver driver = new ChromeDriver();

        // Otvorenie webovej stránky školy
        otvorStrankuSkoly(driver);

        // Stiahnutie brožúry
        stiahniBrozuru(driver);

        // Zatvorenie okna prehliadača
        driver.quit();
    }

    public static void otvorStrankuSkoly(WebDriver driver) {
        // Otvorenie webovej stránky školy
        driver.get("https://webstrankaskoly.sk"); // Nahraďte URL adresu webovej stránky školy

        // Implicitné čakanie na dynamické prvky
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

        // Voliteľne: Zväčšiť okno prehliadača
        driver.manage().window().maximize();
    }

    public static void stiahniBrozuru(WebDriver driver) {
        // Predpokladá sa, že odkaz na stiahnutie brožúry sa nachádza pod názvom triedy 'brozura-odkaz'
        WebElement odkazNaBrozuru = driver.findElement(By.className("brozura-odkaz"));

        // Kliknutie na odkaz na stiahnutie brožúry
        odkazNaBrozuru.click();

        // Počkať na dokončenie sťahovania (voliteľné: môžeš potrebovať riešenie stiahnutia podľa nastavení tvojho prehliadača)
        // Napríklad, ak je to priamy odkaz na stiahnutie, možno nebudeš potrebovať ďalšie čakanie alebo riešenie stiahnutia

        // Môžeš tiež overiť sťahovanie kontrolovaním, či sa súbor stiahol do konkrétneho adresára
        // alebo kontrolou prítomnosti stiahnutého súboru v systéme po kliknutí na odkaz
    }
}

Generovanie testovacích údajov

Automatizácia testov ChatGPT zahŕňa generovanie testovacích údajov. Tu sme vygenerovali testovacie údaje s výzvou „vygeneruj testovacie údaje 10 pacientov v tabuľkovej forme na výskum črevného mikrobiómu pacientov s komorbidnými ochoreniami, ako je diabetes, CVD. Zabezpeč zohľadnenie všetkých relevantných parametrov“.

ChatGPT vygeneroval testovacie údaje s ohľadom na viaceré priamo súvisiace parametre. Ďalej nás informoval aj o náhodnom a nereálnom generovaní údajov a o dôležitosti preberania reálnych údajov.

Generovanie testovacích údajov

Používanie aplikácie ChatGPT na zmenu a opravu kódu

Predstavme si napríklad, že máš funkciu, ktorá má vypočítať faktoriál čísla, ale nedáva správny výstup. Tvoj kód môže vyzerať napríklad takto:

Používanie aplikácie ChatGPT na zmenu a opravu kódu

Keď však zavoláš túto funkciu s faktoriálom(5), namiesto 120 (čo je faktoriál 5) dostaneš iný výstup. Teraz predpokladajme, že si si neni istý,  prečo sa to deje a chcel by si pomôcť s opravou.

Môžeš opísať problém a poskytnúť úryvok kódu:

„mám funkciu v Pythone s názvom factorial, ktorá má vypočítať faktoriál čísla, ale nedáva mi správny výstup pre factorial(5). Očakávam, že výsledok bude 120, ale ukazuje to niečo iné. Tu je kód, ktorý používam:

def factorial(n):

    if n == 0 or n == 1:

        return 1

    else:

        return n * factorial(n-1)

result = factorial(5)

print(result)  # This should give 120, but it's giving a different output.

Môžeš mi pomôcť zistiť, prečo to nefunguje tak, ako sa očakávam?“

Poskytnutím úryvku kódu a opísaním problému môže ChatGPT pomôcť identifikovať potenciálne problémy, chyby alebo vylepšenia v tvojom kóde. Môže ti poskytnúť poznatky, navrhnúť opravy alebo položiť objasňujúce otázky, ktoré ti pomôžu vyriešiť problém, s ktorým si sa stretol.

Návrh vzorových testovacích prípadov

Krvné skupiny ľudí vykazujú viacero alel, čo znamená, že krvná skupina môže mať rôzne genotypy. Tento prípad považujeme za predpovedanie krvnej skupiny dieťaťa. Príkaz (prompt) pre ChatGPT na automatizáciu testov je „Testovacie prípady na testovanie pravdepodobnosti prítomnosti konkrétnej krvnej skupiny u dieťaťa. Predstav si reálny scenár, v ktorom krvná skupina môže mať dva genotypy“.

Návrh vzorových testovacích prípadov

Formátovanie údajov

Sekvencie DNA sú uložené v rôznych formátoch. Naše vyhľadávanie bolo založené na formáte FASTA a GenBank. Prvý z nich poskytuje len sekvenciu DNA, zatiaľ čo druhý je spojený s viacerými ďalšími informáciami.

V testovacej automatizácii ChatGPT pre formátovanie údajov bol príkaz: „Napíš program v Pythone a R na súčasnú konverziu sekvencií DNA a proteínov z formátu FASTA do formátu GenBank.“ ChatGPT poskytuje pre každý programovací jazyk samostatný program na manipuláciu s údajmi/sekvenciami pomocou špecifických knižníc.

Formátovanie údajov

Analýza výsledkov testu

Mutácie sú zmeny v genetických sekvenciách. Vzhľadom na ich obrovský význam žiadame ChatGPT o automatizované testovanie na porovnanie frekvencie mutácií. Tu je dotaz na to isté „Analyzuj výsledky dvoch náhodných sekvencií DNA s rôznou frekvenciou mutácií. Uveď frekvenciu rôznych typov mutácií v nej“.

Analýza výsledkov testu

Písanie dokumentácie

Hoci ChatGPT dokáže písať kód, jeho najväčšou silou je generovanie textov a vysvetlení. To sa dá úspešne využiť pri písaní testovacej dokumentácie. Ak napríklad potrebuješ napísať tímové inštrukcie o unit testovaní, môžeš požiadať ChatGPT, aby to urobil za teba. V ideálnom prípade by si mal nástroju poskytnúť zoznam tém, ktoré by mali byť v dokumentácii obsiahnuté. Ja som napríklad zadala dotaz na vytvorenie dokumentácie pre unit test na tému „Testovanie loginu“.

Písanie dokumentácie

Pomoc pri revízii kódu (code reviews)

ChatGPT môže pomôcť preskúmať testovacie skripty a navrhnúť vylepšenia, potenciálne problémy alebo možnosti optimalizácie. Na obrázku 3 sú znázornené niektoré aspekty, ako môže ChatGPT pomôcť počas procesu revízie kódu (code reviews) na otázku: „Ako mi môžeš pomôcť s procesom review kódu?“ Prečítaj si viac o code reviews v článku od nášho Java programátora: Ako na efektívne code reviews: tipy a triky.

Pomoc pri revízii kódu (code reviews)

Výhody Chat GPT pre automatizáciu testovania

  • Rýchlo generuje testovacie prípady,
  • generuje nápady a predpoklady pre dotazy,
  • zlepšuje pokrytie testov,
  • efektívne pre zovšeobecnené testovanie,
  • poskytuje štandardizované formáty testovacích prípadov,
  • šetrí čas a náklady,
  • zvyšuje produktivitu,
  • integrovateľnosť s automatizačnými frameworkami,
  • zabezpečenie bezpečnosti,
  • zrýchlenie debuggovania kódu.

Výzvy a obmedzenia používania ChatGPT na automatizáciu testovania

Hoci je ChatGPT na automatizáciu testov bezproblémový, sú s ním spojené určité obmedzenia. Tu sú uvedené tie najdôležitejšie:

  • ChatGPT sa pri tréningu stretáva s množstvom dát. Chýbajú mu však odborné znalosti v akejkoľvek špecifickej oblasti. To vedie k nedostatočnej presnosti.
  • Môže nesprávne interpretovať dotazy, čo sa párkrát stalo aj nám.
  • Predpoklady a schopnosť simulovať scenáre alebo podmienky sú obmedzené.
  • Neschopnosť odvodzovať z nejednoznačných dotazov.
  • Odpovede sú všeobecnejšie.
  • Poskytovanie dôverných informácií týkajúcich sa experimentov a inovácií je riskantné.
  • Nemožnosť skutočnej interakcie so skutočnými experimentmi alebo softvérom obmedzuje jeho schopnosť prispôsobiť sa.
  • Nie je vhodný na komplexné testovacie scenáre.

Osvedčené postupy pre využitie ChatGPT pri automatizácii testovania

Tu je niekoľko tipov na prekonanie viacerých problémov, s ktorými sa používateľ môže stretnúť pri vykonávaní automatizácie testovania:

  • Buď konkrétny pri zadávaní kľúčových slov.
  • Na generovanie nápadov použi samotný ChatGPT.
  • Zabezpeč manuálnu validáciu jeho dotazu so zameraním na každý riadok a krok.
  • Vyhni sa zdieľaniu citlivých informácií alebo nápadu.
  • Dbaj na to, aby si poskytol kontext vo svojich otázkach.
  • Poskytni základné informácie, konkrétne pre príslušnú oblasť.
  • Integrovať ChatGPT s tradičnou sadou nástrojov na automatizáciu.
  • Dôkladne zváž možné skreslenia zo strany ChatGPT a podľa toho skontroluj výsledky.

Nevýhody aplikácie ChatGPT pre automatizáciu testovania

Hoci má ChatGPT, postavený na ChatGPT-3.5, mnoho výhod a možností využitia, treba si uvedomiť aj niekoľko nevýhod.

  • Je založený na štatistických vzoroch a nerozumie základnému významu

ChatGPT je postavený na GPT-3.5 (v čase písania článku je v platenej verzii je aktuálna verzia Chatgpt-4o), čo je autoregresný model jazyka. Jedným z najväčších problémov tohto prístupu je však to, že je veľmi silne závislý od štatistických vzorov.

Tento model učenia predpovedá pomocou štatistických modelov, aké by mali byť ďalšie slová na základe toho, aké slová boli použité predtým. Nemá však základné pochopenie významu týchto slov.

To znamená, že sa nedá tak efektívne použiť v situáciách, keď si otázky alebo výroky používateľa vyžadujú pochopenie kontextu, ktorý nebol predtým vysvetlený.

  • Medzery v učení

Základná technológia v ChatGPT, jazykový model GPT-3.5, je jazykový model hlbokého učenia, ktorý bol vycvičený na veľkých súboroch údajov obsahu vytvoreného ľuďmi. Tu predpokladáme, že sa naučil aj kód ako text, preto dokázal vytvoriť také presné kódy.

To znamená, že nedokáže presne reagovať na veci, ktoré sa predtým nenaučil, alebo môže poskytnúť nesprávne informácie, ak jeho učenie nebolo aktualizované.

Napríklad, ak jeho posledná fáza učenia bola na frameworku, ktorý odvtedy vynovil polovicu svojich metód, potom kód, ktorý vytvorí, bude používať tieto zastarané metódy. Používateľ by sa teda musel uistiť, že konečný kód, ktorý používa, je aktuálny.

  • Neúplný kód

Ďalším problémom pri vytváraní kódu prostredníctvom ChatGPT je, že sa musíš vysporiadať s čiastočne napísaným kódom.

Ak si teda odkázaný na kód založený na ChatGPT, musel by ste najprv pochopiť neúplný kód, dokončiť ho alebo upraviť podľa svojich potrieb. A ako si vieš predstaviť, je to často náročné, pretože existuje veľa vecí, ktoré by sa mohli pokaziť. Aj keď sa ti podarí dosiahnuť to, čo chceš, konečný produkt pravdepodobne nebude taký dobrý, ako keby si kód napísal sám od začiatku. Ale na druhej strane, niekedy môže byť rozšírenie kódu alebo debuggovanie kódu jednoduchšie ako vytváranie opakovaného kódu od začiatku.

  • Predpoklady

ChatGPT je závislý od predpokladov. Softvéroví testeri sú vyškolení na identifikáciu týchto skrytých faktorov, ktoré by potenciálne mohli spôsobiť zlyhanie aplikácie a keď tak urobia, môžu do svojich testovacích prípadov zabudovať spôsoby kontroly týchto problémov. Čo sa však stane, keď testeri nemajú dostatok času na otestovanie všetkých svojich predpokladov? Čo ak informácie potrebné na overenie predpokladu nie sú k dispozícii? Keď sa na tvorbe produktu podieľajú aj iné tímy, napríklad QA alebo vývoj, môže byť ťažké to kontrolovať.

Záver

ChatGPT je stále v počiatočnom štádiu a neustále sa vykonávajú aktualizácie s cieľom pridávať funkcie alebo opravovať chyby. Okrem toho ide o model, ktorý sa neustále učí, takže čím viac ľudí ho používa a zisťuje problémy v platforme, tým je lepší a kvalitnejší. Jeho presnosť sa bude naďalej zvyšovať a medzery v učení sa budú naďalej zapĺňať. Ako sme si ukázali v článku, použiť Chatgpt pri automatizácii testov je už teraz možné a v budúcnosti bude jeho využitie pri testovaní softvéru ešte efektívnejšie.

Ďalším nástrojom, ktorý je založený na umelej inteligencii a využíva sa pri testovaní softvéru je Copilot od GitHub. Prečítaj si článok Github Copilot a testovanie softvéru.

Ak vieš po nemecky a hľadáš si prácu ako IT tester, prezri si naše benefity pre zamestnancov a reaguj na najnovšie ponuky práce.

O autorovi

Michaela Kojnoková

Agile Test Engineer

Po štúdiu informatiky na ŽU a TUKE som sa najviac ponorila do oblasti automatizácie testovania. Okrem toho sa venujem tvorbe webov, databázam, dátovej analytike, umelej inteligencii a strojovému učeniu. Mám rada cestovanie, šport a najviac si užívam čas strávený v prírode s mojimi blízkymi. LinkedIn

Daj nám o sebe vedieť