TS Flashcards
(50 cards)
7 zakladnich principu testovani
- Testovani pouze najde chyby, ale nedokaze, ze chyby nejsou
- Nelze otestovat vsechno
- Testovani by mel byt nazaseno v kazde fazi vyvoje systemuu
- Defekty se shlukuji, chyby nejsou rozprostreny rovnomerne
- Stale ty same testy casem nebudou moct nalezt chyby - update
- Dukladnost testovani se odviji od zopdovednosti systemu
- Nalezeni a oprava chyb nezachrani nefunkcni pozadavky
Zakladni deleni testu podle typu
- Podle test levels:
- vyvojarske
- integracni
- systemove
- uzivatelske akcepcni - Podle znalosti vnitrni struktury:
- black-box
- white-box
- grey-box - Podle toho, kdo a kde testuje:
- alfa testy
- beta tesy - Podle technickeho postupu nebo charakteristiky systemu
- unit testy
- funkcni testy
- E2E testy
- zatezove testy
- penetracni testy
- crash testy…
Black box, white box, grey box
- Black box - nevime nic o systemu, tedy zname jenom co prijde a co ma vyjit
- testovani scenare pisu jen podle analyzy, specifikace nebo dokumentace, aniz bych znal struktury systemu
- treba testovani podle use-case - White box
- testovaci scnerae vytvarim se znalosti vnitrni struktury a funkcionality
- treba staticka analyza kodu, treba podle radek - Grey box - kombinace obou
Verifikace vs validace
Verifikace - zda system vyvijime spravne podle predpisu a dokumentace
Validace - zda vyvijime to, co klient pozadoval
Tedy je to bud technicka kontrola pozadavku, nebo business kontrola pozadavku na system
V-model
Zakladni model vyvoje a testovani softwaru:
Z pohledu vyvoje:
1. Business model
2. Pozadavky
3. Funkcni navrh
4. Technicky navrh
5. Implementace
Pod kazdou fazi mame odpovidajici tetovani:
1. Business model - produkcni provoz, prod
2. Pozadavky - uzivatelske akcepcni testy, QA
3. Funkcni navrh - systemove testy
4. Technicky navrh - integracni testy
5. Implementace - vyvojarske testy
Nevyhodou ale je, ze zavlecene chyby uz na zacatku pozadavku se muzou najednou objevit az v QA na samem konci, treba pri spatnem pochopeni pozadavku klienta, a oprava chyby je extremne draha
Test Basis a Test Level
Test Basis - leva strana V-modelu, tedy mnozina dat, nad kterou budeme vytvaret testy
- vsechny informace pro testovaci scenare
Test Level - prava strana V-modelu, tedy uz samostatne testovani, ktere ma za ukol otestovat odpovidajici hladinu V-modelu, zda patricny basis je naimplemetovan podle pozadavku
Boehmuv prvni zakon
Chyby se vyskytuji nejcasteji ve fazich pozadavku a navrhu aplikace. Cim pozdeji se odhali, tim exponencialne drazsi je jejich oprava
W-model
Realnejsi a pouzivanejsi pristup vyvoje systemu, ktery pridava kontroly k V-modelu aby v kazdem korku byla jistota, ze se vykonava jen to co ma
- Business model - revize- produkcni provoz - testy po nasazeni
- Pozadavky - revize - instalace systemu - UAT
- Funkcni navrh - revize - sestaveni systemu - systemove testy
- Technicky navrh - revize - sestaveni komponent - integracni testy
- Implementace - vyvojarske testy
UAT - uzivatelske akcepcni testy
Testovaci scenar
Jednoynacnz predpis, jakou akci v testovane aplikaci vzvolat a jakz je ocekavanz vzsledek
Je to predpis pro test, nez se zance psat
- evidujeme scenare v nastroji nejakem
- musi se udrzovat updatovana vuci aplikaci
- anglicky test case
Bud high nebo low level podle konkretnosti dat, low level scenar pracuje primo s dosazovanymi hodnotami konkretne.
High level pracuje abstaktne bez konkretnich hodnot ale pouze logicky prubeh aplikace:
treba “zmenim cenu produktu za urcitych podminek -> cena se zmenila” VS
“nastavim cenu na 10kc -> nova cena 10kc”
Struktura testovaciho scenare
ID
Nazev testu
Popis testu
Vstupni podminky
Testovaci data
Ocekavany vysledek
Stav pripravy
Nepovinne polozky:
shnuti testu
autor
priorita
testovaci prostredi
pokryte pozadavky
pokryte casi apliakce
Po spusteni se uvede:
ID
Souhrnny vysledek
Tester
Cas prvniho kroku
Cas posledniho krokku
Nalezene chyby
Regrese a test coverage
Regrese - zanaseni novych chyb vlivem oprav nebo zmen systemu
- casovy stres
- vyvojari neznaji celou strukturu systemu
Testovaci pokrytit
- jaka cast software a jeho funkci je pokryta tetovacimi scenari
- klidne na radky nebo procenta
SLA (Service Level Agreement
Dohoda mezi klientem a dodavatelem ohledne sluzeb
- treba Praci na odstraneni zavazne chyby musi dodavatel zacit do 4 hodin a opravit do 12 hodin…
Nebo “system musi byt dostupny neustale…”
Zavazky obou stran
Workaround - docasne, jednoduche, upravujici reseni
Typy chyb bugu podle priority
A - critical
Chyba blokuje podstatné procesy v aplikaci, významným
způsobem poškozuje data. Neexistuje workaround.
B - medium
Chyba výrazně znepříjemňuje práci s aplikací, je možné
aplikaci dočasně provozovat s touto chybou, ale
workaround je obtížný a znamená velké úsilí.
C - low
Chyba se kterou je možné aplikaci provozovat, znamená
akceptovatelný nekomfort, týká se nedůležitých částí
nebo dat. Existuje jednoduchý workaround.
Report o chybe
Na jeho základě vývojář znovu nasimuluje chybu, aby ji mohl lokalizovat a
opravit
Tester se nemusí pouštět do analýzy příčiny, podstatné je chybu dobře popsat
Typický report o chybě obsahuje:
* ID
* Název (shrnutí chyby)
* Odkaz na testovací scénář, který chybu odhalil
* Popis chyby
* Kde se chyba nalezla (modul aplikace, proces, funkcionalita, interface, …)
* Jaké kroky vykonat, aby se chyba vyvolala
* Nad jakými testovacími daty
* Testovací prostředí, build, release na kterém byla chyba nalezena
* Tester, který chybu nalezl
* Čas nálezu chyby
* Stav ve workflow opravy chyb (viz další slide)
Smoke test a test condition
Smoke test - sada zakaldnich testu proverujicich nejdulezitejsi funkcionalitu systemu
Test Condition - element nebo udalost v systemu, kterou je mozne proverit testovacim pripadem - treba funkce, transakce, strulktuaralni element
Klasifikační strom
- Můžeme vytvořit pro každý rozhodovací bod v aplikaci
- Dá se aplikovat na různých úrovních: vstup dat přes webový formulář, interní
výpočet a rozhodování v aplikaci, test integračního rozhraní, … - Uzly = classification ~ jednotlivé vstupy pro rozhodovací bod (příklad:
políčka z webového formuláře, část podmínky v procesu rozhodování, …) - Listy = třídy ekvivalence pro danou classification (viz dále)
Trida ekvivalence
mnozina vstupnich dat, pro kterou se program chova stejne
EC
Tedy vstupni data muzeme rozdelit na tridy ekvivalence
Muze byt bud Interval nebo diskrerni
Interval - rozmezi hodnot od az po
- tedy ma mezni podminky
Diskretni hodnoty - vycet
- vyber z predem dane mnoziny hodnot
- treba menu
- nejsou mezni podminky
- Validní třídy ekvivalence – nastavují situace, které systém zpracuje
standardním způsobem. „Správná data“. - Nevalidní třídy ekvivalence – nastavují situace, na které by měl systém
zareagovat korektním ošetřením chyby. „Naschvál zadaná neplatná data“
Typy trid ekvivalence podle validnosti
- Nevalidni z technickeho pohledu - spatny format vstupu, spatne cislo atd..
- vetsinou hruba chyba systemu az pad - Nevalidni z business pozadavku
- validni syntax, ale omezeni businessovy
- treba ze nesmi letet dite samo do 10 let - Validni
Tridy ekvivalence nesmi mit neprazdny prunik
Mezni podminka
Hodnota, ktera tvori hraniici mezi tridami ekvivalence nebo je o maly innkrement posunuta na jednu stranu
Tj pri testovani idealne otestujeme 3 pripady -> vlevo, mezni podminku, vpravo
Typy kombinaci vstupnich hodnot pro efektivni pokryti
Od nejvetsiho maximalniho pokryti po nejmensi:
- 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
- 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/Desicion COverage
- Relativně malý počet kombinací pro testy střední / nízké intenzity
- Nekritický SW – funkční testy - CC – Condition Coverage, DC – Decision Coverage
MCC
rincip
* Všechny možné kombinace výsledků podmínek v logickém výrazu jsou
testovány alespoň jednou
Počet kombinací
* pro logický výraz: 2(počet podmínek)
* pro obecný klasifikační strom:
(počet EC ve vstupu1) * (počet EC ve vstupu2) * (počet EC ve vstupu3) …
EC … třída ekvivalence
* Nejvyšší úroveň pokrytí
MC/DC
MC/DC
Princip
* Každý z výsledků všech podmínek v logickém výrazu je otestován alespoň jednou
a zároveň každá z podmínek nezávisle ovlivnila výsledek logického výrazu
* Pracuje s termínem neutrální hodnota - takova, ktera neovlivni vysledek rozhodovnani i kdyby se zmenila
- redukuje podminky a kombinace ktere budou nesplnitelne i po zmene vstupnich parametru (treba AND nikdy nebude splnen, pokud alespon jeden clen je 0, takze to ani nezkousime testovat tento pripad)
TODO PRIKLAD
Pairwise testing
Potřebuji zredukovat počet kombinací vstupů pro test a pořád chci mít dobrou
šanci odhalit chybu.
Princip
* Statistika: Pokud je někde v software defekt, aktivuje se nejčastěji buď
* hodnotou jednoho konkrétního vstupu
* kombinací hodnot ve dvou vstupech
Vyberu konkrétní dvojice (pairwise testing) nebo trojice (thereewise testing)
vstupů a v nich pokryji všechny kombinace tříd ekvivalence, které do nich
budu zadávat
PRIKLAD:
Mějme:
OS - Windows, Linux, macOS
Prohlížeč - Chrome, Firefox
Platba - Karta, PayPal
1️⃣ Vygeneruj všechny dvojice mezi parametry:
OS × Prohlížeč:
(Windows, Chrome)
(Windows, Firefox)
(Linux, Chrome)
(Linux, Firefox)
(macOS, Chrome)
(macOS, Firefox)
→ 6 kombinací
Prohlížeč × Platba:
(Chrome, Karta)
(Chrome, PayPal)
(Firefox, Karta)
(Firefox, PayPal)
→ 4 kombinace
OS × Platba:
(Windows, Karta)
(Windows, PayPal)
(Linux, Karta)
(Linux, PayPal)
(macOS, Karta)
(macOS, PayPal)
→ 6 kombinací
Cílem je sestavit co nejmenší množinu úplných testovacích případů, aby všechny tyto dvojice byly alespoň jednou pokryty.
2️⃣ Stavba tabulky testovacích případů
Z těchto dvojic sestavíš celou tabulku s 3 sloupci (OS, Prohlížeč, Platba), tak aby všechny výše uvedené dvojice byly pokryty.
Např.:
Test # OS Prohlížeč Platba
1 Windows Chrome Karta
2 Windows Firefox PayPal
3 Linux Chrome PayPal
4 Linux Firefox Karta
5 macOS Chrome PayPal
6 macOS Firefox Karta
V této tabulce máš:
všechny OS × Prohlížeč kombinace (6 možností) ✅
všechny OS × Platba kombinace (6 možností) ✅
všechny Prohlížeč × Platba kombinace (4 možnosti) ✅
Takže tabulka pokrývá všechny dvojice — to je podstata pairwise.
Procesni test
Testuje uz pruchod jakousi sekvenci akci/funkci celym programem od zacatku do konce. Tedy zvoli nejakou strategii pruchodu a testuje, zda neco od Startu po Finish spadlo.
Znazornuje se do stromu/grafu, kde rozhodovaci body jsou uzly a hrany jsou funkce/akce ktere se maji vykonat.
Hran muze byt mnoho a chceme je nejak efektivne projit:
1. Vsechny mozne kombinace - treba rekurzivne backtrackingem vytvorit vsechny mozne testovaci scenare
- extremne narocny na cas, penize a prostredky
- Projdeme jen nektere kombinace podle bezpecnsotniho kriteria
- Hloubka pokrytit - test depth level - nam zavadi testovaci pokryti uzlu
- hlouba 1, 2, 3, … N
TDL1 - kazda hrana se projde minimalne jednou v testovacich scenarich
- tedy testovaci scenar (procesni test) navrhuju tak, ze mi pokryje nekolik hran
- takovych testu muze byt vic, abych pokryl vsechny hrany
- muze dochazet k duplikatnim podcestam - otazka, zda je prochazet podle priotiry anebo spis fakt zatezove otestovat nekolikrat tu samou prioritni cestu
TDL2 - pro kazdy uzel vytvorime kombinace vstupnich a vystupnich hran
- prisnejsi podminka, protoze neprojde jen jednu variantu z uzlu, ale vsechny kombinace variant
TDL3 - pro kazdy uzel udela kombinaci vsech vstupnich a vystupnich delky dva
- jeste prisnejsi podminka ale uz mnohem slozitejsi na tvorbu
TDLN - vytvorit kombinace vsech vstupnich hran do uzlu a vsech nasledujicich hran delky N
- prakticky nemozne na tvorbu
- skoro kompletni pokryti
Vysledne pokryti cest (procesni test) sestavuju jako navazovani cest na sebe:
TDL1 - proste sekvencne je projdu za sebou od Startu do Finishe podle navaznosti
- zavedu nekolik testu abych pokryl vsechno
TDL2 - skaldam cestu jako domino, aby ba sene navazovaly sousedni hrany
TDL3 - podobne…