Integration testing – integračné testy

Tradične sa testovanie softvéru považovalo za spôsob hľadania chýb, keď sa už vytvoril použiteľný produkt. S pokrokom v procese vývoja softvéru a požiadavkami na komplexný softvér sa však proces testovania vyvíjal.
Testovanie sa rozdelilo na rôzne úrovne, aby sa zlepšilo pokrytie testov a ich spoľahlivosť. V tomto texte si najprv v rýchlosti overíme rôzne úrovne testovania a potom si podrobne preštudujeme Integračné testovanie a jeho typy, výhody a niektoré najbežnejšie nástroje integračného testovania.
Obsah
- Úrovne testovania
- Čo je integračné testovanie?
- Prečo by sme mali vykonávať integračné testovanie?
- Výhody integračného testovania
- Typy integračného testovania
- Big-bang integrácia
- Integračné testovanie zhora nadol (top-down integration testing)
- Integračné testovanie zdola nahor (bottom-up integration testing)
- Hybridné integračné testovanie
- Nástroje na testovanie integrácie
Úrovne testovania
Typy testovania softvéru možno všeobecne rozdeliť na statické testovanie a dynamické testovanie. V prípade statického testovania nespustíme vyvinutú softvérovú aplikáciu, namiesto toho používame na testovanie aplikácie rôzne techniky, ako napríklad – kontroly, priebežné testy, neformálne a technické review.
V prípade dynamického testovania testujeme softvérovú aplikáciu spustením kódu a skúmaním jej dynamického správania, ktoré zahŕňa analýzu rôznych parametrov, ako je čas odozvy, využitie CPU, využitie pamäte atď. V súčasnosti dynamické testovanie zahŕňa rôzne úrovne testovania, ktoré začínajú unit testovaním a pokračujú integračným, systémovým a nakoniec akceptačným testovaním.

Unit testovanie – Je to prvá úroveň testovania, pri ktorej sa jednotlivé moduly alebo menšie stavebné bloky aplikácie testujú izolovane. Jeho výhodou je, že keďže sa zameriavame len na menšie moduly, tak je jednoduchšie kompletne a vyčerpávajúco otestovať daný modul. Takisto chyby zistené na tejto úrovni možno rýchlo a jednoducho opraviť s menšími prostriedkami.
Integračné testovanie – Ide o druhú úroveň testovania, ktorej sa budeme venovať v tomto článku. Zahŕňa testovanie integrovaných modulov ako celku spolu s ich prepojením.
Systémové testovanie – Tretia úroveň testovania, pri ktorej sa vykonáva end-to-end testovanie celej aplikácie. Pomáha pri overovaní požiadaviek pred konečným testovaním zo strany zákazníka.
Akceptačné testovanie – Je to štvrtá a posledná úroveň testovania, pri ktorej klient alebo zainteresované strany kontrolujú, či aplikácia spĺňa ich obchodné požiadavky alebo nie.
Teraz, keď už vieme o statickom a dynamickom testovaní a rôznych úrovniach testovania, môžeme pristúpiť k podrobnému oboznámeniu sa s integračným testovaním.
Čo je integračné testovanie?
Integračné testovanie je druhá úroveň testovania vykonávaná po unit testovaní, pri ktorej testujeme prepojenie medzi modulmi spolu s testovaním integrovaných komponentov. Môže sa vykonávať pomocou techník testovania bielej aj čiernej skrinky (white-box testing and black-box testing).
Prečo by sme mali vykonávať integračné testovanie?
- Modul môže izolovane fungovať perfektne, ale pri interakcii s iným modulom môže mať problémy s integráciou.
- Medzi modulmi sa môžu vyskytnúť problémy s typom údajov alebo platným rozsahom údajov.
- Vo veľkých tímoch, kde moduly vytvárajú rôzni vývojári alebo dokonca tímy, je to veľmi potrebné, keďže môže dôjsť k nesúladu v chápaní rôznych vývojárov.
Výhody integračného testovania
- Ako bolo uvedené vyššie, pomáha pri identifikácii problémov s integráciou medzi modulmi.
- Pomáha zabezpečiť, aby integrované moduly fungovali správne pred prechodom na systémové testovanie celej aplikácie.
- Chyby zistené na tejto úrovni sa ľahšie riešia v porovnaní s chybami zistenými v neskorších fázach testovania – systémovom a akceptačnom testovaní.
- Zlepšuje pokrytie testov a poskytuje ďalšiu úroveň spoľahlivosti.
Typy integračného testovania
poznáme 4 typy:
Big-bang integrácia
Pri veľkej integrácii sa najprv musia dokončiť všetky moduly a potom sa integrujú. Po integrácii sa vykoná testovanie integrovanej jednotky ako celku. Líši sa od testovania systému, pretože tu sa testovanie zameriava na prepojenie/komunikáciu medzi modulmi.
Výhoda – Je vhodný pre menšie projekty, kde môžu byť všetky moduly vyvinuté skôr, ako sa začne s integračným testovaním.
Nevýhoda – Je veľmi náročné na začlenenie, pretože nie je praktické ani vhodné mať pripravené všetky moduly pred začatím integračného testovania.
Integračné testovanie zhora nadol (top-down integration testing)
Integrácia zhora nadol je inkrementálny prístup integračného testovania, pri ktorom sa testovací tok začína od modulov najvyššej úrovne (moduly vyššie v hierarchii) smerom k modulom nižšej úrovne. Keďže je veľmi pravdepodobné, že moduly nižšej úrovne nemusia byť vyvinuté, kým sa začína s modulmi najvyššej úrovne, tak sa v takýchto prípadoch používajú zásuvné moduly (stubs).
Zástupné moduly sú fiktívne moduly, ktoré simulujú fungovanie modulu tým, že prijímajú parametre prijaté modulom a poskytujú prijateľný výsledok. Vo všeobecnosti majú moduly typu stubs pevne zakódovaný vstup a výstup, ktorý pomáha pri testovaní ostatných modulov, ktoré sú s ním integrované.
Výhoda – S použitím stubs nemusíme čakať na vývoj všetkých modulov. Taktiež môžeme uprednostniť testovanie kritických integrovaných modulov ako prvých.
Nevýhoda – Táto technika si vyžaduje vytvorenie mnohých podriadených modulov na simuláciu modulov nižšej úrovne. Takisto sa môže stať, že moduly nižšej úrovne nebudú dostatočne otestované.
Integračné testovanie zdola nahor (bottom-up integration testing)
Integrácia zdola nahor je tiež založená na inkrementálnom prístupe a začína sa od modulov nižšej úrovne a postupuje sa smerom nahor k modulom vyššej úrovne. Moduly vyššej úrovne opäť nemusia byť vyvinuté v čase, keď sa testujú moduly nižšej úrovne. V týchto prípadoch sa teda používajú ovládače (drivers). Tieto ovládače simulujú funkčnosť modulov vyššej úrovne na testovanie modulov nižšej úrovne.
Výhoda – podobne ako pri testovaní zhora nadol nemusíme pred začatím testovania čakať, kým sa vyvinú všetky moduly.
Nevýhoda – Moduly najvyššej úrovne, ktoré sa testujú v neskorších fázach, nemusia byť dostatočne otestované a môžu obsahovať chyby.
Hybridné integračné testovanie
Hybridný integračný prístup sa nazýva aj sendvičový prístup. Tento prístup je kombináciou integračného testovania zhora nadol aj zdola nahor. V tomto prístupe sa integrácia začína od strednej vrstvy a testovanie sa vykonáva v oboch smeroch – smerom k modulom vyššej úrovne(nahor) a smerom k modulom nižšej úrovne (nadol). Tento spôsob zahŕňa výhody prístupov zhora nadol aj zdola nahor a pomáha pri rýchlejšom testovaní rozhraní modulov.
Výhoda – Keďže sa môžeme pohybovať smerom nahor aj nadol, je to časovo najefektívnejšia metóda s možnosťou uprednostniť moduly na hornej alebo dolnej úrovni.
Nevýhoda – tento prístup sa ťažko implementuje, pretože musíme integrovať a pohybovať sa v oboch smeroch testovaného modulu.
Výzvy pri integračnom testovaní
- Ťažko vykonateľné – v porovnaní so systémovým testovaním, pri ktorom môžeme aplikáciu považovať za čiernu skrinku, je veľmi ťažké ho vykonať.
- Časová náročnosť – Testovanie všetkých prepojení medzi rôznymi prepojenými modulmi je časovo a zdrojovo veľmi náročné.
- Dodatočné úsilie – Vyžaduje si vytvorenie podskupín a ovládačov, ktoré ak nie sú vytvorené správne, môžu mať za následok neadekvátne testovanie.
Nástroje na testovanie integrácie
Rational Integration Tester – Rational integration tester je nástroj na testovanie integrácie od spoločnosti IBM. Poskytuje bezkódové prostredie na vývoj integračných testov.
TESSY – Tessy od spoločnosti Razorcat Development GmbH pomáha pri automatizácii cyklu jednotkových a integračných testov pre vstavaný softvér v jazykoch C a C++.
LDRA – balík nástrojov LDRA poskytuje možnosti unit, integračného a systémového testovania. Väčšinou sa používa pre kritické softvérové aplikácie, ako sú – letecký priemysel, zdravotnícke zariadenia, automobilový priemysel atď.
Protractor – Protractor je open-source testovací framework pre aplikácie Angular a AngularJS podporujúci skriptovanie v jazyku Javascript.
Citrus Integration Testing – Citrus je open-source testovací framework, ktorý pomáha pri vývoji automatizovaných integračných testov pre protokoly a formáty správ HTTP REST, TCP/IP, SOAP, FTP, XML, JSON atď.
Steam – Steam je open-source framework na automatizáciu testov, ktorý poskytuje možnosť ‚headless‘ integračného testovania.
Jasmine – Jasmine je open-source BDD framework, pomocou ktorého môžeme automatizovať akúkoľvek aplikáciu založenú na jazyku Javascript.