Table of Contents

Techniky návrhu testovacích scénářů, jednotkové testy, automatické funkční testy, testovací strategie, testovací data

B6B36TS1

  1. Organizace testování, typy testů, V-model a W-model.
  2. Určení vstupních dat do testů: Mezní podmínky, třídy ekvivalence.
  3. Určení vstupních dat do testů: Párové testování, kombinatorické testování.
  4. Vytváření testovacích scénářů: Procesní testy - model problému, jak vypadá testovací scénář, kritérium pokrytí Test Depth Level, vytváření testů.
  5. Vytváření testovacích scénářů: Testy konzistence dat - model problému, jak vypadá testovací scénář, vytváření testů.
  6. Způsoby vytváření testovacích dat.
  7. Jednotkové testy: princip testu, vlastnosti, které má mít jednotkový test, odlišnosti proti integračním testům.
  8. Automatizované testy založené na simulaci akcí uživatele v uživatelském rozhraní systému: princip testu, příklad technologie, rozdíl oproti jednotkovým testům.
  9. Testovací strategie: princip metody Business Driven Test Management, její základní části a jejich souvislosti.

Organizace testování

Organizace testování, typy testů, V-model a W-model.

Proč testovat software - člověk zanese chybu, která způsobí selhání systému ⇒ Defekty je potřeba najít, než se systém začne používat. Terminologie - obecně nejednotná - v předmětu dle ISTQB foundation level sylabu a TMAP Next , tak aby nepřekrývala ISTQB standard

Verifikace - Proces vyhodnocování, jestli produkt konkrétní vývojové fáze odpovídá požadavkům na tento produkt definovaným na začátku této fáze.

Validace - Vyhodnocování software v průběhu nebo na konci jeho vývoje, jestli software odpovídá zadaným požadavků.

7 základních principů testování

  1. Testování ukazuje přítomnost defektů - Testování může ukázat, že jsou defekty přítomny, ale nemůže dokázat, že v softwaru nejsou žádné defekty.
  2. Vyčerpávající testování je nemožné - Testování všeho (všech kombinací vstupů a vstupních podmínek) není realizovatelné s výjimkou triviálních případů ⇒ musí se stanovit priority
  3. Včasné testování - Testovací aktivity by měly v rámci životního cyklu vývoje softwaru nebo systému začít tak brzy, jak je to jen možné, a měly by být zaměřeny na definované cíle.
  4. Shlukování defektů - Malé množství modulů obsahuje většinu defektů zjištěných v průběhu testování před uvolněním, nebo je zodpovědné za nejvíc provozních selhání.
  5. Pesticidní paradox - Jsou-li stále opakovány tytéž testy, časem stejný soubor testovacích případů nenalezne žádné nové defekty ⇒ Je potřeba existující testovací případy pravidelně revidovat a upravovat a je potřeba napsat nové, odlišné testy
  6. Testování je závislé na kontextu - Testování je vykonáváno odlišně v různých kontextech (Bezpečnost, Acessibility,..)
  7. Falešná představa o neexistenci omylů - Nalezení a opravení defektů nepomůže, pokud je vytvořený systém nepoužitelný a nesplňuje potřeby a očekávaní uživatelů.

Typy Testů

Typy testů se dají kategorizovat podle několika různých pohledů:

  1. Podle test levels:
    • Vývojářské testy
    • Integrační testy
    • Systémové testy
    • Uživatelské akceptační testy
  2. Podle technického postupu testu nebo charakteristiky kvality systému:
    • Unit testy kódu
    • Funkční testy
    • E2E (end-to-end) testy
    • Zátěžové testy
    • Penetrační testy
    • Testy provozuschpnosti na platformě
    • Crash testy a testy zotavení systému
  3. Podle znalosti vnitřní struktury:
    • Black-box testing
    • White-box testing
    • Grey-box testing
  4. Podle toho, kdo a kde testuje:
    • Alfa testy
    • Beta testy

V-model

Test Basis - Definice dle ISTQB: Dokumentace, na jejíž základě jsou vytvářené testovací scénáře. Zde je to část V směřující dolů ('\')

Test Level - Skupina testovacích aktivit, které jsou organizované a řízené jako jeden blok. Má svůj samostatný cíl. Zde část V směřující vzhůru ('/')

Nevýhoda V-modelu

Bohémův zákon - Chyby jsou nejčastější ve fázích požadavků a návrhu a čím později odhalíme chybu v průběhu vývoje systému, tím je dražší

Přesně to se děje u V modelu, resp. drahé chyby způsobené špatnými požadavky odhalujeme až ke konci testování.

W-model

Určení vstupních dat do testů: Mezní podmínky, třídy ekvivalence.

⇒ Můžeme vytvořit klasifikační strom pro každý rozhodovací bod v aplikaci

Třídy ekvivalence (Equivalence class - EC)

„Do vstupu můžu zadat velké množství hodnot. Jak vybrat vhodnou množinu pro test?“ → Konkrétní množinu hodnot, které jsou zadat do vstupu, rozdělíme na podmnožiny - třídy ekvivalence:

Konkrétní hodnoty (data) pro test pak vybereme z vytvořených tříd ekvivalence. Kolik jich vybrat? Záleží, jaké chceme mít *testovací pokrytí*

Typy

  1. Dle typu vstupu:
    • Interval - Například pro: částka, věk, číslo účtu
      • Hranice intervalu = mezní podmínky (viz dále)
    • Diskrétní hodnoty - Například pro: typ prohlížeče, metoda platby, položka v menu, výběr z položek v číselníku
      • Nejsou mezní podmínky
  2. Dle validity dat:
Typ třídy ekvivalence Co znamená pro aplikaci Příklad: políčko pro číslo účtu
---
Nevalidní třída ekvivalence z technického pohledu Data, která neodpovídají datovému typu vstupu = neplatná data, která aplikace musí ošetřit, aby nezpůsobila pádŘetězec; Číslo, ale jako číslo účtu nevalidní formát
Nevalidní třída ekvivalence z business pohledu Data, která sice odpovídají datovému typu vstupu, ale z pohledu specifikace business procesu jsou nevalidní Číslo účtu ve validním formátu, ale mimo nadefinovaný rozsah číselné řady účtů; Číslo účtu ve validním formátu ve stejné bance, ale takový účet neexistuje
Validní třída ekvivalence Platná data, která mají být zpracovávána podle business specifikace, vyvolávají korektní průběhy procesů v aplikaci Číslo účtu ve validním formátu v jiné bance, ale takový účet neexistuje; Existující číslo účtu ve stejné bance; Existující číslo účtu v jiné bance

Pravidla konzistence při určování tříd ekvivalence:

Jak určit třídy ekvivalence?

Mezní podmínky

Typ třídy ekvivalence Kde vzít mezní podmínky Jak je najít Příklad: věk pasažéra
----
Nevalidní třída ekvivalence z technického pohledu Technické limity daného vstupu (někdy i specifikace) Rozsah hodnot pro validní vstup; Datový typ v programu; Datový typ v databáziPolíčko pro věk pasažéra má rozsah platné hodnoty 0-150
Nevalidní třída ekvivalence z business pohledu Požadavky; Specifikace Informace ve specifikaci, že určité hodnoty (daný rozsah hodnot) nejsou povoleny nebo jsou ze zpracování vyloučenyLimit věku je 150 let
Validní třída ekvivalence Požadavky; Specifikace Informace ve specifikaci, že od určité hodnoty (pro daný rozsah hodnot) dochází ke konkrétní variantě zpracování Pasažér od 2 let má vlastní sedadlo; Pasažér do 6 let musí letět s rodiči

Určení vstupních dat do testů: Párové testování, kombinatorické testování.

Jak nyní určíme vhodné kombinace dat v jednotlivých vstupech rozhodovacího bodu, aby naše testy našly co nejvíce chyb (v limitech toho, jakou kapacitu na ty testy máme)?

Technika Množství kombinací → testovací pokrytí Co testujeme (jen pro orientaci - berte s rezervou!)
---
MCC – Multiple Condition Coverage Kompletní množina všech kombinací Kritický SW – letadlo, lékařské přístroje, …
MC/DC – Multiple Condition/Decision Coverage Všechny kombinace, které mají vliv na výsledek rozhodovacího výrazu
Pairwise testig (pokrytí je škálovatelné, pozice zde je pro kompletní kombinaci všech dvojic) Výrazně menší počet kombinací, ale dle statistik stále odchytí většinu chyb Důležité části nekritického SW: Jádro programu, výpočty, které musí být správně
C/DC – Condition/Decision Coverage Relativně malý počet kombinací pro testy střední / nízké intenzity Nekritický SW – funkční testy
CC – Condition Coverage Relativně malý počet kombinací pro testy střední / nízké intenzity Nekritický SW – funkční testy
DC – Decision Coverage Relativně malý počet kombinací pro testy střední / nízké intenzity Nekritický SW – funkční testy

Párové Testování (Pairwise Testing)

Příklad

Kombinatorické Testování

  1. Condition coverage (CC)
    • Výstup každé podmínky (TRUE / FALSE) je vyhodnocen alespoň jednou
  2. Decision coverage (DC)
    • Alespoň jednou jsou vyhodnoceny všechny možné výstupy nějakého vyhodnocení ((A AND B) OR C)
  3. Condition / Decision coverage (C/DC)
    • Spojení CC a DC

Vytváření testovacích scénářů: Procesní testy

Model Problému

Jak vypadá testovací scénář

(viz vytváření testů)

Kritérium Pokrytí Test Depth Level

Hloubka pokrytí Popis Kdy použít (typicky)
---
1 Každá akce (hrana grafu) se vykoná jednou Testy málo prioritních akcí, smoke testy
2 Pro každé větvení (uzel) projdeme všechny kombinace možných vstupních akcí do uzlu a výstupních akcí z uzlu Střední úroveň testování
3 Pro každé větvení (uzel) projdeme všechny kombinace možných vstupních akcí do uzlu a 2 na sebe navazujících výstupních akcí Vysoká intenzita testů
N Pro každé větvení (uzel) projdeme všechny kombinace možných vstupních akcí do uzlu a N-1 na sebe navazujících výstupních akcí

Vytváření Testů

  1. Modelujeme aplikaci jako orientovaný graf.
  2. Identifikujeme vstupní a výstupní akce v každém rozhodovacím bodě.
  3. Určíme potřebnou úroveň pokrytí (TDL).
  4. Generujeme sekvence testů:
    • Kombinujeme akce tak, aby pokryly všechny požadované cesty.
    • Minimalizujeme opakování, pokud už je kombinace pokrytá.
    • Při omezených zdrojích preferujeme:
      • prioritní akce (z pohledu businessu nebo rizika),
      • nejdůležitější průchody.

Příklady:

Vytváření testovacích scénářů: Testy konzistence dat

Model Problému

Jaké jsou možné chyby?

Jak vypadá testovací scénář

Skládá se z posloupnosti operací:

Po každé operaci C, U, D se doporučuje spustit Read, abychom ověřili aktuální stav dat.

Kompletní pokrytí znamená testovat různé funkce, které čtou nebo mění entitu, nejen jednu hlavní.

Vytváření testů

  1. Sestav CRUD matici:
    • řádky = funkce aplikace,
    • sloupce = datové entity,
    • v buňkách = které CRUD operace daná funkce nad entitou vykonává.
  2. Udělej statickou kontrolu:
    • Mají všechny entity všechny potřebné CRUD operace?
    • Pokud ne, proč?
  3. Udělej dynamické testy konzistence:
    • Ověř, že kombinace operací nevede k poškození dat.
    • Sleduj, zda některá funkce nezpůsobí chybu, která se projeví až v jiné funkci.
  4. Prioritizuj testy:
    • Pokud nemůžeš pokrýt všechny kombinace, testuj prioritně nejdůležitější funkce a cesty.

Příklad:

BONUS: CRUD - vázané podmínky

Příklady:

  1. Entitu zákazník lze smazat, pokud má zaplacené všechny objednávky.
  2. Provozovnu lze smazat, pokud do ní nejsou přiřazení žádní zaměstnanci.

Pozor: Taková podmínka nemusí být jen na úrovni integrity v DB schématu!

Způsoby vytváření testovacích dat.

Proč jsou testovací data důležitá

Způsoby přípravy testovacích dat

  1. Ruční příprava dat
    • Vytvoření dat ručně přes funkce aplikace (CRUD → Create, Update).
  2. Automatické skripty
    • Automatizace ruční přípravy pomocí testovacích skriptů.
  3. Hromadné generování umělých dat
    • Automatizované generování dat podle struktury systému.
  4. Kopie produkčních dat
    • Použití reálných dat bez úprav.
    • Varianta s opatřeními: omezení přístupu, odstranění osobních/citlivých údajů.
    • Varianta se zmenšeným vzorkem dat.

Porovnání způsobů přípravy dat

Způsob Vstupní investice Provozní náklady Rizika
----
Ruční příprava Nízká Nízké Nízká
Automatické skripty Střední Střední Nízká
Hromadné generování dat Střední–velká (dle systému) Střední Nízká
Kopie produkčních dat bez úpravy Nízká Nízké Vysoká (právní a regulační)
Kopie produkčních dat s anonymizací Střední–velká Střední Nízká

Způsoby sdílení dat

Další možnosti

Jednotkové testy

Princip

Vlastnosti

Unit test X Integration test

Aspekt Jednotkové testy Integrační testy
---
Úroveň Testují jednotlivé bloky kódu (např. metody, třídy) izolovaně. Testují spolupráci více komponent (modulů, služeb, systémů).
Zaměření Ověření správnosti malých jednotek logiky. Ověření správnosti propojení mezi jednotkami a jejich interakce.
Nástroje Unit test frameworky (JUnit, TestNG). Automatizační frameworky, integrační nástroje, end-to-end testy.
Komplexita Nízká (zaměřeno na detaily). Vyšší (zaměřeno na celý proces, komunikaci, integrace).
Účel Rychlé odhalení chyb v kódu, prevence regrese. Ověření, že jednotlivé části systému fungují dohromady správně.
Příklad Test metody pro výpočet ceny. Test propojení mezi platebním modulem a bankovní API.

Automatizované testy založené na simulaci akcí uživatele v uživatelském rozhraní systému

Princip testu

Příklad technologie

Rozdíl oproti jednotkovým testům

Aspekt E2E testy (testy UI) Jednotkové testy
---
Úroveň Testují celý systém (od uživatelského vstupu po backend a zpět). Testují izolované části kódu (metody, funkce).
Zaměření Uživatelská zkušenost, integrační funkce, procesy napříč systémem. Logika a správnost jednotlivých bloků kódu.
Rychlost Pomalejší, protože zahrnují více vrstev systému. Velmi rychlé, běží přímo nad kódem.
Stabilita Náchylné k chybám způsobeným změnami UI nebo závislostí. Stabilní, méně závislé na okolí.
Nástroje Selenium, Cypress, Playwright, TestCafe, Puppeteer. JUnit, TestNG, NUnit, xUnit.
Účel Ověření, že celý systém funguje pro uživatele. Ověření, že logika kódu funguje podle očekávání.

Testovací strategie: princip metody Business Driven Test Management

Testovací Strategie Obecně

Princip metody Business Driven Test Management

Základní části metody

Souvislosti mezi částmi