Integration testing – integračné testy

Integration testing – integračné testy
3 MIN
02 aug 2023

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

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.

dynamické testovanie úrovne
dynamické testovanie – úrovne

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.