8. diel - Testovacia analýza a návrh testov Nové
V predchádzajúcom kvíze, Kvíz - DevOps, úrovne testovania a statické testovanie, sme si overili nadobudnuté skúsenosti z predchádzajúcich lekcií.
V dnešnej lekcii test analysis a test designu si ukážeme prehľad testovacích techník, potom sa zameriame na techniky black-box testing, rozdelenie tried ekvivalencie, analýzu hraničných hodnôt, testovanie podľa rozhodovacej tabuľky a nevynecháme ani testovanie prechodov stavov.
Prehľad techník testovania
Techniky testovania pomáhajú testerom pri teste analysis a pri teste dizajnu a pomáhajú systematicky definovať test časy, podmienky, položky pokrytia a testovacie dáta:
Techniky black-box testing sú založené na analýze správania testovaného objektu bez ohľadu na jeho vnútornú štruktúru. Test casy sú nezávislé na implementácii a môžu sa použiť aj po zmene kódu, pokiaľ správanie zostáva rovnaké.
Techniky white-box testing sú založené na analýze vnútornej štruktúry softvéru. Tieto testy sú závislé od testu dizajnu a môžu byť vytvorené až po dokončení implementácie.
Techniky experience-based testing (techniky testovania založené na skúsenostiach) využívajú znalosti a skúsenosti testerov, čo umožňuje odhaliť defekty, ktoré iné techniky nemusia zachytiť. Efektivita závisí od schopností testerov.
Techniky black-box testing
Techniky black-box testing zahŕňajú equivalence partitioning (rozdelenie tried ekvivalencie), boundary valut analysis (analýzu hraničných hodnôt), decision table testing (testovanie podľa rozhodovacej tabuľky) a state transition testing (testovanie prechodov stavov).
Equivalence partitioning
Equivalencia partitioning - EP je testovacia technika, ktorá rozdeľuje dáta na skupiny alebo triedy, kde všetky hodnoty v jednej triede majú byť spracované rovnakým spôsobom. Ak test nájde chybu pre jednu hodnotu v konkrétnej triede, je pravdepodobné, že rovnaká chyba by sa objavila aj pri iných hodnotách v tejto triede.
Equivalence classes
Equivalence classes (triedy ekvivalencie) je možné vytvoriť pre rôzne typy dát, ako sú vstupy (čo užívateľ zadá), výstupy (čo systém vráti), konfigurácia (nastavenie systému), interné hodnoty, časové údaje alebo rozhranie medzi systémami. Tieto triedy môžu byť rôzneho typu – napríklad spojité alebo diskrétne, usporiadané (zoradené), neusporiadané, konečné (s obmedzeným počtom hodnôt) alebo nekonečné.
Kritériá pokrytia
V EP sa za kritériá pokrytia považujú samotné equivalence classes. Aby bolo pokrytie úplné, musia testovacie scenáre zahŕňať aspoň jednu hodnotu z každej identifikovanej triedy. Pokrytie sa vyjadruje ako percento tried, ktoré boli otestované aspoň jedným testovacím scenárom, voči celkovému počtu identifikovaných tried. Mnoho testovaných systémov má viac sád equivalence classes, čo umožňuje, aby jeden test pokryl triedy z rôznych sád.
Každá trieda musí byť jedinečná (bez prekryvov) a obsahovať aspoň jednu hodnotu. Pri jednoduchých vstupoch je delenie na triedy obvykle jednoduché, ale pre zložitejšie dáta môže byť toto rozdelenie náročnejšie a vyžaduje starostlivý prístup. Triedy s platnými hodnotami sa nazývajú valid equivalence classes (platné triedy ekvivalencie), zatiaľ čo triedy s neplatnými hodnotami sú invalid equivalence classes (neplatné triedy ekvivalencie). Rozlíšenie medzi platnými a neplatnými hodnotami sa často líši podľa potrieb a pravidiel jednotlivých tímov alebo organizácií.
Praktický príklad
Predstavme si aplikáciu na registráciu užívateľov, ktorá vyžaduje, aby používatelia zadali vek v rozmedzí 18 – 56 rokov:
Valid equivalence class zahŕňa hodnoty ako 18, 25, 50. Test case overí, že ak používateľ zadá vek v tomto rozmedzí, systém ho úspešne zaregistruje. Invalid equivalence class zahŕňa vek menší ako 18 rokov, napríklad hodnoty 10 a 15. Test case overí, že ak používateľ zadá vek pod 18 rokov, systém zobrazí chybovú správu. A zahŕňa aj vek väčší ako 56 rokov. Napríklad hodnoty 58, 76. Ďalším prípadom môžu byť nečíselné hodnoty napríklad text alebo špeciálne znaky.
Boundary valut analysis
Boundary valut analysis - BVA je technika, ktorá sa zameriava na hraničné hodnoty equivalence classes. Možno ju použiť iba pri usporiadaných triedach, kde minimálne a maximálne hodnoty každej triedy sú jej hraničné hodnoty. Ak dva prvky patria do rovnakej triedy, všetky prvky medzi nimi musia byť tiež súčasťou tejto triedy.
BVA sa sústredí na hraničné hodnoty, pretože práve na týchto hraniciach sú chyby najpravdepodobnejšie. Typické defekty sú často výsledkom nesprávneho umiestnenia hraníc – buď nad alebo pod špecifikovanou hodnotou, alebo ich vynechanie.
Varianty BVA
Existujú dve varianty BVA, 2-hodnotová a 3-hodnotová. Tieto varianty sa líšia v počte položiek pokrytia potrebných na dosiahnutie 100% pokrytia hraničných hodnôt:
2-hodnotová BVA
- zahrnuje dvě položky pro každou hranici - hraniční hodnotu a jejího souseda ze sousední třídy,
- pro dosažení 100% pokrytí musí být test casy vykonány pro všechny identifikované hraniční hodnoty a jejich sousedy,
- pokrytí se měří jako poměr pokrytých hraničních hodnot k celkovému počtu identifikovaných hraničních hodnot.
3-hodnotová BVA
- zahrnuje tři položky pro každou hranici - hraniční hodnotu a oba její sousedy,
- některé z těchto sousedů nemusí být hraničními hodnotami žádné třídy, ale jejich zahrnutí je nezbytné pro dosažení 100% pokrytí,
- měření pokrytí zahrnuje hraniční hodnoty i jejich sousedy.
\---
3-hodnotová BVA je prísnejšia ako 2-hodnotová BVA a môže odhaliť defekty, ktoré by s 2-hodnotovým variantom zostali neodhalené:
Praktický príklad
Máme podmienku, ktorá stanovuje, že určitá akcia by sa mala vykonať, keď je hodnota premennej x menšia alebo rovná 10. Takže správna podmienka by v kóde mala vyzerať takto:
IF (x ≤ 10) …
Chybou pri implementácii sa však môže stať, že programátor zapíše podmienku takto:
IF (x = 10) …
V tejto chybnej podmienke sa akcia vykoná iba vtedy, keď sa hodnota x presne rovná 10, a nie vtedy, keď je menšia ako 10. To je samozrejme zle, pretože obmedzuje podmienku iba na hodnotu x = 10 namiesto hodnôt x ≤ 10.
2-hodnotová BVA
2-hodnotová BVA testuje iba dve hodnoty:
- hraničnú hodnotu (v našom prípade teda 10)
- hodnotu tesne za hranicou (v našom prípade teda 11)
3-hodnotová BVA
3-hodnotová BVA ide o krok ďalej a testuje tri hodnoty:
- hodnotu tesne pod hranicou (9)
- hraničnú hodnotu (10)
- hodnotu tesne nad hranicou (11)
Decision table testing
Decision tables (rozhodovacie tabuľky) sú efektívny nástroj na zaznamenávanie zložitej logiky, ako sú biznisové pravidlá, a sú vhodné na testovanie systémových požiadaviek, kde rôzne kombinácie podmienok vedú k rôznym výsledkom. Tabuľka sa skladá z dvoch hlavných častí - podmienky a výsledné akcie systému. Každý stĺpec reprezentuje jedno pravidlo rozhodovania, čo je kombinácia podmienok, ktorá určuje, ktoré akcie sa majú vykonať.
Symboly používané v tabuľkách
V tabuľkách s obmedzeným počtom vstupov sú podmienky a akcie zobrazené ako logické hodnoty - pravda/true alebo nepravda/false. V tabuľkách s rozšíreným počtom vstupov môžu podmienky a akcie spracovávať viac hodnôt.
Symboly používané v tabuľkách:
- "T" (true) – podmienka je splnená,
- "F" (false) – podmienka nie je splnená,
- "-" znamená, že hodnota podmienky je pre výsledok akcie irelevantná,
- "N/A" – podmienka je pre dané pravidlo neuskutočniteľná.
- "X" – akcia by mala nastať,
- "" (prázdna hodnota) – akcia by nemala nastať.
Decision table testing poskytuje systematický prístup k identifikácii všetkých kombinácií podmienok, čím znižuje riziko prehliadnutia niektorých variantov. Tabuľky pomáhajú aj pri odhaľovaní nedostatkov v požiadavkách. Pri veľkom počte podmienok môže byť spracovanie všetkých kombinácií časovo náročné, preto je možné použiť zjednodušené tabuľky alebo metódy založené na rizikách na zníženie počtu testov.
Praktický príklad
Predstavme si e-shop, ktorý ponúka rôzne zľavy na základe kombinácie podmienok. Či je zákazník nový, má vernostnú kartu, alebo či nákup prekročil čiastku 1000 Sk. Decision table určuje, kedy sa poskytne zľava:
V tomto prípade testovací tím vykoná testy pre všetky kombinácie podmienok, aby overil, že zľava je poskytovaná správne podľa pravidiel, napríklad keď je zákazník nový a prekročí 1000 Sk. Naopak ale nie je poskytovaná, pokiaľ nenakúpi nad 1000 Sk.
State transition testing
State transition diagram je nástroj, ktorý ukazuje, ako sa systém môže správať. Zobrazuje všetky možné stavy, ktoré môže systém mať, a prechody medzi nimi, teda situácie, kedy sa systém zmení z jedného stavu do druhého. K zmene stavu dochádza na základe určitej udalosti, napríklad kliknutie alebo zadanie hesla. Prechod môže mať aj guard condition (podmienku prechodu), ktorá musí byť splnená, aby prechod mohol nastať, a niekedy s ňou môže byť spojená aj akcia, ktorú systém pri prechode vykoná. Zvyčajná syntax prechodov je:
událost [podmínka přechodu] / akce
Ak nie je podmienka alebo akcia potrebná, môžu byť vynechané.
K state transition diagramu existuje ekvivalent – state transition table (tabuľka prechodov stavov). V tejto tabuľke sú stavy usporiadané do riadkov a udalosti s prípadnými podmienkami do stĺpcov. V každej bunke je zapísaný cieľový stav, kam sa systém dostane, pokiaľ daná udalosť a podmienka nastanú, a prípadne aká akcia sa pri tom vykoná. Tabuľka tiež ukazuje neplatné prechody - bunky sú prázdne tam, kde prechod nie je povolený.
Z takého diagramu alebo tabuľky sa potom tvoria testovacie scenáre. Test case potom sleduje sériu udalostí, ktoré vedú k určitej postupnosti zmien stavov, a môže pokryť viac prechodov v rámci jedného scenára.
Kritériá pokrytia
Existuje mnoho kritérií pokrytia pre state transition testing:
Pokrytie všetkých stavov
Položkami pokrytia sú jednotlivé stavy. Na dosiahnutie 100% pokrytia musí test casy pokryť všetky stavy. Pokrytie sa meria ako pomer pokrytých stavov k celkovému počtu stavov.
Pokrytie platných prechodov
Položkami pokrytia sú platné prechody. Na dosiahnutie 100% pokrytia musí test casy pokryť všetky platné prechody. Pokrytie sa meria ako pomer pokrytých platných prechodov k celkovému počtu platných prechodov.
Pokrytie všetkých prechodov
Položkami pokrytia sú všetky prechody (platné aj neplatné). Test casy musí pokryť všetky platné prechody a preveriť neplatné prechody. Je vhodné testovať jeden neplatný prechod na test case, aby sa znížilo riziko maskovania defektov (situácia, keď jeden defekt skryje druhý). Pokrytie sa meria ako pomer prechodov, ktoré boli pokryté, k celkovému počtu všetkých prechodov.
Praktický príklad
Predstavme si výťahový systém so štyrmi stavmi: v kľude, jazda hore, jazda dole a dvere otvorené:
Systém prechádza medzi týmito stavmi na základe udalostí, ako je stlačenie tlačidla alebo príchod na poschodie. Napríklad po stlačení tlačidla pre jazdu nahor výťah prejde zo stavu "V pokoji" do stavu "Jazda hore". Po príchode do cieľového poschodia prejde do stavu "Dvere otvorené" a po zatvorení dverí sa vráti späť do stavu "V pokoji". Neplatným prechodom by bolo stlačenie tlačidla pre jazdu nahor, keď výťah už ide nahor, čo by mal systém ignorovať:
Pokrytie všetkých stavov je slabšie kritérium ako pokrytie platných prechodov, pretože ho možno dosiahnuť bez pokrytia všetkých prechodov. Najpoužívanejšie je pokrytie platných prechodov, ktoré by malo byť minimálnou požiadavkou pre bezpečnostne kritický softvér. Plné pokrytie platných prechodov zaručuje aj plné pokrytie stavov, zatiaľ čo plné pokrytie všetkých prechodov garantuje tak pokrytie všetkých stavov, ako aj pokrytie všetkých platných prechodov.
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, Techniky testovania bielej skrinky , si ukážeme techniky testovania bielej skrinky a techniky testovania založené na skúsenostiach.