1. diel - Základy testovania Nové
V dnešnej lekcii základov testovania softvéru sa dozvieme, čo je testovanie a prečo je nevyhnutné. Prejdeme si základné princípy testovania, testovacej činnosti a role a nakoniec si zhrnieme osvedčené postupy pri testovaní.
Minimálne požiadavky
Kurz predpokladá znalosť základných konštrukcií ľubovoľného programovacieho jazyka a objektovo orientovaného programovania.
Prečo testovať
Najprv sa poďme pozrieť, prečo je testovanie nevyhnutnou súčasťou vývojového procesu. Hlavným cieľom je odhaliť chyby a nedostatky čo najskôr, aby sa zabránilo ich šíreniu do produkčnej verzie, kde by mohli spôsobiť závažné problémy. Nedostatočné testovanie vystavuje firmu nielen riziku finančných strát a poškodeniu reputácie, ale aj právnym dôsledkom. Čo je však ešte dôležitejšie, zle otestovaný softvér môže ohroziť ľudské životy, najmä v oblastiach, ako je zdravotníctvo, doprava alebo bezpečnostné systémy.
Testovanie nie je len technickou formalitou, ale kľúčovým krokom k ochrane používateľov a ich bezpečia.
Príklad - Softvérová chyba
V rokoch 2009-2011 čelila Toyota obrovskému problému, keď niektoré modely automobilov zaznamenali nechcené zrýchlenie, čo viedlo k stovkám nehôd a údajne k úmrtiam až 89 ľudí. Spočiatku bola za príčinu považovaná mechanická závada, najmä zle umiestnené podlahové koberčeky, ktoré mohli zaseknúť pedál plynu. Neskôr sa však ukázalo, že hlavný problém leží v softvéri elektronického systému riadenia škrtiacej klapky (ETCS). Tento softvér obsahoval chyby, ktoré viedli k tomu, že vozidlo mohlo zrýchliť bez zásahu vodiča. Toyota bola nútená zvolať viac ako 10 miliónov vozidiel po celom svete, čo viedlo k nákladným opravám a finančným stratám. Toyota sa tiež stretávala s mnohými súdnymi spormi, kedy musela čeliť obvineniam zo zanedbania bezpečnosti:
Príklad - Chybná aktualizácia
V júli 2024 došlo k rozsiahlemu globálnemu IT výpadku, ktorý zasiahol rôzne sektory po celom svete. Tento incident bol spôsobený chybnou aktualizáciou bezpečnostného softvéru Falcon od spoločnosti CrowdStrike. Aktualizácia, ktorá bola nasadená na systémy využívajúce Microsoft Windows, viedla k masívnemu zlyhaniu tisícov zariadení. Incident spôsobil tzv. modrú obrazovku smrti, čím boli zasiahnuté kľúčové infraštruktúry, ako sú letiská, nemocnice a tiesňové služby. To viedlo k tisícom zrušených letov, banky a platobné terminály boli tiež dočasne mimo prevádzky. Boli nefunkčné nemocničné systémy, čo viedlo k oneskoreniu či zrušeniu kľúčových lekárskych zákrokov. V niektorých regiónoch USA došlo k zlyhaniu tiesňových volaní, čo ohrozilo bezpečnosť a zdravie ľudí, pretože sa k nim pomoc nedostala včas:
Čo je to testovanie?
Testovanie softvéru je proces hodnotenia kvality softvéru s cieľom minimalizovať riziko zlyhania. Ide o sadu činností zameraných na odhaľovanie chýb a vyhodnocovanie kvality. Testovanie zahŕňa nielen verifikáciu, teda kontrolu, že vývojový tím implementoval funkciu, ktorá zodpovedá technickým špecifikáciám, napríklad že tlačidlo "Odoslať" správne reaguje na stlačenie, ale aj validáciu, teda kontrolu, či táto funkcia spĺňa skutočné potreby užívateľa, teda či tlačidlo "Odoslať" skutočne odosiela dáta tak, ako užívateľ očakáva.
Môže byť dynamické alebo statické.
Static Testing (Statické testování)
- nevyžaduje spuštění testovaného softwaru
- zahrnuje revize a statickou analýzu
Dynamic Testing (Dynamické testování)
- vyžaduje spuštění testovaného softwaru
- používá různé techniky testování a přístupy k testování s cílem definovat testovací případy
\---
Testovanie nie je len technická činnosť, ale vyžaduje plánovanie, riadenie, odhadovanie, monitorovanie a kontrolu. Táto činnosť zahŕňa analytické zručnosti, kritické myslenie a špecializované znalosti testerov.
Ďalšie informácie o konceptoch testovania softvéru možno nájsť v norme ISO/IEC/IEEE 29119-1.
Ciele testovania
Typické ciele testovania sú:
- ohodnotenie pracovných produktov,
- vyvolanie zlyhania a nájdenie chýb,
- zabezpečenie požadovaného pokrytia testovaného objektu,
- zníženie úrovne rizika,
- overenie, či boli splnené požiadavky,
- overenie, že testovaný objekt vyhovuje zmluvným, právnym a regulačným požiadavkám,
- poskytnutie informácií všetkým stranám tak, aby mohli prijať rozhodnutie,
- vytvorenie dôvery v danú úroveň kvality,
- kontrola, či je testovaný objekt kompletný a funguje podľa očakávania.
Testovanie a ladenie
Testovanie môže vyvolať zlyhanie, ktoré sú spôsobené chybami v softvéri - dynamic testing, alebo môže priamo odhaliť defekty v testovanom objekte - static testing.
Dynamic testing sa snaží vyvolať zlyhanie a ladenie sa zaoberá hľadaním príčin takýchto zlyhaní, ich analýzou a odstránením. Proces ladenia v tomto prípade zahŕňa reprodukovanie zlyhania, diagnostiku a opravu príčiny.
Praktický príklad
Predstavme si, že vyvíjame aplikáciu pre e-shop a vykonávame testovanie jej funkčného košíka, ktorý umožňuje zákazníkom pridávať položky, odoberať ich a dokončiť objednávku:
Dynamic testing
Tester vykonáva dynamic testing, teda simuluje chovanie užívateľa tým, že pridáva položky do košíka a pokúša sa odoslať objednávku. Pri testovaní zistí, že po pridaní položky do košíka aplikácia neočakávane spadne (zlyhanie). Vývojár potom začne ladiť problém, snaží sa reprodukovať zlyhanie – pridá do košíka rovnaké tri položky a znova sleduje pád aplikácie. Potom skúma príčinu zlyhania. Následne túto chybu opraví a otestuje, či aplikácia naďalej funguje správne.
Confirmation a regression testing
Následné tzv. confirmation testing (konfirmačné testovanie) overuje, či došlo v dôsledku týchto opráv k vyriešeniu problému. Vykonáva ho ideálne rovnaká osoba, ktorá vykonala prvotný test. Okrem toho je možné tiež vykonať tzv. regression testing (regresné testovanie), ktoré sa zameriava na overenie, že zmeny v kóde (napr. opravy chýb, nové funkcie alebo úpravy existujúcich funkcií) neovplyvnili negatívne už fungujúce časti aplikácie. Cieľom je zabezpečiť, že nové zmeny nevyvolali chyby alebo neočakávané správanie v oblastiach, ktoré boli predtým správne otestované a fungovali bez problémov. V našom príklade teda tester potom vykoná confirmation testing, kedy zopakuje rovnaký test, aby sa ubezpečil, že pád aplikácie bol opravený. Pokiaľ košík funguje správne, je problém vyriešený. Okrem toho vykoná aj regression testing a skontroluje, či oprava chyby v správe košíka neovplyvnila ďalšie časti aplikácie.
Static testing
Static testing priamo identifikuje defekt, ladenie sa potom zaoberá jeho odstránením. Obvykle pri ňom nie je nutné vykonávať reprodukovanie a diagnostiku, pretože static testing nachádza priamo defekty a nemôže spôsobiť zlyhanie. Tester napríklad môže vykonať kontrolu zdrojového kódu. Zistí, že v kóde je zle ošetrená manipulácia s prázdnym košíkom, kde chýba kontrola, či košík obsahuje nejaké položky, pred pokusom o dokončenie objednávky. Na základe tejto analýzy tester odhalí defekt bez nutnosti spustenia aplikácie a informuje vývojárov, ktorý tento problém následne opraví.
Zdrojom tejto lekcie sú Učebné osnovy - Certifikovaný tester základnej úrovne ver. 4.0. Copyright © 2023 autori verzie 4.0: Renzo Cerquozzi, Wim Decouter, Klaudia Dussa-Zieger, Jean-François Riverin, Arnika Hryszko, Martin Klonk, Michaël Pilaeten, Meile Posthuma, Stuart Reid, Eric Riou du Cosquer (predseda) Stapp, Stephanie Ulrich (podpredseda), Eshraka Zakaria
V budúcej lekcii, Testovací proces , si vysvetlíme prečo je testovanie nevyhnutné. Pozrieme sa na základné princípy testovania. A nevynecháme ani základné princípy, testovacie činnosti, testware a role v testovaní.