Zvýš kvalitu testovania: Ako vybudovať odolné testovacie prostredie?

Odolnosť testovacieho prostredia je dôležitým faktorom pre kvalitu testovania. Odolné testovacie prostredie bude odolné voči chybám a útokom, čo pomôže zabezpečiť, že softvér bude testovaný dôkladne a efektívne. V tomto článku sa dozvieš, ako vybudovať testovacie prostredie, ktoré bude odolné voči chybám a útokom.

Čo je to testovacie prostredie (test environment)?

Keď sú softvérové testy navrhnuté, potrebujú rozhranie, v ktorom sa budú vykonávať. Toto rozhranie sa nazýva testovacie prostredie (angl. testing environment). Vytvára sa integráciou hardvéru, softvéru, správnych sieťových konfigurácií a údajov potrebných na vykonávanie testov. Testovacie prostredie musí v podstate kopírovať produkčné prostredie (tzn. skutočné zariadenie a prehliadač, na ktorých sa bude softvér spúšťať).

Testovacie prostredie ti umožňuje vytvoriť identické prostredie vždy, keď potrebuješ otestovať svoj produkt. Je to najdôležitejší nástroj pre testera, aby mal dôveru vo výsledky testovania.

Význam testovacieho prostredia

Úplne netestovaný softvér nemožno zverejniť, a to ani na účely beta testovania. Musí sa vykonať prinajmenšom unit, integračné, výkonnostné (performance testing) a záťažové testovanie – hoci zvyčajne je testovanie oveľa rozsiahlejšie.

Tieto testy sa musia vykonávať v prostredí, ktoré čo najvernejšie napodobňuje podmienky reálneho používateľa. Testovacie prostredia robia práve toto a umožňujú QA identifikovať chyby, nekompatibility a iné problémy.

Po zistení chýb môžu testeri a vývojári upraviť údaje bez toho, aby to ovplyvnilo skutočných používateľov alebo ich skúsenosti. Povedzme napríklad, že sa testuje aktualizácia bankovej aplikácie. Nebolo by najlepším postupom presúvať skutočné peniaze na účtoch skutočných zákazníkov, aby sa otestovala jej účinnosť?

S testovacím prostredím však môžu testeri zodpovední za kvalitu vykonávať všetky akcie, ktoré chcú, hrať sa s aplikáciou a testovať základné funkcie bez toho, aby sa obávali dôsledkov v reálnom svete.

Vzhľadom na obrovský počet zariadení, verzií systémov Android a iOS a prehliadačov musí testovacie prostredie zabezpečiť kompatibilitu s viacerými kombináciami zariadení, prehliadačov a operačných systémov.

V takýchto prípadoch je zvyčajne najlepšie použiť ako testovacie prostredie skutočné zariadenia. Je to predovšetkým preto, že emulátory a simulátory neponúkajú všetky funkcie skutočného zariadenia a prehliadača, s ktorými bude musieť softvér pracovať. Emulátor napríklad neumožňuje testerom replikovať stav vybitej batérie, slabý sieťový signál alebo testovanie geolokácie. Preto neexistuje spôsob, ako otestovať aplikáciu v neoptimálnych podmienkach. Aplikácia však musí fungovať dobre, aby poskytovala vysoké štandardy používateľskej skúsenosti, najmä v takýchto situáciách.

  • Testovacie prostredie poskytuje presnú spätnú väzbu o vlastnostiach a funkciách aplikácie, alebo môžeme povedať, že testovacie prostredie poskytuje potrebné nastavenie na spustenie testovacích prípadov.
  • Testovacie prostredia sa používajú aj na testovanie a identifikáciu chýb aplikácie a na nájdenie ich možnej opravy pre bezproblémové fungovanie aplikácie pre používateľa.
  • Pomáha tiež overiť správanie aplikácie tým, že poskytuje štandardizované prostredie a aplikácia/softvér sa testuje bezpečne, čo používateľovi poskytuje aj výhodu bezpečnosti.
  • Pomocou testovacích prostredí môžeme hľadať zraniteľnosti, aby sme mohli spustiť bezpečnú, otestovanú aplikáciu pre používateľa.

Elementy testovacieho prostredia

Každé testovacie prostredie alebo QA environment je vytvorené kombináciou nasledujúcich prvkov:

  • testovaný softvér,
  • operačný systém, databáza a testovací server,
  • testovacie údaje,
  • konfigurácia siete,
  • zariadenie, na ktorom sa má softvér testovať – stolové alebo mobilné zariadenia,
  • framework pre automatizáciu testovania a príslušné nástroje, ako napríklad Selenium, Cypress, Robot Framework,
  • príslušná dokumentácia – testovacie scenáre, používateľské príručky, obchodné a zákaznícke požiadavky,
  • softvér na prepojenie medzi systémom a aplikáciami.

Aké sú vlastnosti dobrého testovacieho prostredia?

Dobré testovacie prostredie má tieto vlastnosti:

  • Je kópiou živého prostredia alebo sa mu veľmi podobá. To znamená, že obsahuje rovnaký kód, údaje, konfiguráciu, operačný systém a funkcie.
  • Zmeny vykonané v testovacom prostredí nemôžu ovplyvniť živé prostredie.
  • Ľahko sa nastavuje.

Výhody používania testovacích prostredí

Testovacie prostredia majú mnoho výhod, ako napríklad:

  • odstránenie chýb,
  • poskytovanie presnej spätnej väzby o správaní a kvalite testovanej aplikácie,
  • poskytovanie potrebného nastavenia na spustenie testovacích prípadov,
  • umožnenie špecializovaného prostredia na izoláciu kódu a overenie správania aplikácie,
  • podpora zlepšovania a inovácií,
  • efektívne sledovanie postupu vývoja, testovania a nasadenia nového produktu alebo aktualizácie s cieľom zabezpečiť, aby mal koncový používateľ čo najlepšie skúsenosti.

Výzvy v oblasti riadenia testovacieho prostredia

Správa testovacieho prostredia je v súčasnosti zložitý a nákladný proces. Ak chceš z testovania vyťažiť maximum, musíš zabezpečiť, aby bolo tvoje testovacie prostredie vhodne vybavené a spravované. To však nie je vždy jednoduché. Mnohé podniky narážajú na tri bežné problémy, ktoré ovplyvňujú ich testovacie prostredie.

  1. Riadenie zdrojov

Jednou z kritických výziev pri správe testovacieho prostredia je náročnosť riadenia zdrojov. Testovacie prostredie často obsahuje fyzické a virtuálne zdroje a je potrebné spravovať oboje.

Medzi zdroje patria servery, úložiská a sieťová infraštruktúra. Tím musí zabezpečiť, aby bolo prostredie vybudované a udržiavané vhodným spôsobom. Okrem toho musí zabezpečiť, aby dokázalo prenášať zdroje do ďalších verzií a testovania.

  1. Správa zmien

Ďalšou výzvou je správa zmien v codebase. Postupom času sa napríklad do prostredia pridávajú nové zdroje alebo nové verzie existujúcich zdrojov. Keď vykonáš tieto zmeny, tím musí mať spôsob, ako ich sledovať a dokumentovať.

  1. Včasná spätná väzba a slabá komunikácia

Komunikácia je kľúčom k úspechu, aspoň sa to hovorí. Nedostatočná komunikácia alebo spolupráca medzi produktovými manažérmi alebo manažérmi QA a testermi môže viesť k vynechaniu kritických oblastí aplikácie alebo k prehliadnutiu kľúčových obchodných rizík.

  1. Vysoké náklady na synchronizáciu údajov s produkciou

Spustenie testov na živých údajoch si vyžaduje správne plánovanie a nastavenie infraštruktúry. Nepríjemná strata údajov alebo poškodenie inštancií môže testy úplne zničiť.

  1. Nekonzistentné údaje o testoch v jednotlivých tímoch

Všetci členovia vývojového tímu by mali mať k dispozícii najaktuálnejšie testovacie údaje. Nekonzistentné dáta, ktoré vznikajú v dôsledku zle nakonfigurovaných testovacích prostredí, môžu viesť k tomu, že tímy zbytočne vynaložia úsilie na inak vyriešené problémy.

Typy testovacieho prostredia

  1. Integračné testovacie prostredie

Slúži na integráciu jednotlivých softvérových komponentov a testovanie výkonnosti integrovaného systému. Integračné testy kontrolujú, či systém funguje tak, ako má – podľa dokumentov s požiadavkami.

V nastavení DevOps dochádza k integrácii viackrát denne, čo znamená, že integračné prostredie sa bude používať takmer nepretržite. Prirodzene, musí byť modelované tak, aby čo najviac kopírovalo produkčné prostredie.

  1. Prostredie na testovanie výkonnosti

Slúži na overenie toho, ako softvér funguje v porovnaní s vopred určenými normami. Tieto ciele môžu siahať od času odozvy, stability a kompatibility až po priepustnosť a súbežnosť. Závisí to od toho, čo sa aplikácia snaží ponúknuť svojim používateľom.

Testovanie výkonu je široký pojem a zahŕňa rôzne kategórie testov – záťažové, stresové, objemové, breakpointové a podobne. Výkonnostné testy v podstate fungujú na každej funkcii a identifikujú citlivé miesta alebo obmedzenia používateľa.

Vo všeobecnosti si výkonnostné testy vyžadujú značné množstvo času a finančných prostriedkov. Preto je najlepšie nastaviť prostredie QA a spustiť viacero testov súčasne, zvyčajne vtedy, keď bola v softvéri implementovaná významná zmena. Výkonnostné testy má zmysel vykonávať aj pred cyklom vydania softvéru.

  1. Prostredie na testovanie bezpečnosti

Slúži na kontrolu, či softvér nemá bezpečnostné medzery, nedostatky alebo zraniteľnosti týkajúce sa autentifikácie, dôvernosti, autorizácie a zhody.

Prostredie na testovanie bezpečnosti QA vytvárajú interní a externí bezpečnostní experti, ktorí skúmajú softvér, aby zistili, ktoré časti by pravdepodobne mohli byť terčom útokov a akými prostriedkami môžu takéto hrozby prísť.

  1. Prostredie na testovanie chaosu

Slúži na zavedenie stresorov, ktoré môžu spôsobiť zlyhanie softvéru. Zámerom testovania chaosu je otestovať odolnosť systémov v reálnom svete. Úspešné testy chaosu identifikujú oblasti nestability a zabezpečujú, aby sa softvér neuspokojil. Pomáha tiež testerom a vývojárom uvedomiť si kritické závislosti systémov a hlavné uzly ich možného zlyhania.

Prostredia na testovanie chaosu musia byť nakonfigurované na škálovanie a vysokú dostupnosť. Testeri často vykonávajú testy chaosu spolu s výkonnostnými testami, preto je možné vykonávať obidva testy v tom istom rozhraní.

  1. Používateľské akceptačné testovanie – User Acceptance Tests (UAT)

Akceptačné alebo používateľské testovanie sa vykonáva s cieľom skontrolovať, či aplikácia spĺňa obchodné požiadavky koncových používateľov. Ide o záverečnú fázu testovania. Ak vlastnosti a funkcie aplikácie vyhovujú koncovému používateľovi, aplikácia sa presunie do produkčného prostredia.

  1. Alfa testing

V tomto prostredí sa na aplikácii vykonáva testovanie end-to-end po úspešnej integrácii všetkých modulov. Cieľom alfa testovania je zabezpečiť, aby aplikácia fungovala podľa očakávaní klienta.

  1. Beta testing

V prostredí beta testovania sa aplikácia uvoľní pre obmedzený počet používateľov. Používatelia v reálnom svete vystavujú aplikáciu záťaži, aby sa zabezpečilo, že produkt funguje podľa zámeru a spĺňa požiadavky koncových používateľov. Ide o posledné testovacie prostredie pred releasnutím finálnej aplikácie na komerčné použitie. Tu je potrebné prostredie na testovanie typu open-source.

Aké IT prostredia potrebujete?

Pokiaľ ide o vývoj softvéru, existuje niekoľko IT prostredí, ktoré sú zvyčajne potrebné na zabezpečenie kvality a efektívnosti softvéru. Medzi tieto prostredia patrí vývojové prostredie, testovacie prostredie a prostredie staging.

Development environment (vývojové prostredie) je prostredie, v ktorom vývojový tím vytvára a testuje softvér. Zvyčajne je oddelené od produkčného prostredia, aby sa zabránilo negatívnemu vplyvu na živý systém. Vo vývojovom prostredí môžu vývojári testovať nové vlastnosti a funkcie bez rizika poškodenia produkčného prostredia.

Test environment (testovacie prostredie) – V testovacom prostredí sa testuje softvér, aby sa zabezpečilo, že spĺňa požiadavky a špecifikácie. Toto prostredie je zvyčajne presnou kópiou produkčného prostredia a používa sa na simuláciu rôznych scenárov a dôkladné testovanie softvéru.

Staging environment (predprodukčné prostredie) – V staging prostredí, známom aj ako predprodukčné prostredie, sa softvér testuje s reálnymi údajmi a podmienkami. Toto prostredie sa používa na overenie, či je softvér pripravený na nasadenie v produkčnom prostredí.

Čo je to staging prostredie (staging environment)?

Stagingové prostredie kopíruje produkčné prostredie, v ktorom bude umiestnená živá verzia aplikácie. Je veľmi dôležité, aby prostredie staging bolo presnou replikou produkčného prostredia. Často sa to dá dosiahnuť tým, že máš veľmi podrobnú dokumentáciu. V nej by mali byť opísané všetky potreby a správna konfigurácia tvojho produkčného prostredia.

Zatiaľ čo testovacie prostredie je zamerané na testovanie jednotlivých komponentov, prostredie staging je zamerané na testovanie celej aplikácie. Stagingové prostredie je v podstate bezpečné ihrisko, na ktorom môžeš testovať celú aplikáciu.

Vďaka tomu je prostredie staging ideálne na vykonávanie end-to-end testov alebo testovanie výkonu. End-to-end testy potvrdzujú, že celá aplikácia funguje podľa očakávaní, a to testovaním všetkých integrácií.

Okrem toho, keďže prostredie staging kopíruje produkčné prostredie, je to bezpečný priestor na testovanie limitov prostredia a aplikácie pomocou výkonnostných testov.

Stručne povedané, v prostredí staging testuješ celú aplikáciu v reálnych podmienkach, ktoré by zažila v produkčnom prostredí.

Nastavenie testovacieho prostredia

Krok 1. Nastavenie testovacieho servera

Každý test sa nemusí vykonávať na lokálnom počítači. Môže byť potrebné vytvoriť testovací server, ktorý môže podporovať aplikácie.

Napríklad Fedora nastavená pre PHP, aplikácie založené na Jave s poštovými servermi alebo bez nich, nastavenie cronu, aplikácie založené na Jave a podobne.

Krok 2. Sieť

Nastavenie siete podľa požiadaviek testu. Zahŕňa:

  • nastavenie internetu,
  • nastavenie LAN Wifi,
  • nastavenie súkromnej siete.

Zabezpečuje, aby preťaženie, ktoré vznikne počas testovania, neovplyvnilo ostatných členov tímu.

Krok 3. Nastavenie testovacieho počítača

Pri webovom testovaní môže byť potrebné nastaviť rôzne prehliadače pre rôznych testerov. V prípade desktopových aplikácií budeš potrebovať rôzne typy operačných systémov pre rôzne počítače testerov.

Napríklad testovanie aplikácie pre Windows Phone môže vyžadovať:

  • inštaláciu aplikácie Visual Studio,
  • emulátor telefónu Windows,
  • prípadne priradenie telefónu s operačným systémom Windows k testerovi.

Pri webovom testovaní môže byť potrebné nastaviť rôzne prehliadače pre rôznych testerov.

Krok 4. Hlásenie chýb

Testerom by mali byť poskytnuté nástroje na nahlasovanie chýb, napríklad Jira.

Krok 5. Vytvorenie testovacích údajov pre testovacie prostredie

Mnohé spoločnosti používajú na testovanie softvérového produktu samostatné testovacie prostredie. Bežne používaným prístupom je kopírovanie produkčných údajov do testovacieho prostredia. To pomáha IT testerovi, aby zistil rovnaké problémy ako na živom produkčnom serveri bez poškodenia produkčných údajov.

Prístup na kopírovanie produkčných údajov do testovacích údajov zahŕňa:

  • nastavenie produkčných úloh na kopírovanie údajov do spoločného testovacieho prostredia,
  • všetky PII (Personally Identifiable Information – osobné identifikačné údaje) sa upravia spolu s ostatnými citlivými údajmi. PII sa nahradia logicky správnymi, ale neosobnými údajmi,
  • odstránenie údajov, ktoré sú pre tvoj test irelevantné.

Testeri alebo vývojári si ich môžu skopírovať do svojho individuálneho testovacieho prostredia. Môžu ho upraviť podľa svojich požiadaviek.

Ochrana osobných údajov je hlavným problémom pri kopírovaní produkčných údajov. Na prekonanie problémov so súkromím by si sa mal zaoberať fejkovými a anonymizovanými testovacími údajmi.

Na anonymizáciu údajov možno použiť dva prístupy:

  • Black list: V tomto prístupe sa všetky polia údajov ponechajú nezmenené. Okrem tých polí, ktoré určili používatelia.
  • White list: Tento prístup štandardne anonymizuje všetky polia údajov. S výnimkou zoznamu polí, ktoré je povolené kopírovať. Pole na white liste znamená, že je v poriadku kopírovať údaje tak, ako sú a anonymizácia sa nevyžaduje.

Ak používaš produkčné údaje, musíš tiež rozumne zvoliť spôsob získavania údajov. Efektívnym prístupom je získavanie údajov z databázy pomocou skriptu SQL.

Kontrolný zoznam testovacích prostredí

Hardvér

  • Skontroluj, či je k dispozícii požadované vybavenie na testovanie.
  • Skontroluj, či je k dispozícii periférne vybavenie? Ako sú skenery, špeciálne tlačiarne, vreckové zariadenia a podobne.

Softvér / pripojenia

  • Sú potrebné aplikácie špecifikované? Aplikácia, ako napríklad Excel, Word atď.
  • Existuje pre nový softvér testovacie prostredie organizácie? Má organizácia skúsenosti s používaním a údržbou softvéru?
Kontrolný zoznam testovacích prostredí
Údaje o prostredí

Skontroluj, či sú k dispozícii štandardné súbory testovacích údajov.

Nástroje/procesy údržby

  • Skontroluj, či existuje jednotné kontaktné miesto pre údržbu testovacieho prostredia Ak nie, priprav si zoznam všetkých možných členov zapojených do udržiavania testovacieho prostredia. Mal by obsahovať aj ich kontaktné údaje.
  • Sú popísané napríklad kritériá akceptácie, požiadavky na údržbu a podobne?
  • Sú známi všetci členovia zapojení do procesu údržby?

Okrem týchto otázok je potrebné pred vytvorením testovacieho prostredia zodpovedať ešte niekoľko ďalších:

  • Či vytvoriť interné testovacie prostredie, alebo ho zadať externému dodávateľovi?
  • Či sa riadiť internou firemnou normou, alebo sa riadiť nejakou externou (IEE, ISO atď.)?
  • Ako dlho je testovacie prostredie potrebné?
  • Je potrebné určiť rozdiely medzi testovacími a produkčnými systémami a ich vplyv na platnosť testov.
  • Je možné opätovne použiť existujúce nastavenie pre iné projekty v spoločnosti?

4 osvedčené postupy na vytváranie testovacích prostredí

  1. Pristupuj k testovaniu s ohľadom na správu funkcií

Namiesto úpravy a testovania celého kódu, izoluj a testuj jednotlivé funkcie. V takomto duchu sa nesie správa funkcií, nová trieda nástrojov a procesov na vývoj a dodávanie softvéru, ktorá je ukotvená v používaní príznakov funkcií. Najlepšie využitie tvojho času je testovanie týchto malých funkcií v produkcii. Ale aj keď sa rozhodneš testovať tieto funkcie v predprodukčných testovacích a stagingových prostrediach, stále môžeš získať výhody z rozdelenia zmien kódu na malé časti. Testovanie malých zmien kódu si napríklad vyžaduje menej času na písanie testovacích skriptov a celkové spustenie testov.

  1. Zabuduj komunikáciu do prostredia

Nastav integráciu s chatovacími nástrojmi, ktoré tvoj tím používa (napr. Slack a Microsoft Teams), aby ste v prípade zlyhania automatizovaných testov boli okamžite informovaní. Tým sa zabezpečí, že správni ľudia budú môcť chyby rýchlo opraviť.

Môže sa hodiť aj na upozornenie členov tímu, ktorí nie sú priamo zapojení do  pipeline CI/CD. Ak majú ľudia, ktorí nie sú vývojármi, lepší prehľad o pripravovaných funkciách a vylepšeniach aplikácie, môžu prijať opatrenia, ktorých výsledkom bude lepšia používateľská skúsenosť.

  1. Konfigurácia sledovania chýb a životných cyklov riešenia do testovacích prostredí

Systematický spôsob spracovania testovacích úloh uľahčuje zlepšovanie testov v čase. V krátkodobom horizonte to každého zamestná, aby plnil svoju úlohu vždy, keď je vyzvaný. Rozdiel v prípade, že takáto štruktúra nie je zavedená, spočíva v tom, že testovanie je často ponechané na testerov. Žiadna eskalácia chýb a žiadne sledovanie toho, ako často sa chyba objavuje, určite zníži spotrebu cenného času a úsilia.

  1. Využívaj príznaky (flags) funkcií na testovanie v produkcii

Pomocou príznakov funkcií môžeš znížiť režijné náklady spojené s testovaním. Ak príznaky funkcií implementuješ správne, v niektorých prípadoch sa môžeš úplne zbaviť testovacích a stagingových prostredí. Tie isté aplikácie, ku ktorým pristupujú tvoji zákazníci, sa budú zobrazovať rôzne v závislosti od pravidiel príznakov funkcií. Tieto pravidlá môžu byť založené na atribútoch, ako je umiestnenie, prístupové zariadenie alebo dokonca na jemnejších detailoch, ako je jedinečné ID používateľa.

Pomocou príznakov funkcií môžeš kľúčovým zainteresovaným stranám v tvojej organizácii ukázať nové funkcie ešte pred ich releasnutím pre používateľov. Funkcie môžu byť vystavené v produkcií, ale bez toho, aby boli vystavené koncovým používateľom, čím sa zníži riziko. Testovanie v produkcii ti ušetrí peniaze a zdroje, ktoré by ste vo firme inak vložili do izolovaných testovacích relácií v prostredí.

Ak vieš po nemecky a si software tester, pozri 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ť