Business & Integration IT konzultant
Continuous testing v DevOps a agilnom vývoji
V starších vývojových modeloch softvéru, ako je vodopádový model (waterfall), boli vývojári rozdelení do samostatných tímov zameraných na konkrétne úlohy. To viedlo k prístupu „hands-off“ (ruky preč), keď jeden tím dokončil svoje úlohy a odovzdal softvér inej skupine. Dôraz sa kládol na kvalitu, každý tím mal čas sústrediť sa na svoju úlohu bez toho, aby sa staral o iné aspekty projektu. S rastúcim dopytom po rýchlejšom vývoji sa tento starší model ukázal ako problematický. Vyvinul sa novší model vývoja, ktorý reagoval na požiadavku na zvýšenie rýchlosti vývoja.
Dnes väčšina organizácií prijala prístup DevOps – Agile, ktorý využíva prostredie spolupráce a spoločnej zodpovednosti. Tento posun od starších postupov umožnil tímom prijať automatizované testovanie a nepretržité činnosti, ako aj kontinuálne (priebežné) testovanie (continuous testing).
Continuous testing v agilnom prostredí
V minulosti sa testovanie vykonávalo tak, že sa softvér odovzdával z jedného tímu do druhého. Fáza vývoja sa ukončila a potom sa začalo testovanie.
Continuous testing softvéru alebo kontinuálne testovanie v DevOps (Agile), je prístup k testovaniu softvéru, pri ktorom sa aplikácie testujú v každej fáze životného cyklu vývoja softvéru (SDLC). Jeho cieľom je zvýšiť kvalitu softvéru a efektívnosť vývoja v procese kontinuálneho dodávania.
Prečítaj si viac o projektovom manažmente vývoja softvéru – Waterfall vs. Agile v našom minulom článku.
V continuous testing sa vykonávajú automatizované testy ako súčasť procesu dodávania softvéru s cieľom získať okamžitú spätnú väzbu o výsledkoch vykonávania a obchodných rizikách spojených s kandidátom softvéru na release.
Prečo existuje myšlienka continuous testing – priebežného testovania?
Kontinuálne testovanie je osvedčený postup, ktorý sa zvyčajne spája s metodikou DevOps alebo agilnou metodikou. Ide o to, že menšie a pravidelnejšie životné cykly vývoja softvéru (SDLC) sú prospešné, pretože poskytujú spätnú väzbu počas celého procesu dodávania softvéru. Kontinuálne testovanie je základným aspektom tohto procesu, pretože pomáha zabezpečiť kvalitu.
Implementácia kontinuálneho testovania však môže byť náročná, pretože si vyžaduje rýchlu spätnú väzbu a vysoký stupeň automatizácie testovania. To môže byť ťažké dosiahnuť s pevným počtom interných testerov.
Continuous testing – základné prvky testovania
Automatizácia testovania (Test automation)
Manuálne testovanie je síce dôkladné, ale časovo náročné a vyžaduje si veľa práce. Automatizácia, naopak, uvoľňuje čas testerov a umožňuje im sústrediť sa na riešenie chýb objavených počas testovania.
Je však dôležité uvedomiť si, že nie všetky aspekty by sa mali automatizovať. Prieskumné testovanie je naďalej nevyhnutné pri kreatívnom identifikovaní nových testovacích scenárov, ktoré sa neskôr môžu automatizovať.
Nepretržitá integrácia (Continuous Integration)
Nepretržitá integrácia (CI) je kľúčový proces pri vývoji softvéru, pri ktorom vývojári často zlučujú svoj kód do spoločného úložiska (code repository), niekedy aj viackrát denne. Tento prístup umožňuje automatické vytváranie softvéru a ponúka rýchlu spätnú väzbu o jeho kvalite. Okrem toho sú základom CI automatizácia a testovateľnosť.
Kontinuálna integrácia (CI) je proces odlišný od kontinuálneho testovania. Primárnym cieľom je dôsledne a opakovane zostavovať konfiguráciu. To umožňuje vývojárom automaticky buildovať zmeny na základe každej review kódu, spúšťať testovacie sady pre každý build a udržiavať konzistentné testovacie prostredie.
Ak build zlyhá, CI zastaví jeho postup do ďalších fáz. Tímy sú potom informované, čo im umožňuje rýchlo odstrániť problém, často v priebehu niekoľkých minút. Vďaka tomuto procesu je vývoj softvéru predvídateľnejší a spoľahlivejší. Urýchľuje vývoj nových funkcií a rýchle odstraňovanie chýb skôr, ako ovplyvnia používateľov.
Kontinuálne dodávanie (Continuous Delivery)
Kontinuálne dodávanie (CD) je metóda, pri ktorej sa úpravy kódu automaticky nastavujú na release do produkčného prostredia. CD ako dôležitá súčasť vývoja súčasných aplikácií rozširuje princípy kontinuálnej integrácie (CI) tým, že po fáze buildu nasadzuje zmeny kódu do testovacích prostredí.
Správna implementácia CD zabezpečuje, že vývojári majú neustále k dispozícii produkt pripravený na nasadenie do produkcie, ktorý prešiel rozsiahlym priebežným testovaním. CD umožňuje vývojárom rozšíriť ich automatizované testovanie nad rámec unit testov v rámci vývoja riadeného testami.
Rozsah testovania v CD zvyčajne zahŕňa:
- testovanie používateľského rozhrania (UI),
- testovanie záťaže na posúdenie výkonu pri záťaži,
- integračné testovanie kombinovaných komponentov,
- testovanie spoľahlivosti rozhrania API (Application Programming Interface),
- regresné testy na kontrolu nových chýb v existujúcich funkciách.
Prečítaj si celý článok o Continuous integration, delivery, CI CD pipeline.
Benefity continuous testingu
Kontinuálne testovanie ponúka niekoľko kľúčových výhod, ktoré sú nevyhnutné v moderných metodikách vývoja softvéru, ako sú DevOps a Agile. Medzi tieto výhody patria:
Zvýšenie rýchlosti: Kontinuálne testovanie je v súlade s rýchlym tempom DevOps a Agile, čo uľahčuje rýchlejšie dodanie softvéru. Toto zrýchlenie môže zlepšiť obchodné procesy vrátane rýchlejších stratégií uvádzania na trh (GTM).
Zvýšená kvalita kódu: Kontinuálne testovanie odhaľovaním chýb na začiatku vývojového cyklu výrazne zlepšuje celkovú kvalitu kódu a znižuje pravdepodobnosť výskytu chýb.
Efektívnosť nákladov: Vďaka vyššiemu štandardu kvality kódu a menšiemu počtu chýb, ktoré sa dostanú do produkcie, sa kontinuálne testovanie snaží časom kompenzovať počiatočné náklady.
Zlepšenie bezpečnosti: Nepretržité testovanie vytvára robustný framework, ktorý chráni aplikácie pred nepredvídanými zmenami a bezpečnostnými hrozbami počas nasadenia aj po ňom.
Lepšia komunikácia v tíme: Úroveň spolupráce potrebná na efektívne kontinuálne testovanie nielenže pomáha efektívnejšie identifikovať chyby, ale tiež podporuje väčšiu súdržnosť medzi tímami, pokiaľ ide o širšie ciele, ako sú skúsenosti používateľov a obchodné ciele.
Štandardy zabezpečenia kvality: Kontinuálne testovanie stanovuje vysoké štandardy pre tím zabezpečenia kvality a zabezpečuje, aby počiatočné investície do aspektov, ako je automatizácia testovania, priniesli očakávaný úžitok.
Výzvy pri zavádzaní kontinuálneho testovania
Kontinuálne testovanie predstavuje pre tímy vyvíjajúce softvér napriek mnohým výhodám mnohé výzvy:
Integrácia s DevOps: Tímom často chýbajú potrebné nástroje a školenia na efektívnu implementáciu kontinuálneho testovania v rámci agilných a DevOps frameworkov.
Kultúrny šok: Prijatie kontinuálneho testovania si môže vyžadovať výraznú kultúrnu zmenu pre vývojové a testovacie tímy, najmä ak sú zvyknuté na tradičné procesy.
Aktualizácia stratégií testovania: Spoliehanie sa výlučne na tradičné metódy testovania a nedostatočne definovanú správu testovacích údajov môže brániť efektívnosti kontinuálneho testovania.
Pravidelná integrácia kódu: Vývojári, ktorí neintegrujú svoj kód často (ideálne niekoľkokrát denne), riskujú, že vzniknú problémy, ako napríklad duplicitné kódy a nekompatibilný kód, čo vedie k chybám.
Správa testovacieho prostredia: Zabezpečenie kompatibility testovacích prostredí s úložiskom kódu je kľúčové pre bezproblémové testovanie najnovšieho kódu.
Zosúladenie produkčného prostredia: Je nevyhnutné zosúladiť produkčné prostredia s testovacími prostrediami, aby sa zaručilo, že všetky aspekty softvéru boli dôkladne otestované.
Metodiky priebežného testovania (continuous test methods)
Kontinuálne testovanie zahŕňa celý rad testov na zabezpečenie spoľahlivosti, bezpečnosti a použiteľnosti aplikácie. Tieto testy zahŕňajú:
Testovanie s posunom doľava (Shift-Left testing): Uprednostňovaním testovania softvéru na začiatku životného cyklu vývoja softvéru (SDLC) môžu spoločnosti pomôcť znížiť alebo predísť významným problémom s odstraňovaním chýb v budúcnosti. Shifting-left je paradigma testovania softvéru, ktorá sa vzťahuje na prax skoršieho testovania v rámci procesu.
Testovanie posunu doprava (Shift-Right testing): Shift-right je metodika vývoja softvéru, pri ktorej testovanie, kontrolu kvality a hodnotenie výkonu softvéru vykonávajú vývojári, ktorí sú bližšie ku kódu. Shift-right kladie dôraz na testovanie na konci SDLC s cieľom zlepšiť používateľskú skúsenosť, celkový výkon, odolnosť voči zlyhaniu a funkčnosť. Tým sa zabezpečí, že aplikácie bežiace v produkcii boli otestované a že sa zachová rovnako vysoká úroveň kvality.
Smoke testy (Smoke testing): Smoke testing je proces, ktorý sa používa na určenie, či je nasadený build softvéru stabilný. Vykonáva počiatočné, zbežné kontroly (manuálne alebo automatizované) na objavenie chýb v softvéri, ktoré sa budú dať ešte rýchlo a efektívne odstrániť. Smoke testovanie je potvrdením pre tím QA, aby mohol pokračovať v ďalšom testovaní softvéru.
Unit testovanie (Unit testing): Unit testovanie je proces vývoja softvéru, ktorý zabezpečuje, aby každá časť aplikácie fungovala podľa očakávania. Vďaka izolácii a overovaniu jednotlivých funkcií, metód, procedúr a objektov umožňuje unit testovanie vývojárom nájsť a opraviť chyby už v ranom štádiu vývoja.
Integračné testovanie a testovanie správ (Integration and message testing): Integračné testy a testy správ zabezpečujú, že všetky moduly softvéru sú pri vzájomnej spolupráci bezchybné. Virtualizácia chýbajúcich závislostí umožňuje tímom testovať, ako dobre fungujú kolektívne procesy a scenáre end-to-end. Kompozitný kód sa používa na testovanie, či pri kompilácii a spustení za behu fungujú podľa očakávaní.
Testovanie výkonnosti (Performance testing): Priebežné testovanie zahŕňa výkonnostné testy, ako je testovanie záťaže aby sa zabezpečilo, že aplikácia zvládne predpokladané zaťaženie používateľmi a bude optimálne fungovať. To pomáha včas identifikovať slabé miesta a problémy so škálovateľnosťou.
Funkčné testovanie (Functional testing): Funkčné testovanie overuje, či je softvér pripravený na poskytovanie služieb zákazníkom. Napríklad softvér dodávateľského reťazca by mal byť schopný upozorniť nákladné vozidlá, aby prišli do tovární, keď sú zásoby k dispozícii na expedíciu.
Regresné testovanie (Regression testing): Kontinuálne testovanie nepretržite vykonáva regresné testy, aby sa zabezpečilo, že nové zmeny kódu nezavádzajú nové chyby alebo neporušujú existujúcu funkčnosť.
Testovanie bezpečnosti (Security testing): Nepretržité testovanie zahŕňa bezpečnostné testovanie, ako je skenovanie zraniteľností a penetračné testovanie, s cieľom identifikovať a odstrániť bezpečnostné chyby a zraniteľnosti skôr, ako môžu byť zneužité v produkcii.
Testovanie kompatibility (Compatibility testing): Priebežné testovanie overuje, či softvér správne funguje na rôznych platformách, prehliadačoch a zariadeniach. To je kľúčové pre aplikácie, ktoré majú rôznorodú používateľskú základňu.
Frameworky používané na priebežné testovanie (continuous testing tools)
Hoci je k dispozícii mnoho nástrojov na kontinuálne testovanie, len veľmi málo z nich stojí za to. Medzi niektoré významné nástroje na kontinuálne testovanie patria napr:
Selenium: Nástroj Selenium s otvoreným zdrojovým kódom, ktorý sa primárne používa na automatizáciu webových prehliadačov, podporuje viacero jazykov a môže sa pochváliť rozsiahlou komunitou. Okrem toho Selenium podporuje širokú škálu populárnych operačných systémov (Windows, macOS, Linux) a prehliadačov (Chrome, Firefox, Safari), takže je ideálny na testovanie v rôznych prostrediach.
Jenkins: Jenkins je automatizačný server dostupný ako open-source, ktorý zjednodušuje rôzne prvky vývoja softvéru vrátane testovania, nasadzovania zmien, vytvárania a podpory kontinuálnej integrácie a dodávania. Po nastavení servera Jenkins budeš môcť spustiť sériu automatizovaných testov a buildov, čím sa zabezpečí, že do produkcie sa dostane len stabilný (a otestovaný) kód.
Appium: Appium je open-source framework na automatizáciu testovania mobilných webových aplikácií. Umožňuje vytvárať testy naprieč prehliadačmi pre počítače aj mobilné zariadenia. Mnohí poskytovatelia cloudových zariadení teraz ponúkajú služby testovania založené na Appium.
Appium je nástroj na vývoj, nahrávanie, vykonávanie a skúmanie výsledkov testov priamo v cloude. Appium nielenže umožňuje automatizovať testy na fyzických zariadeniach aj na simulátoroch alebo emulátoroch, ale umožňuje to aj bez rekompilácie aplikácie.
Eggplant: Eggplant je nástroj na kontinuálne testovanie, ktorý poskytuje jedinečný prístup k testovaniu: riešenie založené na obrázkoch. Namiesto prezentovania testovacích skriptov Eggplant komunikuje s testovanou aplikáciou (AUT), ktorá simuluje pohľad používateľov.
Eggplant poskytuje testovacie laboratórium, ktoré poskytuje nepretržitý prístup k nepretržitému testovaniu a nasadeniu. Integruje sa s ďalšími nástrojmi CI/CD, ako sú Jenkins a Bamboo. Táto integrácia umožňuje používateľom Eggplant vykonávať komplexné testovanie vrátane unit, funkčných a výkonnostných testov.
JUnit/NUnit/TestNG: Frameworky určené na skriptovanie a vykonávanie testov v programovacích jazykoch, ako sú Java (JUnit a TestNG) a .NET (NUnit).
Cucumber: Cucumber je nástroj, ktorý uľahčuje vývoj riadený správaním (behavior driven development – BDD) a umožňuje vykonávať dokumentáciu funkcií v business jazyku.
Tipy pre efektívne priebežné testovanie
Continuous testing je efektívna stratégia, pretože podporuje včasné a časté testovanie. Tu je niekoľko osvedčených postupov, ako z kontinuálneho testovania vyťažiť čo najviac:
- Záväzok poskytovať najlepšiu kvalitu
Úspech v rámci priebežného testovania závisí od kolektívneho záväzku poskytovať najvyššiu kvalitu. Spolupráca všetkých tímov vrátane vývojového a testovacieho je nevyhnutná. Aj netechnické tímy, ako sú zainteresované strany a product owneri, by mali zosúladiť svoje pracovné návyky a zmýšľanie s cieľom podporiť kultúru nepretržitého testovania.
- Testuj v každej fáze vývojového cyklu
Testovanie v každej fáze vývojového cyklu softvéru umožňuje včasné odhalenie chýb, čím sa minimalizujú náklady v porovnaní s opravou týchto chýb vo výrobe. Urobte z testovania základný krok v každom procese, aby ste zabezpečili, že kód bude fungovať tak, ako bol navrhnutý, a to aj pri nových aktualizáciách.
- Viac automatizácie testovania
Hoci kontinuálne testovanie je stále možné dosiahnuť manuálnym testovaním, automatizácia zvyšuje rýchlosť a pokrytie chýb, pri ktorých môže testovanie fungovať. Automatizácia čo najväčšieho množstva činností v životnom cykle vývoja ti pomôže dosiahnuť rýchlejšie releasovanie verzií. Maj na pamäti, že ak prechádzaš z manuálneho procesu testovania, nastavenie automatizácie si vyžiada určitý čas.
- Integrácia nástrojov
Kontinuálne testovanie nie je len o automatizácii. Je to o používaní správnych nástrojov, vďaka ktorým je testovanie dostupnejšie, rýchlejšie, komplexnejšie a efektívnejšie.
- Sledovanie metrík
Kvantifikovateľné metriky ti umožnia zistiť, ako dobre prebieha testovanie. Priebežné testovanie poskytuje okamžité výsledky, aby si zistil, či softvér funguje podľa očakávaní. Komplexné údaje pomáhajú merať pokrok, kvalitu výstupov a návratnosť investícií do obchodnej hodnoty.
- Ušetri čas s headless vykonávaním testov
Headless execution je metóda spúšťania automatizovaných testov, ktoré nepoužívajú žiadne používateľské rozhranie prehliadača alebo grafické rozhranie. Tento proces znižuje počet zbytočných zahltení vyrovnávacích pamätí, súborov cookie alebo zdrojov, ktoré sa používajú, aby sa získali výsledky, na ktorých naozaj záleží: či aplikácia beží podľa očakávania.
- Začlenenie testovania výkonnosti do cyklu dodávania
Testovanie výkonnosti je prospešné, pretože kontroluje rýchlosť, odozvu a stabilitu aplikácie. Je to proces, ktorý pozoruje, ako systém beží, a nachádza riešenia na prekonanie prípadných nájdených problémov. Testovanie výkonu ako také by malo byť neoddeliteľnou súčasťou priebežného testovania.
Záver
Continous testing sa stalo pre podniky nevyhnutným, aby si v modernej dobe udržali konkurencie schopnosť. Stručne povedané, kontinuálne testovanie DevOps formovalo odvetvie vývoja softvéru. Každá spoločnosť zaoberajúca sa vývojom softvéru si osvojila model testovania s cieľom vytvárať vysokokvalitné produkty, ktoré uspokoja používateľov včas a s menším počtom rizík alebo chýb. Kontinuálne testovanie je tu na dlhé obdobie a pre vývojára, ktorý používa agilnú metodiku alebo metodiku DevOps, je kontinuálne testovanie nevyhnutnosťou. Aj keď existujú výzvy, ktoré kontinuálne testovanie prináša, výhody ich vysoko prevyšujú.
Ak si IT tester alebo automatizovaný tester a vieš po nemecky, pozri si naše firemné benefity a reaguj na najnovšie pracovné ponuky.