Programování
Teorie testování
Proč testovat?
Testování se určitě řadí mezi dobré praktiky vývoje
softwaru
(best practices). Další takovou praktikou je např.
programovat objektově, používat vícevrstvou architekturu a podobně.
Některé praktiky bychom měli dodržovat opravdu ortodoxně, např. pro psaní
neobjektového kódu existuje opravdu jediný důvod a tím je neznalost
programátora.
Kdy testovat?
Testování je velmi
důležité
a v určité části projektu dokonce
nepostradatelné. Na druhou stranu, v prvních fázích
projektu
(a to zejména u start-upů), kdy se hraje na čas,
funkčnosti aplikace se často mění, a je třeba aplikaci co nejdříve
spustit, není vůbec dobrý nápad testy
psát.
Typy testů
Zaměřme se nyní na to, co na aplikaci testujeme. Typů
testů je hned několik. Obvykle nepokrývají úplně všechny možné
scénáře (všechen kód). Hovoříme o procentuálním pokrytí testy (code
coverage), většinou kritických částí aplikace.
Čím větší aplikace je,
tím více typů testů potřebuje
Jednotkové testy (Unit testy)
Obvykle testují
univerzální knihovny, nepíšeme je pro kód specifický pro
danou aplikaci. Jednotkové testy testují třídy, přesněji
jejich metody, jednu po druhé. Předávají jim různé vstupy
a zkouší, zda jsou jejich výstupy korektní
Akceptační testy
Tento typ testů je naopak úplně
odstíněn od toho, jak je aplikace uvnitř naprogramovaná, jsou to tedy
blackbox testy (nevidíme dovnitř). Každý test obvykle
testuje určitou funkčnost, např. test pro psaní článků
by testoval jednotlivé use cases s tím spojené (předat článek ke
schválení, schválit článek, zamítnou článek, publikovat článek jako
administrátor...).
Integrační testy
V dnešní době dosahují aplikace
již poměrně vysoké komplexnosti a velmi často bývají rozdělené do
několika služeb, které spolu komunikují a jsou vyvíjené zvlášť. Právě
integrační testy dohlíží na to, aby do sebe vše správně zapadalo.
Systémové testy
I když aplikace funguje dobře, na
produkčním prostředí podléhá dalším vlivům, se kterými musíme
rovněž počítat. Např. že by měla zvládat obsluhovat tisíc uživatelů v
jeden okamžik. To bychom provedli zátěžovým testem, který
spadá mezi systémové testy.
Blackbox & whitebox
Black box
Jako černou skříňku (black box) označujeme stav, kdy informace
dostupné testerovi spočívají ve znalosti vstupů do aplikace
a znalosti očekávaných výstupů. Tester nezná vnitřní logiku aplikace a
jeho pohled je z velké části uživatelský. Testování se v tomto případě nejčastěji opírá o
uživatelské požadavky, obvykle zpracované do určité formy business analýzy. Smyslem testů je ověřit,
že očekávané chování (definované právě vstupy a výstupy) odpovídá chování skutečnému.
White box
Bílá skříňka (white box) znamená, že tester má přístup ke všem informacím včetně zdrojového kódu.
Testování v tomto případě z větší části spočívá na testování právě samotného zdrojového kódu.
To může být až na úrovni čisté revize kódu bez toho, že by aplikace byla spuštěna.
Znalost vnitřní logiky aplikace dává testerovi možnost otestovat i situace, které
nejsou z vnějšího pohledu patrné. Jinak řečeno mnohem lépe se pokrývá testy podmínkový
strom, který jako tester vidím v konkrétní podobě než když mám o něm jen nejasnou
představu danou definovanými výstupy.
Test UI
Musí testovat člověk, nejde převést na člověka.
Usability testy
Usability testy se zaměřují na to, jak snadno a efektivně mohou uživatelé interagovat s vaší aplikací.
Tyto testy obvykle zahrnují reálné uživatele, kteří provádějí různé úkoly a poskytují zpětnou vazbu.
Testy výkonu
Testování výkonu, někdy zkráceně “perf testing”,
je proces prováděný za účelem zjištění, zda určitý
produkt bude dobře vykonávat očekávané procesy při
různém pracovním zatížení. To může mít podobu testování
výkonnosti webových stránek nebo testování výkonnosti při
testování softwaru, v závislosti na daném produktu.
Testování výkonnosti je určeno především k odhalení chybných parametrů výrobku, které lze změnit již v počáteční fázi životního cyklu výrobku, aby se předešlo větším problémům v budoucnu. To se často označuje jako hledání úzkých míst, což je jedna složka, která brzdí celkový výkon softwaru.
Testy výkonu webu jsou nezbytné, aby vývojáři mohli zúčastněným stranám poskytnout spolehlivé informace o výkonu aplikace a předpovědět, jak bude aplikace reagovat na různé úrovně provozu.
Testování výkonnosti je určeno především k odhalení chybných parametrů výrobku, které lze změnit již v počáteční fázi životního cyklu výrobku, aby se předešlo větším problémům v budoucnu. To se často označuje jako hledání úzkých míst, což je jedna složka, která brzdí celkový výkon softwaru.
Testy výkonu webu jsou nezbytné, aby vývojáři mohli zúčastněným stranám poskytnout spolehlivé informace o výkonu aplikace a předpovědět, jak bude aplikace reagovat na různé úrovně provozu.
Více informací: www.zaptest.com
Profiler
Profiler je nástroj, který se používá k analýze výkonu programu.
Shromažďuje data o tom, jak program běží, včetně informací o tom,
jak dlouho trvá spuštění jednotlivých funkcí, kolik paměti program
používá a jak často se používají různé části kódu. Tato data lze poté
použít k identifikaci úzkých míst v programu a ke zlepšení jeho výkonu.
Takhle to vypadá ve visual studiu
Více informací: learn.microsoft.com
Test Driven Development
Test-Driven Development (TDD) je přístup k vývoji software, který klade důraz
na psaní testů před samotným psaním kódu. Jde o iterativní proces, který se dá
shrnout do těchto kroků:
- Napsat test
- Spustit test
- Napsat kod
- Spustit testy
- Refakterovat kod
- Opakovat
Zdroje:
- https://www.zaptest.com/cs/co-je-testovani-vykonu-hluboky-ponor-do-typu-postupu-nastroju-vyzev-a-dalsich-veci
- https://www.itnetwork.cz/csharp/testovani/uvod-do-testovani-softwaru-v-csharp-net/?all-comments
- https://www.ackee.cz/blog/uzivatelske-testovani-pouzitelnosti
- https://www.zaptest.com/cs/co-je-testovani-uzivatelskeho-rozhrani-softwaru-hloubkovy-ponor-do-typu-procesu-nastroju-a-implementace