MASARYKOVA UNIVERZITA FAKULTA}w¡¢£¤¥¦§¨  INFORMATIKY !"#$%&'()+,-./012345

Automatizácia funkˇcných testov s nástrojom Ranorex

DIPLOMOVÁ PRÁCA

Bc. Michal Tkáˇc

Brno, 2016 Prehlásenie

Prehlasujem, že táto diplomová práca je mojím pôvodným autor- ským dielom, ktoré som vypracoval samostatne. Všetky zdroje, pra- mene a literatúru, ktoré som pri vypracovaní používal alebo z nich ˇcerpal,v práci riadne citujem s uvedením úplného odkazu na prí- slušný zdroj.

Bc. Michal Tkáˇc

Vedúci práce: Ing. Petr Adámek

ii Pod’akovanie

Rád by som sa pod’akoval vedúcemu práce, Ing. Petrovi Adámkovi, za cenné rady, ochotu a ˇcas,ktorý si na mˇnavždy pri tvorbe tejto diplomovej práce našiel. Takisto d’akujem kolegom za skvelý kolek- tív a pohodu pri každodennej práci.

iii Zhrnutie

Ciel’om tejto práce je zoznámenie sa s problematikou automatizá- cie funkˇcnýchtestov webových a desktopových aplikácií. Selenium a White sú aktívne využívané nástroje v procese automatizácie v spo- loˇcnostiEmbedIT a nástroj Ranorex je vhodný kandidát na ich nahra- denie. Všetky klady a zápory nástrojov sú podrobne zanalyzované a porovnané. Pre tento úˇcelboli implementované vhodné ukážkové príklady a na nich sú demonštrované rozdiely medzi jednotlivými nástrojmi.

iv Kl’úˇcovéslová

Funkˇcnétestovanie, automatizácia testov, užívatel’ské rozhranie, kon- tinuálna integrácia, webová aplikácia, desktopová aplikácia, Selenium, White, Ranorex.

v Obsah

1 Úvod ...... 3 2 Testovanie softvéru ...... 5 2.1 Validácia a verifikácia ...... 5 2.2 Testovacie metódy ...... 6 2.3 Manuálne vs. automatizované testovanie ...... 9 2.3.1 Kedy a preˇcoje automatizácia vhodná? . . . . . 11 2.3.2 Problémy automatizácie ...... 13 2.3.3 Údržba kódu a testov ...... 16 2.4 Testovanie v rámci životného cyklu softvéru ...... 17 2.4.1 V-model ...... 18 2.4.2 Typy testov ...... 20 2.4.3 Funkˇcnétestovanie ...... 22 3 Nástroje na automatizáciu funkˇcnýchtestov ...... 24 3.1 Selenium ...... 24 3.1.1 Selenium Remote Control (RC) ...... 25 3.1.2 Selenium IDE ...... 27 3.1.3 Selenium Grid ...... 29 3.1.4 Selenium WebDriver ...... 31 3.2 White ...... 37 3.3 Ranorex ...... 40 4 Ukážkové príklady ...... 45 4.1 Selenium ...... 45 4.1.1 Použité technológie ...... 45 4.1.2 Štruktúra projektu ...... 47 4.2 White ...... 48 4.2.1 Použité technológie ...... 48 4.2.2 Štruktúra projektu ...... 49 4.3 Ranorex ...... 51 4.3.1 Použité technológie ...... 52 4.3.2 Štruktúra projektu ...... 53 5 Porovnanie jednotlivých nástrojov ...... 56 5.1 Štruktúra projektu ...... 56 5.1.1 Existujúce riešenie ...... 56 5.1.2 Ranorex ...... 56 5.2 Kombinované testovanie ...... 57

1 5.2.1 Existujúce riešenie ...... 57 5.2.2 Ranorex ...... 57 5.3 Identifikácia elementov ...... 58 5.3.1 Existujúce riešenie ...... 58 5.3.2 Ranorex ...... 58 5.4 Spúšt’anie testov ...... 59 5.4.1 Existujúce riešenie ...... 59 5.4.2 Ranorex ...... 60 5.5 Reportovanie výsledkov ...... 60 5.5.1 Existujúce riešenie ...... 60 5.5.2 Ranorex ...... 62 5.6 Cena ...... 64 5.6.1 Existujúce riešenie ...... 64 5.6.2 Ranorex ...... 64 5.7 Zhrnutie ...... 65 6 Záver ...... 68 A Príloha ...... 72 A.1 Testovací scenár ...... 72

2 1 Úvod

Tak ako sa vesmírna raketa s posádkou nezaobíde bez všetkých bez- peˇcnostnýchprevierok a kontrol, tak ani softvér sa nezaobíde bez ˇconajdôkladnejšieho otestovania. Ako povedal Bill Gates pre online portál InformationWeek: „Máme tol’ko testerov, kol’ko máme vývojárov. A testeri trávia všetok svoj ˇcastestovaním a vývojári trávia polovicu ich ˇcasutestovaním. Sme viac organizácia zameraná na testovanie a kvalitu softvéru ako sme softvérová organizácia.“ [1] Tieto slová potvrdzujú, že pri vývoji softvéru treba vynaložit’ nemalé prostriedky na testova- nie jeho kvality. Samozrejme, pri testovaní nesmieme zabúdat’ ani na bezpeˇcnost’. Pretože ako vraví Gene Spafford: „Jediný systém, ktorý je naozaj bezpeˇcný,je ten, ktorý je vypnutý a odpojený, uzamknutý v titáno- vom trezore, pochovaný v betónovom bunkri a je obklopený nervovým ply- nom a vel’mi dobre platenou ozbrojenou ochrankou. Dokonca ani vtedy by som zaˇnnestavil svoj život.“ [2] To, že sa v softvéri nájde chyba, môže ušetrit’ nemalé finanˇcnéprostriedky, a dokonca aj nejeden l’udský život. Ciel’om tejto diplomovej práce je preštudovat’ nástroj Ranorex, ktorý slúži na automatizáciu funkˇcnýchtestov, následné zanalyzo- vanie a porovnanie tohto nástroja s už existujúcim riešením v spo- loˇcnostiEmbedIT a zistenie, ˇcije vhodný pre nahradenie aktuálnych riešení využívajúcich nástroje Selenium a White. Práca je rozdelená na dve ˇcasti. Prvá ˇcast’ (Kapitola 2) sa zaoberá teoretickými znalost’ami testo- vania, definovaním pojmov validácia a verifikácia, zoznámením ˇci- tatel’ov s druhmi testovacích metód, kde je dôraz kladený najmä na rozdiel medzi automatizovaným a manuálnym testovaním a nako- niec je predstavené testovanie v rámci životného cyklu softvéru. Na konci tejto kapitoly sú definované rôzne druhy testov, ktoré sa vy- užívajú v rámci životného cyklu softvéru. Druhá ˇcast’ (Kapitola 3 - 5) sa zaoberá nástrojmi na automatizáciu funkˇcnýchtestov. V kapitole 3 sa nachádza podrobný popis nástrojov Selenium, White a Ranorex. Prvé dva sú využívané v existujúcom riešení spoloˇcnostiEmbedIT a nástroj Ranorex je možný nástupca, ktorý by prevzal rolu automatizovania testov. Kapitola 4 prezentuje ukážkové príklady. Obsahuje použité tech-

3 1. ÚVOD nológie, ktoré sú potrebné na požadovanú funkˇcnost’ daného ná- stroja a popisuje štruktúru jednotlivých riešení. Dalšiaˇ kapitola (Kapitola 5) obsahuje porovnanie jednotlivých ná- strojov zamerané na štruktúru projektov, kombinované testovanie, identifikáciu elementov, spúšt’anie testov, reportovanie výsledkov tes- tov a nakoniec cenu, ktorá predstavuje náklady na automatizáciu s využitím automatizaˇcnýchnástrojov, prípadne doplnkových, ktoré sú pri danom nástroji nevyhnutné. V závere práce sú zhrnuté rozdiely a taktiež doporuˇcenie,ˇcije Ranorex vhodný na automatizáciu funkˇcnýchtestov v spoloˇcnosti EmbedIT. V prílohe sa nachádzajú iba kl’úˇcovéˇcastiimplementácie, pretože kompletné zdrojové kódy a skripty nemôžu byt’ zverejnené.

4 2 Testovanie softvéru

Testovanie je neoddelitel’nou súˇcast’ou vývoja softvéru v každej jeho fáze s ciel’om vytvorenia požadovaného, kvalitného a bezpeˇcného produktu. Podl’a ISTQB (International Software Testing Qualificati- ons Board) testovanie softvéru je [3]:

• proces spúšt’ania a pracovania s programom alebo aplikáciou s ciel’om nájdenia chyby alebo aj • proces validácie a verifikácie toho, že program alebo apliká- cia, alebo produkt: 1. sp´lˇnabiznisové a technické požiadavky, ktoré sprevá- dzali jeho dizajn a vývoj; 2. pracuje tak, ako je oˇcakávané; 3. môže byt’ naimplementovaný s rovnakou charakteristi- kou. V tejto kapitole je vysvetlené, ˇcoznamenajú pojmy validácia a ve- rifikácia, sú v nej zadefinované testovacie metódy a nachádza sa tu taktiež rozdelenie testov do jednotlivých kategórií.

2.1 Validácia a verifikácia

Tieto dva, na pohl’ad podobné pojmy, bývajú ˇcastozamenené. Aby sme tomu predišli, pod’me si ich zadefinovat’. Organizácia IEEE- SA (Institute of Electrical and Electronics Engineers Standards Asso- ciation) vypracováva globálne štandardy pre široké spektrum prie- myslu, zahrˇnujúceenergetiku, telekomunikácie, prepravu, biome- dicínu, zdravotnú starostlivost’, informaˇcnétechnológie, robotiku, automatizáciu domácností, nanotechnológiu a mnoho d’alších. Nie je formálne autorizovaná žiadnou vládou, ale je to komunita, ktorá každý rok vedie vyše 200 hlasovaní o štandardoch. Je to proces, pri ktorom sa hlasuje, ˇcidané návrhy štandardov sú technicky dôvery- hodné.

5 2. TESTOVANIE SOFTVÉRU

Podl’a štandardu IEEE 610, ktorý je slovník terminológie softvé- rového inžinierstva, sú tieto pojmy definované ako [4]:

• Validácia: proces vyhodnocovania softvéru s ciel’om overe- nia ˇciprodukt danej vývojovej fázy (pozn. autora: napríklad dokumentácia so špecifikáciou) sp´lˇnapodmienky, ktoré boli stanovené na zaˇciatkutejto fázy.

• Verifikácia: proces vyhodnocovania softvéru poˇcasalebo na konci vývojového procesu s ciel’om overenia, ˇcisp´lˇnašpecifi- kované požiadavky.

Zjednodušene, validácia teda overuje, ˇcivytvárame správny pro- dukt (odpovedajúci požiadavkám) a verifikácia, ˇcivytvárame pro- dukt správne (odpovedajúci špecifikácii). Ciel’om týchto dvoch poj- mov je odhalit’ chyby poˇcasvývoja a preukázat’ požadované vlast- nosti, pretože test, ktorý neodhalí nesprávne správanie sa systému, je neúspešný.

2.2 Testovacie metódy

V procese testovania sa dajú použit’ rôzne metódy. Patria do rôz- nych kategórií, z ktorých sa niektoré dajú medzi sebou kombinovat’. Prvou takouto kategóriou je rozdelenie testovania z hl’adiska zdro- jového kódu, kde patria nasledujúce metódy [5]:

• Statická: Je to revízia, kontrola samotného zdrojového kódu. Castoˇ bý- va implicitná, pretože sa nachádza priamo v programovacích nástrojoch alebo textových editoroch na kontrolu štruktúry zdrojového kódu a v kompilátoroch na kontrolu syntaxe ako statická programová analýza. Patria sem nástroje ako PMD, Findbugs, Checkstyle, ale aj revízia kódu (code review).

• Dynamická: Testuje vlastnosti systému poˇcasjeho behu. Môže byt’ vyko- návaná aj vtedy, ak ešte nie je celý softvér naimplementovaný s ciel’om overenia funkˇcnostijednotlivých ˇcastí— modulov.

6 2. TESTOVANIE SOFTVÉRU

Druhá kategória predstavuje rozdelenie metód z hl’adiska prí- stupu k informáciám na [6]:

• Black box (ˇciernaskrinka): Pri tejto metóde nemáme žiadnu znalost’ o tom, ako vyzerá a pracuje vnútro aplikácie. Tester pozná systémovú architek- túru, ale nemá prístup k zdrojovému kódu. Typicky teda in- teraguje s užívatel’ským rozhraním zadávaním vstupov a vy- hodnocovaním výstupov bez toho, aby vedel, ako vstupy pro- gram spracovával. Najväˇcšímivýhodami tejto metódy je, že program môže mat’ akokol’vek vel’a riadkov, tester sa v nich nebude musiet’ zorientovávat’. Je tu aj výhoda jasne defino- vaných užívatel’ských rolí, ked’ testeri nemajú pohl’ad na pro- gram ako vývojár a môže ich byt’ vel’ké množstvo, pretože nemusia vediet’ programovat’. Staˇcí im len znalost’, ako pro- gram pracuje zvonku. Táto metóda má aj nevýhody, ako na- príklad neefektívne testovanie, lebo tester má len limitované poznatky o celej aplikácii a pokrytie validácie programu na- slepo, pretože sa nemôže zamerat’ na konkrétne riadky kódu.

• White box (biela skrinka): Zameriava sa na detailné preskúmanie internej logiky a štruk- túry kódu. Tester potrebuje poznat’ nielen ako program fun- guje, ale aj preˇcotak funguje. Musí mat’ prehl’ad o celej apli- kácii z vonkajšej aj z vnútornej perspektívy. Je to kvôli tomu, aby zistil, ktorá ˇcast’ kódu sa nespráva tak, ako sa má. Me- dzi výhody tejto metódy patrí efektívnejšie otestovanie ap- likácie, pretože tester tým, že pozná kód, vie, na ktorú ˇcast’ programu sa má zamerat’ a aké sú najvhodnejšie dáta. To napomáha tomu, aby pokryl ˇconajväˇcšiuˇcast’ funkcionality scenármi. Náklady na jedného testera sú ale v prípade tejto metódy zvýšené. Už nestaˇcíobyˇcajnýužívatel’ s vedomos- t’ami o tom, ako má program fungovat’, musí mat’ aj znalosti z programovania a analytické myslenie. Dalšouˇ nevýhodou je obtiažnejšie udržiavanie aktuálnosti scenárov.

• Grey box (šedá skrinka): Táto metóda kombinuje benefity tých predošlých. Tester má

7 2. TESTOVANIE SOFTVÉRU

len limitovanú predstavu o tom, ako program interne fun- guje. Na druhej strane má ale prístup k dokumentácii a da- tabáze. Vd’aka tomuto môže pripravit’ a použit’ lepšie testo- vacie dáta a scenáre. Môže ich aj porovnat’ s databázou, ˇcisa v užívatel’skom rozhraní správne prezentujú a naˇcítavajúna- príklad z ˇcíselníkov. Výhodami teda sú jednoduchšie orien- tovanie sa v aplikácii vzhl’adom na prístup k dokumentácii a databáze, detailnejšie a viac cielenejšie testovacie scenáre na kl’úˇcovévlastnosti systému a hlavne napomáha k udržaniu hranice medzi testerom a vývojárom. Možnost’ prístupu ku kódu je limitovaná, a teda nemôžeme skontrolovat’ priamo zdrojový kód, ako je daná funkcionalita naimplementovaná. Takisto aj testovanie každého možného vstupu je nereálne, pretože by zabralo viac ˇcasu,ako je akceptovatel’né. Aj na- priek týmto pár spomenutým nevýhodám sa použitie danej metódy odporúˇcahlavne pri testovaní webových aplikácií. Naopak, neodporúˇcasa pri validácii algoritmu. Kombinácia týchto dvoch kategórií nám ponúkne nasledovné po- stupy [7]: • Statické testovanie typu black box: Ide o revíziu dokumentácie, ktorá môže pochádzat’ z rôz- nych zdrojov, napríklad užívatel’ských štúdií alebo obchod- ných požiadaviek. • Statické testovanie typu white box: Dôkladne sa kontroluje dizajn a kód aplikácie práve vtedy, ked’ je statická, nespustená. • Dynamické testovanie typu black box: Testovanie aplikácie bez znalosti jej zdrojového kódu. Dôraz sa kladie na korektnú transformáciu vstupov na požadované výstupy. • Dynamické testovanie typu white box: Ciel’om tejto kombinácie metód je zistenie chyby v aplikácii poˇcasjej behu a so znalost’ou zdrojového kódu. Tretia kategória rozdel’uje metódy podl’a formy vykonávania na [8]:

8 2. TESTOVANIE SOFTVÉRU

• Manuálne: Ak je test vykonávaný ˇclovekom,kde je potrebný l’udský úsu- dok alebo rôzne prístupy, ktoré nie je potrebné zaznamenat’ a pravidelne opakovat’.

• Automatizované: Vykonávané softvérom, opakované spúšt’anie vel’kého množ- stva testov alebo testov s vel’kým množstvom generovaných dát. Automatizáciu je možné použit’ aj pri preverovaní zá- t’aže systému.

Metódy v tejto kategórii boli vysvetlené len struˇcne.Ked’že auto- matizácia je hlavnou témou tejto diplomovej práce, sú podrobnejšie vysvetlené v nasledujúcej podkapitole (Podkapitola 2.3).

2.3 Manuálne vs. automatizované testovanie

Mnoho l’udí sa môže domnievat’, že na to, aby zaˇcaliautomatizovat’ testy, im staˇcíkúpit’ alebo stiahnut’ obl’úbený automatizaˇcnýnástroj a nahrat’ jednotlivé testy v podobe krokov ich scenárov. Myslia si, že to im zaruˇcímožnost’ spúšt’at’ ich opakovane kedykol’vek. Realita je ale ovel’a odlišnejšia a v praxi to takto nefunguje. Tak ako vývojár musí poznat’ teóriu, ako naprogramovat’ softvér správne a efektívne, tak aj automatizácia si vyžaduje poznat’ tento proces lepšie a hlbšie, ako len zvládnut’ používat’ niektorý nástroj. Pozrime sa najprv na manuálne testovanie. Je to zruˇcnost’, ktorú musí mat’ ˇclovekpracujúci v tomto odbore. Pri overení funkˇcnosti programu existuje neskutoˇcnevel’a možných scenárov, no je na uvá- žení testera, ktoré scenáre sa reálne budú kontrolovat’, aby bola efek- tívne a dostatoˇcnepokrytá validácia funkcionality softvéru. Ja sám som sa pri pohovoroch na testerské pozície stretol s tro- chu netradiˇcnýmiotázkami, ktorých ciel’om bolo overit’, ˇcidisponu- jem touto zruˇcnost’ou. Jednou z nich bola otázka, ako zistím, ktorý z troch vypínaˇcovpred uzavretou miestnost’ou patrí ktorému z troch svetiel v miestnosti, ak sa môžem dovnútra pozriet’ len raz po za- pnutí vypínaˇcov. Riešenie je také, že ˇclovekmusí rozmýšl’at’ aj nad inými vlast- nost’ami svetiel, ako je napríklad teplo. Ak prvý vypínaˇczapneme

9 2. TESTOVANIE SOFTVÉRU na pár minút a potom ho vypneme, d’alší zapneme a tretí necháme vypnutý, ked’ vojdeme do miestnosti, tak hned’ vieme, že druhý vy- pínaˇc,ktorý sme zapli, patrí svetlu, ktoré svieti. Zostáva nám teda priradit’ k svetlám prvý a tretí vypínaˇc. Ak ˇclovekpristupuje k problematike aj z iného pohl’adu, vypí- naˇc,ktorý bol minútu zapnutý, svetlo zohrial. Takže to, ktoré je teplé, bude patrit’ prvému vypínaˇcu. Naopak, automatizované testovanie je tiež zruˇcnost’, ale vel’mi odlišná od manuálneho. Každý jeden scenár, ktorý zvažujeme auto- matizovat’, musí byt’ podrobený dôkladnej analýze, ktorá zistí, ˇcije na to vhodný. Kvalita zautomatizovania ale nie je závislá na kvalite testu [9]. To, ˇcije test vykonávaný jedným, alebo druhým spôsobom, neovplyvˇnujejeho efektivitu ani jeho výstižnost’. Nezáleží na tom, ako dokonale ho zautomatizujeme, pretože ak samotný test niˇcne- overuje, tak aj výsledok po automatizácii, niˇcrýchlejšie neoverí. Au- tomatizáciu ovplyvˇnujeiba to, ˇcije ekonomickejšie nevykonávat’ test manuálne a ako rýchlo sa scenár vyvíja. Je zbytoˇcnéimplementovat’ testy, ak sú spustené len párkrát, pretože ˇcasvenovaný ich napro- gramovaniu by bol ovel’a dlhší ako manuálne overenie.

Obr. 2.1: Keviatov diagram [9]

Na obrázku 2.1 je pomocou Keviatovho diagramu znázornená závislost’ vyššie uvedených vlastností testov. Sú to efektivita, výstiž-

10 2. TESTOVANIE SOFTVÉRU nost’, ekonomickost’ a vývojovost’ scenára. Címˇ je väˇcšiamiera vlast- ností, tým je aj oblast’ nachádzajúca sa medzi spojenými ˇciaramiväˇc- šia, ˇcoznaˇcí,že je lepšia jedna alebo druhá metóda testovania. Clovek,ˇ ktorý vytvára automatizované testy, môže, ale nemusí byt’ samotný tester. Spoloˇcnost’ môže paralelne zamestnávat’ dva tími l’udí, jedni sú testeri a druhí vývojári automatizovaných tes- tov. Clenoviaˇ druhej skupiny nemusia mat’ až takú mieru vedomostí o aplikácií ako testeri, pretože tí im robia podporu. Vytvárajú im sce- náre, starajú sa o ne a pomáhajú im s problémami, ktoré sa môžu vyskytnút’. Tak ako miera kvality testovania závisí od kvality a skúseností testerov, tak aj kvalita automatizácie závisí od zruˇcnostíjej vývojá- rov. Tí musia mat’ k dispozícii nástroj, ktorým budú môct’ ˇconaj- jednoduchšie a najdôkladnejšie pokryt’ verifikáciu aplikácie. Imple- mentácia musí byt’ prehl’adná, aby sa v nej ˇconajrýchlejšie zoriento- val prípadný nový ˇclentímu, ale hlavne, aby údržba scenárov bola ˇconajjednoduchšia. Prípadná zmena v niektorom scenári, ktorá sa musí premietnut’ už aj v zautomatizovanom teste, môže byt’ upra- vená vel’mi rýchlo, no pri nevhodnej štruktúre a procese automati- zácie sa môže stat’ vel’mi nákladnou. Ak sa procesu implementácie automatizovaných testov nebude klást’ dostatoˇcnámiera pozornosti, môže sa stat’, že tento proces sa po ˇcasestane viac nákladnejším.

2.3.1 Kedy a preˇcoje automatizácia vhodná? Automatizované testy môžu ušetrit’ vel’mi vel’a ˇcasu,zdrojov, ale aj nemalé finanˇcnéprostriedky. V nevhodných prípadoch použitia ale môže dôjst’ k opaˇcnémuefektu a nemusí sa vôbec oplatit’. V nasledu- júcich bodoch sú uvedené príklady, kedy je automatizácia vhodnejšia ako manuálne testovanie [9]:

• Nové prostredie na testovanie: Hned’ ako vývojári poskytnú nové prostredie na testovanie, musia všetky regresné testy zverifikovat’ ˇciaplikácia funguje správne. Až potom je možné, aby bola posunutá do d’alšej vývojovej fázy. Na to, aby sme všetky regresné testy vykonali manuálne, potrebujeme v závislosti na ich poˇcteprimeraný

11 2. TESTOVANIE SOFTVÉRU

poˇcettesterov. Ak ale máme tieto regresné scenáre zautoma- tizované už pre predošlú verziu aplikácie, hned’ po dodaní nového prostredia môžu byt’ spustené a vyhodnotené do nie- kol’kých hodín. • Castejšieˇ a poˇcetnejšietestovanie: Azda najväˇcšímbenefitom automatizácie je možnost’ vyko- návat’ viac testov za kratší ˇcasako manuálne a to taktiež zaru- ˇcuje,že sa môžu spúšt’at’ ovel’a ˇcastejšie.Vždy, ked’ je to po- trebné, si ich, napríklad, môže na vyžiadanie nechat’ spustit’ vývojár, aby si overil, ˇcipridanie nového kódu, alebo zmena pôvodného neovplyvnili ostatnú funkˇcnost’ aplikácie. • Nemožnost’ vykonat’ test manuálne: Pri manuálnom testovaní sa testeri zameriavajú na oˇcividné veci, ktoré sú im viditel’né. Ak sa ale na pozadí akcie vyko- náva ešte d’alšia, toto môžu skontrolovat’ iba automatizované testy. Taktiež by, napríklad, bolo nereálne, aby tester vytvoril v rovnakom ˇcase súˇcasne100 zmlúv. Toto sa ale dá docielit’ nástrojmi, ktoré týchto 100 užívatel’ov nasimulujú. • Lepšie využitie zdrojov: Dokola sa opakujúce scenáre, ktoré by mali testeri manuálne otestovat’, je lepšie nahradit’ zautomatizovanými. Testeri sa tak vyhnú nudným scenárom a môžu sa lepšie a hlbšie zame- rat’ na ostatné veci, ako napríklad revalidácii alebo vytvára- niu nových scenárov. Stroje, ktoré by boli inak cez noc neak- tívne, môžu spúšt’at’ testy a pracovat’ „zadarmo“. • Konzistencia pri opakovaní testov: Automatizované testy majú zaruˇcené,že minimálne vstupy sú vždy rovnaké. Výstupy sa môžu líšit’ v závislosti na apli- kácii, ak sa, napríklad, vyskytne dlhšie naˇcítavanieelementu. Majú teda urˇcitúmieru konzistencie, ˇcosa pri manuálnych testoch zaruˇcit’ nedá. Testy sa môžu vykonávat’ aj multiplat- formne, ˇcoopät’ nemôže zaruˇcit’ konzistenciu tých manuál- nych. • Znovupoužitie zautomatizovaných testov: Pri implementácii automatizovaných testov sa urˇcitemno-

12 2. TESTOVANIE SOFTVÉRU

hokrát stretneme s použitím a znovuvyužitím už existujú- ceho kódu. Preto je potrebné, aby štruktúra bola navrhnutá správne a aby kód bol maximálne prehl’adný. Taktiež aj ma- nuálne testy sa ˇcastoopät’ používajú, preto aj u nich je dôle- žité, aby boli spol’ahlivé. V tomto prípade ale dochádza k ove- l’a nižšiemu výskytu opätovného použitia ako pri automati- zácii.

• Kratší ˇcasna nasadenie do produkcie: Ked’ sú testy naimplementované, je možné ich ovel’a rýchlej- šie vyhodnotit’ ako tie manuálne. To nám dáva možnost’ skrá- tit’ d´lžku regresného testovania, a tým pádom aj skoršieho nasadenia do produkcie.

• Zvýšená dôveryhodnost’ výsledkov: Ak sú automatizované testy naimplementované správne a tes- tujú tú funkcionalitu, ktorú majú, zvyšuje to istotu, že všetky, ktoré prebehli správne, potvrdzujú správnost’ aplikácie a ne- vyústia k neoˇcakávanýmchybám, ktoré sa môžu objavit’ v na- sledujúcom životnom štádiu vývoja aplikácie.

2.3.2 Problémy automatizácie Nie každý jeden manuálny test môže byt’ automatizovatel’ný. Ako bolo spomenuté už v porovnaní, každý jeden scenár musí byt’ vel’mi dobre preverený, ˇcije vhodný k automatizácii. Medzi ˇcastéprob- lémy, ktoré sa pri tomto procese vyskytujú a ústia do neúspechu au- tomatizácie, patria nasledovné príklady:

• Nereálne oˇcakávania: V odvetví automatizácie sa v posledných rokoch objavilo mno- ho nástrojov, ktoré sl’ubujú, že práve ony dokážu všetko, sú tie najlepšie a pre ne sa treba rozhodnút’. Manažéri pri výbere ˇcastopodl’ahnú reklame daného nástroja, no ked’ ho automa- tizaˇcnýtím vyskúša, ˇcije pre ich potrebu dostaˇcujúci,je vel’ká pravdepodobnost’, že v mnohých prípadoch bude neposta- ˇcujúci.Je teda nevhodné mysliet’ si, že nástrojom sa bude dat’ úplne všetko zautomatizovat’ [9].

13 2. TESTOVANIE SOFTVÉRU

• Slabá testovacia prax: Ak uvažujeme nad vytvorením automatizaˇcnéhotímu, kto- rý bude implementovat’ existujúce scenáre, ktoré sú vel’mi chabé a už samotné manuálne testy vel’mi t’ažko odhal’ujú chyby a slabiny aplikácie, je nevhodné nad touto možnost’ou premýšl’at’. Lepšie riešenie je dat’ scenáre do poriadku a po- silnit’ verifikáciu programu v tomto smere, pretože: „automa- tizovanie chaosu iba vytvára ešte väˇcšíchaos“ [9].

• Oˇcakávanienájdenia množstva nových chýb: Dobrý test by mal nájst’ chyby už pri prvom spustení. Po oprave tejto chyby sa ale nová nájde s menšou pravdepodob- nost’ou, pretože kroky testu sa nemenia. Preto sa týmto spô- sobom nájde ovel’a menej nových chýb, ktoré sa v aplikácii môžu vyskytnút’ [9].

• Chybný pocit bezpeˇcnosti: Ked’ automatizované testy nenájdu žiadnu chybu, nezname- ná to, že žiadna sa v aplikácii nevyskytuje. Samotné testy môžu byt’ chybné, neúplné alebo sa nemusia zameriavat’ na tú konkrétnu ˇcast’ programu, ktorá chybu obsahuje. Ak sa teda chyba v programe nachádza a zlé testy ju neodhalia, máme falošný pocit správnosti aplikácie a chyby môžu byt’ odhalené, ked’ už bude neskoro [9].

• Údržba automatizovaných testov: Vždy, ked’ sa softvér men, ˇciuž zásadnou zmenou, alebo len menšími zásahmi v rámci vývojového cyklu, na automatizo- vaných testoch sa vždy musí vykonat’ údržba, aby sa zme- nám prispôsobili. Ak ˇcasstrávený údržbou prevyšuje ˇcaspo- trebný na manuálne otestovanie aplikácie, automatizácia je neefektívna a, pravdepodobne, bude zrušená. V mojom tíme je zaužívané, že na údržbu je vyˇclenených20% z každého pracovného dˇna.Na základe toho sa potom vypoˇcítavajúod- hady, kol’ko pracovných dní zaberie zautomatizovanie no- vých scenárov [9].

• Technické problémy: Všetky komerˇcnénástroje na automatizáciu sú tiež len apli-

14 2. TESTOVANIE SOFTVÉRU

kácie, ktoré samy môžu obsahovat’ skryté chyby. Tie sa sna- žia byt’ opravované v aktualizáciách, no opät’ sa môžu vy- skytnút’ nové chyby. Dalšímˇ príkladom je aj nekompatibi- lita nástroja s vyvíjanou aplikáciou alebo s programami tre- tej strany, ktoré môžu byt’ nevyhnutné k používaniu v rámci automatizácie [9].

• Organizaˇcnéproblémy: Ked’že automatizácia nie je triviálny proces, jedným z mož- ných problémov, ktoré sa môžu vyskytnút’, je problém orga- nizácie. Vedenie spoloˇcnostimusí automatizáciu plne podpo- rovat’ a musí byt’ zakomponovaná aj do koreˇnovorganizácie. Musí jej byt’ vyˇclenenýdostatoˇcnýˇcasna výber vhodného ná- stroja, na experimentovanie a uˇceniesa novým veciam [9].

• Nestabilný dizajn: Niektoré aplikácie môžu mat’ vel’mi nestabilný dizajn, na- príklad tie, ktoré využívajú dáta získavané v reálnom ˇcase. Pokial’ nemôžeme zaistit’ simulovanie výpoˇctovna základe vstupov, automatizácia takejto aplikácie bude vel’mi obtiažna, pretože nepoznáme výstupy, voˇciktorým má byt’ aplikácia kontrolovaná. Ak nepoznáme testovací environment a dáta aplikácie, automatizácia bude tiež takmer nereálna. Záleží aj od miery konfigurácie produktu, na základe ktorej sa mení dizajn. Ak je vel’mi premenlivý, môžeme nasimulovat’ nie- ktoré konfigurácie, ale naimplementovanie všetkých možnos- tí by boli vel’mi nereálne, pretože by to vyústilo v komplexný projekt, ktorý bude mat’ vel’kú mieru údržby [10].

• Neskúsení testeri: Ak nie sú vývojári automatizovaných testov dostatoˇcneobo- známení s aplikáciou, nie je vel’mi efektívne ich využitie na projekte, pretože testy, ktoré vytvoria, budú len také dobré, akí sú dobrí ich tvorcovia. Taktiež noví ˇclenoviatímu by mali byt’ najskôr manuálni testeri, pretože je viac pravdepodobné, že budú robit’ rovnaké chyby ako užívatelia. Automatizácia by mala byt’ vyhradená pre expertov [10].

15 2. TESTOVANIE SOFTVÉRU

• Doˇcasnítesteri: Pokial’ je plánované do procesu automatizácie nasadit’ nie- ktorých l’udí iba doˇcasne,nie je to dobrý nápad, pretože po- ˇciatoˇcnáinvestícia v podobe školení a ich tréningu bude zby- toˇcná.Ovel’a lepšie je použit’ ich ako manuálnych testerov, priˇcomtrvalých zamestnancov zaradíme do tvorby automa- tizácie [10].

• Nepostaˇcujúciˇcasa zdroje: Ak potrebný ˇcasna manuálnu verifikáciu aplikácie prevyšuje dostupný ˇcas,alebo nie je dostatok zdrojov, netreba oˇcakávat’, že automatizácia pomôže. Poˇciatoˇcnáinvestícia na plánova- nie, školenie a implementáciu zaberie z krátkodobého hl’a- diska viac ˇcasu,ako môže ušetrit’ [10].

2.3.3 Údržba kódu a testov Tak ako sa vývoj aplikácie nezaobíde bez dobrého implementaˇcného návrhu, tak ani automatizované testy sa nezaobídu bez dobrej štruk- túry projektu v ktorom sa vytvárajú a bez jednoduchého a prehl’ad- ného kódu. Nasledujúce príklady opisujú, na ˇcoje potrebné mysliet’ už od zaˇciatkuautomatizácie [10]:

• Úrdžba aplikácie je vykonávaná nepretržite: Ked’že vyvíjaný softvér sa stále mení, pribúda nová a mení sa už hotová funkcionalita, je potrebné mysliet’ na alokova- nie dostatoˇcnéhoˇcasuna údržbu existujúcich testov. Bez nej by sa po zmene funkcionality automatizované testy stali bez- významné riadky kódu, ktoré by niˇcnetestovali a ˇcasstrá- vený ich vytváraním by bol zbytoˇcný.

• Zmeny musia byt’ vopred známe: Potreba informovania o zmenách vopred je vel’mi nevyhnut- ná. Ak sa zmeny zistia poˇcaspriebehu testov, nemusí íst’ nut- ne o novú funkcionalitu, ale môže íst’ o chybu. Preto je po- trebné konzultovat’ tieto zmeny s kompetentnými osobami ˇconajskôr, aby sme si boli istí, že testy sú na novú alebo zme- nenú funkcionalitu pripravené.

16 2. TESTOVANIE SOFTVÉRU

• Krížová referencia testovacích scenárov: Pre lepšiu štruktúru a prehl’ad je potrebné používat’ konzis- tentné názvy tried a metód pre prípad, že by sme k nim potre- bovali pristupovat’ a využívat’ ich v rámci d’alšieho scenára. Potom sa v prípade zmeny jednej ˇcastibudú dat’ rýchlo vy- hl’adat’ jej referencie a môžu byt’ upravené d’alšie scenáre.

• Plánovanie v rámci prevencie výskytu nových chýb: Nie je dôležité iba vediet’ l’ahko nájst’ a vykonat’ zmeny v kó- de, ale aj zaistit’, že zmenami sa neovplyvnia aj d’alšie testy. Ak by sme, napríklad, naimplementovali identifikáciu ele- mentov jednotlivých formulárov prostredníctvom súradnico- vého systému, pri zmene formulára by sa tieto súradnice, pravdepodobne, zmenili a už by pozície elementov nesúhla- sili. Je potrebné mysliet’ na ˇconajvšeobecnejší návrh, ktorý by v prípade zmeny nevyústil k nefunkˇcnostimnožstva d’alších testov.

Princípy a skúsenosti, ktoré boli vyššie popísané, by mali jasne definovat’, kedy je automatizácia výhodnejšia oproti manuálnemu testovaniu.

2.4 Testovanie v rámci životného cyklu softvéru

Podl’a ISTQB výkladového slovníka [11] softvérový životný cyklus je: „Casovᡠperióda, ktorá zaˇcínavtedy, ked’ je softvérový produkt zapo- ˇcatý,a konˇcí,ked’ softvér už viac nie je k používaniu dostupný. Softvérový životný cyklus typicky zahrˇnujekoncepˇcnúfázu, štádium definovania po- žiadaviek, dizajnovú fázu, implementaˇcnúfázu, testovaciu fázu, inštalaˇcnú a skúšobnú fázu, operaˇcnúa udržiavaciu fázu a obˇcasvýsluhovú fázu. Tieto štádiá sa môžu prekrývat’ alebo byt’ vykonávané iteratívne.“ Aby sme mohli garantovat’ funkˇcnýsoftvér, ktorý bol vyvinutý na základe poˇciatoˇcnýchpožiadaviek, musíme pochopit’, že testova- nie musí byt’ zaintegrované do životného cyklu softvéru. Toto platí vždy, ˇciuž ide o cyklus sekvenˇcný,inkrementálny, iteratívny alebo špirálový. Vždy musí byt’ dodržané striktné definovanie a dodržia- vanie testovacích a ostatných procesov. Pozrime sa na to, ako fungujú nasledovné dva príklady.

17 2. TESTOVANIE SOFTVÉRU

Prvý je model sekvenˇcnéhoživotného cyklu. Kl’úˇcovýpredpo- klad v tomto prípade je, že požiadavky sú definované v zaˇciatkoch projektu a následne sú zmeny týchto požiadaviek po zvyšok vývoja limitované. Ked’že týchto požiadaviek sa vývoj musí držat’, nezá- vislý testovací tím môže použit’ analýzu na vytvorenie ˇconajlepšej testovacej stratégie. Ak by poˇcastohoto štádia zistili nezrovnalosti v požiadavkách, upozornili by na to a analytici by vykonali nápravu. Konajú teda preventívne, chyby aplikácie sa objavia až pri d’alšej fáze, ked’ zaˇcnúsystémové testy. Druhý model predstavuje inkrementálny životný cyklus, v kto- rom môžeme použit’ jednu z agilných metodológií, napríklad Scrum. V tomto prípade testerský tím nemusí nikdy dostat’ kompletný zo- znam požiadaviek. Namiesto toho obdržia zoznam požiadaviek na zaˇciatkukaždého sprintu, ktorý trvá typicky 4-6 týždˇnov. Vždy sa teda zamerajú na urˇcitúoblast’, ktorú budú poˇcassprintu testovat’. Chyby v aplikácii sú teda schopní detekovat’ vel’mi skoro, už na konci prvého cyklu. Nezáleží na tom, aký životný cyklus použijeme, no hlavne to platí pre agilný vývoj, je potrebné mat’ dobre zvládnutý manažment zmien. Ak sa zavedie nejaká zmena, je potrebné aby, sa premietla aj do testov.

2.4.1 V-model Na obrázku 2.1 je znázornený diagram rozdelenia jednotlivých tes- tovacích vrstiev systému poˇcasjeho vývoja. Tento model sa používa pri sekvenˇcnomživotnom cykle. Ked’že má tvar písmena V, dostal aj príznaˇcnýnázov. Môžeme na ˇnomvidiet’, že testovací tím sa podiel’a na projekte už od jeho zaˇciatku.Jednotlivé vrstvy modelu si môžeme rozdelit’ nasledovne [11]:

• Testovanie súˇciastok(jednotkový test): Verifikuje funkcionalitu špecifickej, malej ˇcastikódu na úrov- ni metód, tried, objektov. Zameriava sa na testovanie týchto ˇcastíz pohl’adu izolovaných komponentov. Je to typ testov, ktoré sú obvykle písané samotnými programátormi v rámci práce na kóde, aby sa uistili, že požadovaná funkcia pracuje tak, ako má. Jedna funkcionalita môže mat’ viacero testov

18 2. TESTOVANIE SOFTVÉRU

Obr. 2.2: V-model

z dôvodu zachytenia ˇconajviac hraniˇcnýchprípadov. Samo o sebe nemôže zverifikovat’ kompletnú funkcionalitu soft- véru, ale je používané na uistenie, že jednotlivé komponenty pracujú nezávisle. Ked’že ich väˇcšinouvykonávajú develo- peri, chyby sa nemusia reportovat’, ale môžu byt’ hned’ od- stránené.

• Integraˇcnétestovanie: Je fáza, v ktorej sa spájajú jednotlivé moduly a testujú sa ako skupina, ˇcinavzájom správne fungujú. Jej ciel’om je zverifi- kovat’ funkˇcnost’, výkonnost’ a spol’ahlivost’ aplikácie. Odha- l’uje chyby v rozhraniach, zlú komunikáciu medzi modulmi, operaˇcnýmsystémom a modulmi, hardvérom alebo rozhra- niami jednotlivých systémov.

• Systémové testovanie: Overuje, ˇcisystém funguje ako celok a správne pracuje so sys- témom. Verifikuje aplikáciu z pohl’adu zákazníka podl’a pri- pravených scenárov. Simulujú sa nimi jednotlivé kroky, ktoré môžu v praxi nastat’. Obvykle sa vykonávajú vo viacerých

19 2. TESTOVANIE SOFTVÉRU

cykloch, priˇcomchyby, ktoré boli odhalené, sa vždy zadajú do reportovacieho nástroja a v d’alšom cykle sa testujú opät’, ˇciboli správne opravené. Bez tejto úrovne testov by sa neza- obišiel žiadny vývoj a na ich realizáciu by sa malo mysliet’ ˇco najskôr. Výsledky týchto testov slúžia ako výstupná kontrola pred uvol’nením softvéru zákazníkovi.

• Akceptaˇcnétestovanie: Je proces, pri ktorom sa kladie väˇcšídôraz na to, ˇciapliká- cia funguje podl’a zákazníkových predstáv a umožˇnujemu vykonávat’ požadované operácie, ako na odhal’ovanie chýb. Klient overí a zdokumentuje výsledky kontrol. Ak boli úspeš- né, je pripravený vyvinutý softvér akceptovat’.

2.4.2 Typy testov Pre dôkladné overenie plnej funkˇcnosticelého systému, ktorý je vy- vinutý s ˇconajmenšou možnou pravdepodobnost’ou vyskytnutia sa chýb u zákazníka, alebo, napríklad, aj nezvládaniu jej behu na ur- ˇcitomsystéme, sa v rámci testovacích vrstiev vykonáva ovel’a viac podrobnejších a špecifickejších testov, ako napríklad [12]:

• Smoke test: Skladá sa z jednoduchých testov, ktoré overia základnú fun- kcionalitu aplikácie, funkˇcnost’ webových služieb alebo ko- munikáciu s databázou, aby sa zistilo, ˇcije pripravená na d’alšie, h´lbkové testovanie. Jeho beh má byt’ ˇconajrýchlejší a obvykle je automatizovaný. To umožˇnujejeho spustenie au- tomaticky, hned’ po nasadení novej verzie aplikácie. Na zá- klade jeho výsledkov sa môže bud’ pokraˇcovat’ v h´lbkovom testovaní, alebo sa musí príˇcinapádu testu odstránit’.

• Regresný test: Odhal’uje chyby, ktoré mohli nastat’ po naimplementovaní novej funkcionality. Týmito testami sa overí, ˇcistará funkci- onalita zostala bez zmeny a funguje rovnako. Kontroluje sa nimi taktiež to, ˇciboli korektne opravené staré chyby, alebo sa náhodou opät’ neobjavili. H´lbka týchto testov záleží na fáze vývoja a na vel’kosti zásahu do vyvíjaného softvéru. Môžu

20 2. TESTOVANIE SOFTVÉRU

byt’ vykonávané vo viacerých cykloch v rámci jedného vý- voja alebo sprintu. Preto sa ˇcastoautomatizujú, aby sa skrá- til ˇcasich behu, a teda celého ich vyhodnotenia, a môžu byt’ spustené tak ˇcasto,ako je potrebné.

• Inkrementálny integraˇcnýtest: Vykonáva sa po tom, ako je k už existujúcim a otestovaným modulom pridaný d’alší.

• Test obnovy: Úˇcelomtohoto testu je zistenie, ˇcije vôbec možné obnovit’ aplikáciu po páde systému a aká dlhá doba je na to potrebná. Pád programu môže nastat’, napríklad, po výpadku elektriny, hardvérovej chybe alebo d’alšej neoˇcakávanejˇcinnosti.

• Bezpeˇcnostnýtest: Má za úlohu odhalit’ prípadné bezpeˇcnostnédiery v systéme, ktoré by mohli narušitelia alebo užívatelia zneužit’ k získa- niu citlivých dát. Každý systém musí sp´lˇnat’ šest’ základných bezpeˇcnostnýchkonceptov, ktorými sú: dôvernost’, celistvost’, autentifikácia, autorizácia, dostupnost’ a nepopieratel’nost’.

• Zát’ažový test: Je zameraný na škálovatel’nost’ aplikácie. Pri tomto teste pro- gram pracuje s vel’kými objemami dát alebo s vel’kým množ- stvom užívatel’ov, priˇcomsa zát’až na systém postupne zvy- šuje, až dôjde k pádu aplikácie alebo jej zahlteniu. Testujeme, akú zát’až už aplikácia nevydrží.

• Výkonnostný test: Vykonáva sa na zistenie, ako systém pracuje vzhl’adom na odozvy a stabilitu pod urˇcitouzát’ažou. Generuje sa vel’ké množstvo požiadaviek a sleduje sa, ako je ovplyvnený výkon aplikácie. Tá musí byt’ po urˇcitúdobu pod pretrvávajúcou zát’ažou, priˇcomby nemalo dôjst’ k jej pádu. Z dát je možné vyˇcítat’, ako rýchlo je systém schopný odpovedat’ na požia- davky, a to potom vedie k nájdeniu úzkeho miesta aplikácie. Následne sa môže vykonat’ náprava.

21 2. TESTOVANIE SOFTVÉRU

• Test kompatibility: Castouˇ chybou aplikácií sa stáva nekompatibilita s iným soft- vérom, operaˇcnýmsystémom alebo ciel’ovým prostredím, kto- ré sa môže vel’mi líšit’ od toho, na ktorom sa produkt vy- víja. Toto môže nastat’, napríklad, vtedy, ked’ developeri vy- víjajú a testujú softvér na najnovšom prostredí. To ale nemu- sia všetci užívatelia používat’, pretože to ich pôvodné je za- staralé. • Inštalaˇcnýtest: Overuje, ˇcije systém na zákazníkovom hardvéri korektne na- inštalovaný a plne funkˇcný. • Alfa test: Vykonáva sa pred koncom vývoja aplikácie a uskutoˇcˇnujesa na strane dodávatel’a. Vývojári a analytici sledujú užívatel’ov, sú to obvykle testeri z rovnakej spoloˇcnosti,pri jej používaní a robia si pri tom poznámky, ˇcoby bolo ešte vhodné vylepšit’. Je to koneˇcnétestovanie, ktoré vedie k internému akceptova- niu tejto aplikácie. • Beta test: Nastáva po alfa teste a môže sa považovat’ za formu exter- ného akceptovania aplikácie. Táto verzia je poskytnutá urˇcitej limitovanej skupine užívatel’ov na strane zákazníka a preverí fungovanie systému v skutoˇcnýchpodmienkach. Ciel’om tých- to užívatel’ov je poskytnút’ spätnú väzbu, priˇcomby ich pri- pomienky ešte mohli pozmenit’ niektoré nedostatky apliká- cie. • Dlhodobý test: Odhal’uje chyby aplikácie až po jej dlhodobom používaní. Zákazník má obvykle k dispozícii nástroj, do ktorého môže chyby zadávat’ a vývojári ich môžu v rámci dlhodobej údržby opravit’.

2.4.3 Funkˇcnétestovanie Funkˇcnétestovanie je v ISTQB slovníku [13] definované ako: „Tes- tovanie založené na analýze špecifikácie fukcionality komponetu alebo sys-

22 2. TESTOVANIE SOFTVÉRU tému.“. Ide o testovanie typu black box, pretože testujeme aplikáciu z pohl’adu vonkajšieho rozhrania. Funkˇcnétesty môžu zahrˇnovat’ rôzne typy testov v rôznych fázach vývoja a majú na výslednú bez- poruchovost’ systému významný vplyv. Najˇcastejšiesa funkˇcnétesty využívajú v integraˇcných,systémových a akceptaˇcnýchúrovniach testovania a ide hlavne o smoke a regresné testy.

23 3 Nástroje na automatizáciu funkˇcnýchtestov

Na svete existuje mnoho nástrojov, ktoré nám umožˇnujúautomati- zovat’ funkˇcnétesty. Pri výbere toho správneho musíme vziat’ do úvahy niekol’ko faktorov. V prvom rade si musíme definovat’, akým typom je naša aplikácia. Firma EmbedIT sa zaoberá vytváraním kl’úˇcovýchaplikácií pre všetky spoloˇcnostiskupiny Home Credit a Air Bank, ktorých hlav- nou obchodnou ˇcinnost’ou je poskytovanie finanˇcnýchproduktov v 10 krajinách sveta s viac ako 140 000 000 transakciami za jeden deˇn[14]. Náš tým sa procesne podiel’a na vývoji automatizovaných testov. Primárnymi produktmi, ktorých testy sú automatizované, sú webové a desktopové aplikácie. Zaoberat’ sa teda budeme týmito dvomi typmi aplikácií. Medzi d’alšie faktory, ktoré ovplyvˇnujúvýber vhodného automa- tizaˇcnéhonástroja, patrí finanˇcnánároˇcnost’, ktorá predstavuje cenu tohoto nástroja, prípadne d’alších, doplˇnujúcich,ktoré sú potrebné k plnej funkˇcnostiautomatizaˇcnéhonástroja. Poˇciatoˇcnéˇcasovéa or- ganizaˇcnénáklady na vytvorenie automatizácie, užívatel’ská príveti- vost’ nástroja a aj podpora programovacieho jazyka tu taktiež urˇcite patria. V tejto kapitole sa budeme zaoberat’ predstavením troch nástro- jov. Selenium a White sú aktuálne používané v procese automati- zácie vo firme EmbedIT a Ranorex je možný kandidát na prevzatie tejto úlohy. Nástroj Selenium umožˇnujetestovanie webových apli- kácií, White podporuje testovanie desktopových aplikácií a Ranorex podporuje testovanie oboch, webových aj desktopových aplikácií.

3.1 Selenium

V roku 2004 si mladý programátor, Jason Huggins, zo spoloˇcnosti ThoughtWorks uvedomil, že ˇcas,ktorý trávil vykonávaním tých is- tých manuálnych testov po každej zmene, sa dá využit’ ovel’a lepšie. Preto vytvoril javaskriptovú knižnicu, ktorá dokázala vykonávat’ in- terakcie s webovou stránkou, ˇcomu umožnilo spúšt’at’ a opakovat’ dokola tie isté testy na viacerých prehliadaˇcoch.Táto knižnica do- stala názov Selenium Core, ktorá predstavuje všetku dostupnú fun-

24 3. NÁSTROJENAAUTOMATIZÁCIUFUNKCNÝCHTESTOVˇ kcionalitu servera Selenium Remore Control (RC) a integrovaného vývojového prostredia Selenium IDE. Selenium RC bolo prelomové, pretože žiadny iný produkt nebol schopný poskytnút’ ovládanie pre- hliadaˇcaprogramovacím jazykom vlastného výberu. Pretože tento nástroj bol založený na jazyku JavaScript, nebolo možné využit’ všetky požadované funkcie, kvôli bezpeˇcnostnýmli- mitáciám Javaskriptu prehliadaˇcov. Postupom ˇcasusa webové apli- kácie stávali ovel’a silnejšie, pretože využívali všetky špeciálne vlast- nosti, ktoré prehliadaˇceposkytovali. Preto mal tento nástroj niekol’ko chýb a bolo potrebné ho vylepšit’. Odvážny inžinier spoloˇcnostiGoogle, Simon Stewart, sa v roku 2006 pustil do projektu s názvom WebDriver. Bolo to dôsledkom toho, že Google využíval k automatizácii práve Selenium, no museli vymýšl’at’ rôzne obchádzania problémov, aby dosiahli požadovanú funkcionalitu. Preto chcel vytvorit’ testovací nástroj, ktorý by komu- nikoval priamo s prehliadaˇcompoužívaním prirodzenej metódy pre prehliadaˇca operaˇcnýsystém. Tým by sa vyhol obmedzeniam a vy- p´lˇnalmedzery, ktoré Selenium malo. O dva roky neskôr sa udiala vel’ká vec. Selenium, ktoré malo ma- sívnu komunitu a komerˇcnúpodporu a WebDriver, nástroj budúc- nosti, sa zlúˇcilia vytvorili tak základ pre budúcnost’ automatizácie testov webových aplikácií. Ked’že licencia je vol’ná, je možné tento nástroj vylepšovat’ a vol’ne používat’ [15].

3.1.1 Selenium Remote Control (RC) Niekedy je tento nástroj oznaˇcovanýaj ako Selenium 1, ked’že vytvo- ril základ pre Selenium WebDriver (Selenium 2). Stále je aktívne pod- porovaný, ale len v rámci údržby, pretože nový vývoj bol zastavený. Stále však poskytuje ˇcast’ funkcionality, ktorou Selenium 2 nedispo- nuje, ako, napríklad, podpora starších prehliadaˇcov. Pri implemen- tácii testov môžeme použit’ jazyky, ako, napríklad, , JavaScript, Ruby, PHP, Python, Perl a C#. Tvoria ho dva komponenty, ktorými sú:

• Selenium Server: Spúšt’a a zatvára prehliadaˇce,interpretuje a spúšt’a seleniov- ské príkazy prichádzajúce z testovacieho programu a slúži

25 3. NÁSTROJENAAUTOMATIZÁCIUFUNKCNÝCHTESTOVˇ

ako HTTP proxy (zástupca), zachytávajúci a verifikujúci HTTP správy vymieˇnanémedzi prehliadaˇcoma testovanou apliká- ciou.

• Klientské knižnice: Poskytujú rozhranie medzi Selenium RC servrom a progra- movacím jazykom.

Obrázok 3.1 zobrazuje zjednodušenú architektonickú schému.

Obr. 3.1: Selenium RC [15]

Ked’že Selenium RC server je jednoduchý Java .jar súbor, nie je potrebné ho inštalovat’, staˇcíiba stiahnut’ zip súbor z internetu a roz- balit’ ho do požadovaného adresára. Jednotlivé klientské knižnice pre konkrétny jazyk sú tiež dostupné k stiahnutiu. Predtým ako spustíme testy, je potrebné server naštartovat’. To vykonáme prostredníctvom príkazového riadku, ked’ nad adresá- rom, kde sa server nachádza, zavoláme príkaz java -jar selenium-server- standalone-<ˇcísloverzie>.jar.

26 3. NÁSTROJENAAUTOMATIZÁCIUFUNKCNÝCHTESTOVˇ

Potrebné je aj stiahnutie niektorého testovacieho frameworku, a- ko, napríklad, JUnit alebo TestNG pre Java a NUnit pre .NET, ak vy- užívate jeden z týchto dvoch jazykov. Na zaˇciatku testu si musíme inicializovat’ prehliadaˇcpomocou parametrov host, port, browser a url. Záleží vždy na danom jazyku, aká metóda sa na inicializáciu volá. Ked’ máme prehliadaˇcnainicia- lizovaný a priradený nejakej premennej, tak nad premennou voláme seleniovské príkazy, ako sú, napríklad, getText, type alebo click. Pri vyváraní testov môžeme využívat’ aj iterácie a podmienené príkazy.

Obr. 3.2: Ukážka testu v jazyku Java [15]

Na základe priebehu testu sú po jeho dobehnutí vytvorené re- porty. Z nich môžeme vyvodit’, ˇcitest dobehol správne.

3.1.2 Selenium IDE Pri tvorbe automatizovaných testov môžeme využit’ nástroj Selenium IDE (Integrated Development Environment). Ide o doplnok pre pre- hliadaˇcFirefox, ktorý slúži na samotné automatizovanie a taktiež ako základ pre nauˇceniesa seleniovských príkazov. Obsahuje kontextové menu, v ktorom si najprv vyberieme element z aktuálnej stránky v prehliadaˇcia potom k nemu priradíme príkaz vybratím z mož- ností, ktoré daný element ponúka. Pri nahrávaní scenára sa každá užívatel’ská akcia uloží ako troj- ica:

27 3. NÁSTROJENAAUTOMATIZÁCIUFUNKCNÝCHTESTOVˇ

• Príkaz (command): akcia, ktorá sa má vykonat’ • Ciel’ (target): identifikácia elementu, pre ktorý sa má daný príkaz vykonat’ • Hodnota (value): je nastavená príkazom do ciel’a, môže byt’ aj prázdna.

Obr. 3.3: Ukážka testu v Selenium IDE [15]

Každý element obsahuje vlastný zoznam príkazov, ktoré na ˇnom môžu byt’ vykonané. Spolu tvoria celý testovací jazyk a sú rozdelené do troch skupín: • Akcie (actions): príkazy, ktoré manipulujú so stavom apliká- cie. Vykonávajú operácie, ako, napríklad, klik na odkaz, vý- ber možnosti a d’alšie. Ak sa daná akcia nevykoná, test skonˇcí chybou.

28 3. NÁSTROJENAAUTOMATIZÁCIUFUNKCNÝCHTESTOVˇ

• Prístupy (accessors): skúmajú stav aplikácie a ukladajú vý- sledky do premenných. Používajú sa aj na automatické ge- nerovanie overovaní.

• Overovania (assertions): sú nieˇcoako prístupy, ale verifikujú, že aktuálny stav aplikácie zodpovedá stavu oˇcakávanému. Môžu byt’ použité v troch módoch: over, zverifikuj, poˇckaj. Ak by sme ich aplikovali na text, vyzerali by ako over text, zverifikuj text a poˇckajna text.

Obrázok 3.3 zobrazuje jednotlivé kroky testu s akciami, ktoré sa majú vykonat’. Najprv si prehliadaˇcotvorí stránku www.google.com, potom do vyhl’adávania napíše text „selenium IDE rocks!“, klikne na tlaˇcítkovyhl’adat’, klikne na link, d’alší link a overí, ˇcisa na stránke nachádza text: „I think record playback is a wonderful thing“. Selenium IDE môžeme použit’ na vytváranie automatizovaných testov a samotné spúšt’anie testov môžeme vykonávat’ na nástroji Selenium RC. Pre tento úˇcelje v paneli nástrojov možnost’ File -> Export Text case, ktorý nám daný text vyexportuje, no ešte predtým je potrebné si vybrat’ nami požadovaný programovací jazyk. Medzi hlavné nevýhody tohoto nástroja patrí možnost’ jeho pri- dania iba do prehliadaˇcaFirefox. Vytvorené testy ale môžu byt’ ná- sledne spúšt’ané aj na iných prehliadaˇcochprostredníctvom príkazo- vého riadku. Dalšouˇ nevýhodou je jeho jednoduchost’ a malý poˇcet príkazov, ktoré môžu byt’ použité. Ak by sme chceli vytvárat’ zlo- žitejšie testy s použitím, napríklad, podmienok alebo cyklov, nie je to možné. Takisto nie je možné odstránit’ duplicitu v kóde, pretože každý test si vytvára nové kroky a nepoužíva už vytvorené. Vd’aka týmto nedostatkom je vhodné jeho použitie iba na jedno- duché testy a ako prototypovací nástroj, v ktorom sa môžeme nauˇcit’ základy, ako, napríklad, seleniovské príkazy.

3.1.3 Selenium Grid Ked’ sme úspešne vytvorili automatizované testy, prichádza na rad ich spúšt’anie. Jedným z riešení je použitie nástroja Selenium Grid. Ten umožˇnujespúšt’at’ testy na rôznych strojoch s použitím rôznych prehliadaˇcovparalelne. Na jeho použitie sú dva hlavné dôvody:

29 3. NÁSTROJENAAUTOMATIZÁCIUFUNKCNÝCHTESTOVˇ

• spúšt’anie testov voˇciviacerým prehliadaˇcom,rôznym ver- ziám prehliadaˇcova prehliadaˇcovbežiacich na rôznych ope- raˇcnýchsystémoch

• skrátenie ˇcasuvykonávania testov

Obr. 3.4: Schéma fungovania nástroja Selenium Grid [16]

Ak by sme teda využívali na testovanie 4 poˇcítaˇcealebo virtuálne stroje, pri poˇcte100 testov by sa ˇcasich behu znížil na štvrtinu. Toto môže byt’ užitoˇcnéhlavne pri agilnom vývoji, kedy potrebujeme vy- konat’ vel’ké množstvo testov v ˇconajkratšom ˇcase. Selenium Grid sa skladá z jedného centrálneho uzla, do ktorého vstupujú d’alšie uzly. Centrálny uzol získava test a informácie, na

30 3. NÁSTROJENAAUTOMATIZÁCIUFUNKCNÝCHTESTOVˇ

ktorom prehliadaˇcia platforme má daný test bežat’. Vie konfiguráciu každého uzla, ktorý bol zaregistrovaný do centrálneho a na základe danej informácie vyberie ten, ktorý je dostupný a má testom poža- dovanú konfiguráciu. Po tom, ako bol uzol vybratý, sú seleniovské príkazy inicializované testom zaslané do centrálneho uzla, ktorý ich odošle na uzol, ktorý bol testu priradený. Aktuálne sa používa verzia 2.0, ktorá je dost’ odlišná od prvej. V tej novšej bol Selenium Grid zlúˇcenýso Selenium RC serverom. Vd’aka tomu je teraz potrebné stiahnut’ si iba samotný .jar súbor, ktorý obsahuje oba nástroje, Selenium RC server a Selenium Grid.

3.1.4 Selenium WebDriver Nástroj Selenium 2.0 na rozdiel od prvej verzie obsahuje integrované WebDriver API (Application Program Interface), ktoré bolo navr- hnuté tak, aby poskytovalo jednoduchšie a struˇcnejšieprogramova- cie rozhranie, a aby taktiež odstránilo niektoré obmedzenia, ktoré ob- sahovalo Selenium RC API. Preto je aj nazývané Selenium WebDriver. Touto integráciou sa dosiahla lepšia podpora dynamických webo- vých stránok, na ktorých sa môžu bez ich obnovenia menit’ elementy. Jeho ciel’om je poskytnút’ dobre navrhnuté a objektovo orientované API, ktoré poskytuje vylepšenú podporu pre moderné, pokroˇcilétes- tovanie. Práve tento nástroj je používaný vo firme EmbedIT a slúži na automatizáciu testov webových aplikácií. Selenium WebDriver vytvára priame volania do prehliadaˇcapou- žitím natívnej podpory každého z nich. To, ako sú tieto priame vola- nia vytvárané a funkcie, aké podporujú, závisí od použitého prehlia- daˇca.Na rozdiel od Selenium 2.0, Selenium RC pracoval s každým prehliadaˇcomrovnakým spôsobom. Po naˇcítaníprehliadaˇcaboli do neho vložené javascriptové funkcie a potom Selenium RC použil svoj k riadeniu testov v prehliadaˇci. Selenium Server môžeme, ale aj nemusíme použit’. Záleží to len od toho, ako chceme Selenium WebDriver aplikovat’. Ak budeme vy- užívat’ iba WebDriver API, tak server nie je potrebný. Toto platí aj v prípade, že prehliadaˇca testy pobežia na rovnakom stroji a testy budú využívat’ iba WebDriver API, pretože spustí prehliadaˇcna- priamo. Prípady, v ktorých je naopak Selenium Server potrebné po- užit’, nastanú, ak:

31 3. NÁSTROJENAAUTOMATIZÁCIUFUNKCNÝCHTESTOVˇ

• využívame Selenium Grid na distribuovanie testov nad poˇcí- taˇcmialebo virtuálnymi strojmi;

• chceme vytvorit’ pripojenie na vzdialený stroj, ktorý má inú verziu prehliadaˇcaako ten náš;

• nepoužívame Java väzby, napríklad, pri jazykoch Python, C# alebo Ruby a chceli by sme použit’ HtmlUnit Driver.

Prvý krok, ktorý musíme vykonat’, ak chceme na automatizáciu našich testov používat’ Selenium WebDriver, je jeho pridanie do pro- jektu. Spôsob pridania záleží na jazyku, v ktorom projekt programu- jeme. Ak používame jazyk Java, staˇcípridat’ závislost’ do náležitého pom.xml súboru. Maven potom za nás vykoná stiahnutie všetkých závislostí. V tejto pridanej závislosti si definujeme aj verziu nástroja Selenium, ktorá bude stiahnutá.

Obr. 3.5: Pridanie závislosti do pom.xml [15]

Ak je programovacím jazykom C#, musíme z internetu stiahnut’ .zip súbor s .dll súbormi, ktoré naimportujeme do projektu. Pre ja- zyky Python a Ruby pridáme Selenium cez príkazový riadok, no ak použijeme jazyk PHP alebo Perl, je potrebné nájst’ postup prida- nia v dokumentácii tretích strán, pretože oficiálne nie sú zverejnené. Ked’ máme projekt nastavený, môžeme zaˇcat’ s vytváraním automa- tizovaných testov.

32 3. NÁSTROJENAAUTOMATIZÁCIUFUNKCNÝCHTESTOVˇ

3.1.4.1 Inštancia prehliadaˇca Jedna z prvých funkcií, ktorú pri programovaní testov použijeme, je vytvorenie inštancie prehliadaˇca.Znovu záleží na type prehliadaˇca, aký konštruktor použijeme:

• HtmlUnit Driver: Je aktuálne najrýchlejšia a najodl’ahˇcenejšiaimplementácia nástroja WebDriver. Je založená na HtmlUnit, ˇcoje imple- mentácia prehliadaˇcabez GUI (Graphical User Interface), za- ložená na Jave. Ak na tvorbu testov použijeme iný jazyk ako Java, je potrebné použit’ taktiež Selenium Server. Výhody:

– najrýchlejšia implementácia nástroja WebDriver; – ˇcistéJava riešenie, vd’aka ktorému je aj platformne ne- závislé; – podporuje JavaScript.

Nevýhody:

– emuluje JavaScript správanie sa ostatných prehliadaˇcov, no dost’ podstatne sa od toho originálneho odlišuje.

Driver: Firefox profil, ktorý je použitý, je zjednodušený oproti tomu nainštalovanému na danom stroji. Obsahuje iba seleniovské rozšírenie SeleniumDriver.xpi. Je možné využívat’ ho na plat- formách Windows, Mac, Linux. Výhody:

– beží na reálnom prehliadaˇcia podporuje JavaScript; – rýchlejší ako Driver.

Nevýhody:

– pomalší ako HtmlUnit Driver.

33 3. NÁSTROJENAAUTOMATIZÁCIUFUNKCNÝCHTESTOVˇ

• Internet Explorer Driver: Ked’že je riadený pomocou .dll, je dostupný iba pre platformu Windows. Výhody:

– beží na reálnom prehliadaˇcia podporuje JavaScript.

Nevýhody:

– funguje iba s operaˇcnýmsystémom Windows; – v porovnaní s ostatnými je pomalší; – XPath nie je vo viacerých verziách natívne podporované, Sizzle je vložené automaticky, ˇcoje významne pomalšie ako ostatné prehliadaˇcea pomalšie ako CSS selektory v rovnakom prehliadaˇci; – CSS nie je v niektorých verziách natívne podporované. Namiesto toho je vkladané Sizzle; – CSS selektory v IE 9 a 10 (Internet Explorer) sú natívne, no tie konkrétne prehliadaˇcenepodporujú CSS3.

• ChromeDriver: Je udržiavaný a podporovaný v rámci samotného Chromium projektu. WebDriver pracuje s prehliadaˇcomcez binárny sú- bor ChromeDriver. Preto je potrebné mat’ nainštalovaný Chro- meDriver a taktiež prehliadaˇcChrome. ChromeDriver musí byt’ pridaný do systémového adresára, aby ho WebDriver do- kázal nájst’. PrehliadaˇcChrome je vyhl’adávaný v jeho pred- volenom adresári. Výhody:

– beží na reálnom prehliadaˇcia podporuje JavaScript; – pretože Chrome je WebKit založený prehliadaˇc,Chro- meDriver nám môže povolit’ verifikáciu, ˇcinaša stránka funguje v prehliadaˇciSafari. Je ale potrebné mysliet’ na to, že Chrome využíva vlastný V8 JavaScript prostrie- dok ako Nitro, ktoré používa , preto sa vykonáva- nie môže líšit’.

34 3. NÁSTROJENAAUTOMATIZÁCIUFUNKCNÝCHTESTOVˇ

Nevýhody: – pomalší ako HtmlUnit Driver. Dalšieˇ dostupné ovládaˇce,ktoré je možné použit’, sú Opera Dri- ver, iOS Driver a, samozrejme, Android Driver.

3.1.4.2 Implementácia krokov testu Po nastavení projektu a inicializovaní jedného z dostupných ovláda- ˇcovmôžeme zaˇcat’ programovat’ jednotlivé kroky testov. Jednotlivé operácie, ktoré budeme vykonávat’, sa vykonávajú na jednotlivých elementoch, ktoré sa nachádzajú na danej stránke. Na ich lokalizá- ciu priamo používame WebDriver alebo WebElementy samotné. Me- tódy, ktoré vyhl’adajú elementy sú, Find Element alebo Find Elements. Prvá vráti WebElement objekt alebo v prípade, že element nenájde, vráti hodnotu null. Druhá vracia zoznam WebElementov alebo hod- notu null. Pri tomto vyhl’adávaní používame takzvané By stratégie, ktoré sú parametrom spomínaných vyhl’adávajúcich funkcií. Pri identifiko- vaní elementov na stránke existuje niekol’ko stupˇnovich lokalizácie od najefektívnejšej a najpreferovanejšej, až po tú najmenej efektívnu. Ako prvú sa ponúka použit’ funkciu By.id(), kde je jej parametrom unikátny ID identifikátor, ktorý nemá žiadny iný element. Žial’, vý- vojári ˇcastopoužívajú neuniverzálne alebo autogenerované ID ele- mentov, ˇconás vedie k d’alšiemu možnému lokalizovaniu, a to je podl’a mena triedy By.className(). To vyhl’adá elementy, ktoré majú požadovaný názov triedy. Ked’že, pravdepodobne, nájde týchto ele- mentov viac, ktoré majú rovnaký názov triedy, vráti ich ako zoznam. Tretí spôsob je použit’ meno štítku alebo taktiež tag By.tagName() konkrétneho elementu. Medzi d’alšie možnosti patrí vyhl’adanie pod- l’a mena atribútu By.name(), textu odkazu By.linkText(), ˇciastoˇcného textu odkazu By.partialLinkText(). Použitie identifikácie podl’a CSS, ˇconemusí v niektorých prehliadaˇcochfungovat’. Identifikácia podl’a XPath (jazyk pre navigáciu v XML dokumente) By.xpath() je taktiež možná. K tomuto spôsobu môžeme použit’ nástroj FireBug, ktorý je rozšírením pre prehliadaˇcFirefox a automaticky vytvára XPath ozna- ˇcenéhoelementu. Poslednou možnost’ou, ako identifikovat’ element, je použitie JavaScriptu.

35 3. NÁSTROJENAAUTOMATIZÁCIUFUNKCNÝCHTESTOVˇ

Obr. 3.6: Ukážka testu s využitím nástroja Selenium WebDriver [15]

Po vyhl’adaní správnych elementov môžeme zaˇcat’ využívat’ ope- rácie, ktoré sú na týchto elementoch vykonávané a interagujú tak so stránkou. V dokumentácii je vymenovaných množstvo operácií, ako, napríklad, vyp´lˇnanieformulárov, prepínanie medzi stránkami, odchytávanie a práca s popup dialógmi a rôzne d’alšie, ktoré k fun- govaniu môžu, napríklad, aj simulovat’ vstupné zariadenia, ktorými sú klávesnica a myš. Ked’že operácie, ktoré sa vykonávajú na pozadí stránky po in- terakcii s jej elementami, môžu trvat’ nejaký ˇcas,je preto obˇcaspo- trebné na tento element alebo operáciu poˇckat’ pomocou explicit-

36 3. NÁSTROJENAAUTOMATIZÁCIUFUNKCNÝCHTESTOVˇ

ného alebo implicitného ˇcakania.Explicitné ˇcakanieˇcakána nejakú podmienku, ktorá sa má splnit’, aby mohla byt’ povolená d’alšia in- terakcia. Druhé, implicitné ˇcakanie,ˇcakáˇcas,ktorý požadujeme. Vzhl’adom na to, že testy majú odhal’ovat’ nesprávne správanie sa aplikácie, nie je celkom postaˇcujúce,ak sa po páde testu chyba zapíše iba na výstupnú konzolu, prípadne do logu. Výnimky nemu- sia byt’ vždy úplne konkrétne a my tak nedokážeme presne urˇcit’, ˇcoje príˇcinapádu testu. Preto je vhodné použit’ vytvorenie záznamu obrazovky poˇcaspádu testu. Túto funkcionalitu implementuje Re- moteWebDriver, ktorý je potomok triedy WebDriver.

3.2 White

Na automatizáciu desktopových aplikácií, ktoré sú založené na Win- Form a WPF platformách, sa vo firme EmbedIT používa framework White. Okrem nich tento framework podporuje aj Win32, Silverlight a SWT (Java) platformy. Bol vytvorený v rámci projektu TestStack, ktorý združuje niekol’ko open source projektov. Založený je na .NET frameworku a nepotrebuje použitie žiadnych proprietárnych skrip- tovacích jazykov. Projekty, ktoré využívajú White, môžu používat’ l’ubovol’ný .NET jazyk, IDE a nástroje. Poskytuje konzistentné ob- jektovo orientované API, skrývajúce komplexné knižnice Microsoft UI Automation a Window messages [17].

Obr. 3.7: White architektúra [17]

Obrázok 3.7 znázorˇnujeschému, ako nástroj White funguje. Pre jeho funkˇcnost’ je ale nutné, aby bežal na inom procese, ako je ten testovanej aplikácie.

37 3. NÁSTROJENAAUTOMATIZÁCIUFUNKCNÝCHTESTOVˇ

Ked’že tento framework predpokladá, že užívatelia, ktorí s ním budú pracovat’, majú vývojárske skúsenosti, preto neposkytuje žia- den nástroj na nahrávanie jednotlivých krokov testu. Je doporuˇcené, že ak testeri nemajú programátorský základ, aby radšej využili iný nástroj. Na to, aby sme mohli zaˇcat’ používat’ White, si musíme overit’, ˇcináš projekt používa aspoˇn.NET 4.0 framework verziu. Ak je pod- mienka splnená, White pridáme do projektu prostredníctvom NuGet správcu balíˇckov, ktorý je urˇcenýpre platformu Microsoft a je vol’ne dostupný. Po jeho pridaní môžeme White používat’. Príkaz Application app = Application.Launch("foo.exe"); spustí apli- káciu a vytvorí jej inštanciu v premennej application. Po tom, ako si nainicializujeme aplikáciu a spustí sa, musíme si zaregistrovat’ okno, ktoré predstavuje danú aplikáciu. To vykonáme príkazom Window win = application.GetWindow("bar", InitializeOption.NoCache);. V tomto momente máme okno aplikácie zaregistrované a uložené do premen- nej. White používa UIAutomation API na nájdenie elementov na da- nom okne. UIAutomation komunikuje so zobrazeným oknom pro- stredníctvom správ okna. Toto hl’adanie je vykonávané iterovaním nad všetkými elementami v okne. Ak má okno príliš vel’a UIItems (elementy okna), môže byt’ táto identifikácia vel’mi pomalá. Na to, aby sme neˇcakalidlhú dobu, White na vylepšenie výkonu podpo- ruje poziˇcne-orientovanélokalizovanie elementov. Ked’ máme nainicializované okno, môžeme sa zamerat’ na iden- tifikáciu jednotlivých UIItem elementov. Tie sa inicializujú prostred- níctvom funkcie window.Get