Testování je jedním z nejdůležitějších kroků vývoje softwaru. Existuje mnoho různých druhů testů, které mohou být použity, aby se zajistilo, že software splňuje specifikace a je schopen splnit svůj účel. Následující článek se zaměří na některé z nejběžnějších druhů testů, které se používají k testování softwaru a zajištění kvality.
V testování software se objevuje hodně názvů i přístupů, což často nastolí nepochopení a nedorozumění, co a kdy se vlastně testuje, co má být správným výsledkem konkretního testování. Vezmeme testerskou lupu a jednotlivé případy prozkoumáme podrobněji.
Testovaní se dá zajisté dělit dle mnoha kritérií. Pokud nevíte, co testování softwaru je, přečtěte si nejdřív článek Co je testování softwaru. Pokud vás zajímá, jakým způsobem se dá software testovat, přečtěte si článek Jak testovat software.
A teď již pojďme na jednotlivé druhy testování. V následujících odstavcích si povíme více o typech testování dle fáze vývoje, znalosti kódu, dimenzí kvality nebo způsobů realizace.
Podle fáze vývoje
-
Statické testy – tyto testy se provádí ještě před spuštěním kódu. Cílem je analyzovat kód a identifikovat potenciální problémy, které by mohly způsobit chybu, selhání nebo jiné nežádoucí chování ve výsledku. Pokud se provádí pomocí analyzátoru kódu, označuje se pojmem statická analýza kódu. Pokud jej dělá člověk (např. druhý programátor), označuje se pojmem review nebo code review.
- Unit testy – přichází na řadu nejdříve. Píší je obvykle přímo programátoři a jedná se o základní prvky pro ověření kódu a jeho funkčnosti. Ověřuje se jednotka (unita). Testy jsou automatizované. Například TDD se bez nich neobejde. Zásadní jsou ale pro všechny metody vývoje a zajištění kvality na SW projektu.
-
Komponent/Modul testy – jsou stále spíše doménou programátorů. Jejich využití je především na velkých projektech, kdy se snažíme ověřit funkčnost nějaké komponenty nebo modulu. Často se od unit testů moc neliší. Odlišnost spočívá spíš v rozsahu – Modul testy představují testy např. celé knihovny. Komponent testy zase testují celou komponentu.
-
Integrační testy – tvoří je obvykle testeři poté, co programátoři skončí svou práci, a je třeba ověřit, zda jednotlivé moduly/komponenty fungují dohromady. Patří mezi ně také API testy, které se u těchto testů často používají.
-
Funkční/E2E/GUI testy – funkční testování obvykle zkoumá, co systém dělá. Funkční testování neznamená, že testujete funkci (metodu) modulu nebo třídy. Testuje část funkčnosti celého systému. Zásadním je tedy uživateský pohled.
-
Systémové testy – z pohledu hierarchie se jedná o nejvyšší úroveň testování, která se provádí ještě ve vývojovém týmu. Jejich cílem je ověřit, zda systém jako celek funguje dle požadavků a očekávání zákazníka.
-
Akceptační testy – jsou realizovány na straně zákazníka. Jejich cílem je ověřit, že produkt splňuje očekávané funkce a kvalitu.
Nutno dodat, že toto rozdělení je bližší spíš procesu vývoje formou vodopádu. Zvláště pokud budeme trvat na tom, že se jedná o fáze testování v čase. Moderní agilní metody tyto termíny používají také, neberou je ale jako fáze v čase, ale spíše jako metody, které se využívají pro zajištění kvality. Více to popisuji v článku Agilní testování.
Podle znalosti kódu:
- White Box – pokud jsou testy psané na základě znalosti kódu. Typickým představitelem jsou Unit testy.
- Black Box – na SW se díváme, jako by se jednalo o černou skříňku. Zajímá nás pouze, jak reaguje. Na základě konkrétních vstupů sledujeme výstupy. Typickým představitelem jsou např. funkční a akceptační testy.
-
Gray box – v praxi pak často testeři píší testy, které se opírají o částečnou znalost kódu nebo architektury, těm se pak říká Gray box testy.