Druhy testování softwaru: přehled typů testů a kdy se který používá
Unit, regresní, API, akceptační nebo výkonnostní test neoznačují pět vzájemně se vylučujících možností. Každý název odpovídá na jinou otázku: jak velkou část systému ověřujeme, co chceme zjistit, jak test provádíme nebo proč jej spouštíme právě teď. Tento přehled pomůže produktovým specialistům, vývojářům i testerům přesně pojmenovat pokrytí a vybrat test podle rizika, nikoli podle nejznámějšího termínu.
Proč jeden seznam typů testů nestačí
Představte si automatizovaný scénář, který po nasazení zavolá objednávkové API, vytvoří objednávku a ověří výslednou cenu. Může být současně dynamický, funkční, integrační, API, regresní i smoke test. Není v tom rozpor. „Integrační“ popisuje rozsah zapojených částí, „funkční“ cíl kontroly, „API“ rozhraní, „automatizovaný“ způsob provedení a „smoke“ úlohu v konkrétním bodě procesu.
Bez takového rozlišení vznikají neproduktivní debaty. Tým řekne, že potřebuje více integračních testů, ačkoli mu ve skutečnosti chybí kontrola výkonu. Nebo označí každý test v prohlížeči za end-to-end (E2E), i když používá simulované backendové služby a ověřuje pouze jeden frontendový komponent. Výsledkem bývají duplicity na jedné úrovni a slepá místa jinde.
Dobrá testovací strategie proto nevybírá jeden „správný druh“. Kombinuje více pohledů a pomocí rizikově orientovaného testování rozhoduje, kde má který důkaz největší hodnotu:
| Osa | Otázka, na kterou odpovídá | Příklady |
|---|---|---|
| Úroveň nebo rozsah | Jakou část systému zapojujeme? | unit, komponenta, integrace, systém, E2E |
| Cíl | Jakou vlastnost nebo riziko ověřujeme? | funkčnost, výkon, bezpečnost, přístupnost |
| Způsob | Jak získáme důkaz? | staticky, dynamicky, manuálně, automatizovaně |
| Rozhraní | Kudy systém ovládáme a pozorujeme? | API, uživatelské rozhraní (UI) |
| Čas a účel běhu | Proč test spouštíme v tomto bodě? | smoke, sanity, regrese, akceptace |
Názvy se navíc mezi firmami liší. Před použitím metrik nebo plánováním sady proto k pojmu dopište hranici testu, skutečné závislosti a očekávaný výsledek. Přesný obsah je důležitější než štítek.
Druhy podle úrovně: od jedné jednotky po celou cestu
Unit test, česky jednotkový test, ověřuje malou jednotku chování v kontrolovaných podmínkách. Může to být funkce pro výpočet DPH, validační pravidlo nebo třída, která rozhoduje o nároku na slevu. Databázi, síť nebo hodiny často nahradí řízenou náhradou. Výsledek bývá rychlý a příčina selhání se dobře lokalizuje, avšak unit test sám nepotvrdí, že spolu části správně komunikují.
Komponentový test ověřuje větší celek přes jeho veřejnou hranici. Komponentou může být frontendový formulář, knihovna nebo jedna nasaditelná služba. Vnitřní části mohou být reálné, zatímco vzdálené služby zůstanou nahrazené. Tento název je užitečný zejména tehdy, když „unit“ znamená pro různé lidi něco jiného.
Integrační test prověřuje spojení dvou nebo více reálných částí: aplikace s databází, služby s frontou zpráv, klienta s API nebo několika modulů. Odhaluje chyby v serializaci, schématu, konfiguraci, transakcích a protokolu, které izolovaný test neuvidí. Integrace však může být úzká — pouze jedna hranice — i široká přes více služeb. Rozsah je třeba uvést přímo v názvu nebo dokumentaci testu.
Systémový test pozoruje sestavený produkt jako celek vůči systémovým požadavkům.
End-to-end test sleduje ucelený tok od jednoho konce ke druhému, například od odeslání objednávky po rezervaci skladu a potvrzení. Často vede přes UI, ale není to podmínka: koncový tok lze spustit i přes API. Stejně tak není každý UI test E2E — izolovaný test formuláře v prohlížeči může zůstat komponentovým testem. Hranice podrobně porovnává článek Unit, integrační a end-to-end testy.
Testovací pyramida bez dogmatu doporučuje skládat sadu z testů různé granularity. Neurčuje univerzální procenta. Praktická otázka zní: na jaké nejnižší úrovni dokážeme dané riziko důvěryhodně ověřit a na kterých hranicích ještě potřebujeme důkaz, že celek drží pohromadě?
Druhy podle cíle: funkčnost a vlastnosti kvality
Funkční testování ověřuje, co má systém udělat. Kontroluje například správný výpočet ceny, zamítnutí neplatného kupónu, oprávnění uživatele nebo přechod objednávky do povoleného stavu. U identity musí pokrytí zohlednit také odlišné toky 2FA, OAuth a sociálního přihlášení. Zahrnuje pozitivní případy, chybové větve, hraniční hodnoty i obchodní pravidla. Funkční test může běžet na kterékoli úrovni — od unit testu výpočtu až po celý nákup.
Nefunkční testování zkoumá, jak systém svou úlohu plní a jaké má vlastnosti za určených podmínek. Není to jedna sada „ostatních“ testů. Každá vlastnost potřebuje vlastní otázky, data, prostředí a kritéria:
- Výkonnostní testování měří odezvu, propustnost, využití zdrojů a stabilitu při definované zátěži. Výkonnostní testování API a mikroslužeb ukazuje, co měřit pod UI; Core Web Vitals a zátěžové testy zase oddělují zkušenost v prohlížeči od kapacity backendu. Rozdíl mezi load, stress, spike a soak testem spočívá ve tvaru a účelu zátěže, nejen v počtu virtuálních uživatelů. Kapacitu proto nelze odvodit bez modelu provozu; praktický postup popisuje článek o tom, kolik uživatelů web zvládne. Před během určete také, co lze bezpečně měřit na stagingu a co v produkci. Při vyhodnocení sledujte rozdělení časů, protože p95 a průměr vypovídají o jiném chování.
- Bezpečnostní testování hledá zneužitelné slabiny v konkrétním rozsahu. Může zahrnovat kontrolu oprávnění, závislostí, konfigurace, vstupů, autentizace nebo odolnosti proti známým třídám útoků. Automatický sken, revize kódu a penetrační test poskytují rozdílný typ důkazu. Bezpečnostní test není automaticky úplný bezpečnostní audit ani potvrzení souladu.
- Testování přístupnosti ověřuje, zda lidé s různými schopnostmi dokážou obsah vnímat a ovládat. Automatická kontrola umí najít pouze část problémů, proto samotný skener přístupnosti nestačí. Užitečná kombinace zahrnuje například ruční průchod klávesnicí, kontrolu názvů a stavů prvků a realistické scénáře, jako jsou přístupný checkout a formuláře. Audit vůči zvoleným kritériím má širší rozsah než jeden automatizovaný test.
- Testování kompatibility prověřuje podporované kombinace prohlížečů, operačních systémů, zařízení, rozlišení, jazyků, verzí nebo datových formátů. Výběr má vycházet z pravidel podpory a používání, nikoli z pokusu pokrýt vše. U webu pomůže strategie cross-browser testování spolu s kontrolou jazyků, měn, datumů, URL a náhradního obsahu. Vzhled napříč kombinacemi může doplnit vizuální regresní testování. U mobilu je třeba rozumně kombinovat emulátory a reálná zařízení a samostatně ověřit systémové vstupy, například notifikace a deep linky Androidu. Desktopové aplikace přinášejí vlastní hranice, které přibližuje testování WPF a WinForms včetně spouštění testů WPF a WinForms v CI.
Funkční a nefunkční cíl se mohou setkat v jednom scénáři, ale kritéria se nesmějí slít. Nákup může funkčně projít a zároveň trvat nepřijatelně dlouho; rychlá odpověď zase nemusí obsahovat správnou cenu. Každé tvrzení potřebuje samostatné ověření.
Statické a dynamické, manuální a automatizované
Statické testování hodnotí pracovní produkt bez spuštění testovaného kódu. Patří sem revize požadavků, návrhu, zdrojového kódu nebo testovacích případů a také automatická analýza. Dokáže odhalit nejednoznačnou akceptační podmínku nebo rizikový tok ještě předtím, než vznikne spustitelná funkce. Statické neznamená manuální: analyzátor může pracovat automaticky.
Dynamické testování testovaný kód spouští a porovnává pozorované chování s očekáváním. Může jít o ruční průzkumný scénář, unit test i zátěžový běh. Dynamický test ukáže chování za zvolených podmínek; neprokazuje, že se systém chová správně pro všechny možné vstupy.
Při manuálním testování provádí kroky a vyhodnocuje výsledek člověk. Je vhodné tam, kde rozhoduje pozorování, učení a úsudek — například při průzkumném testování nové funkce nebo posuzování srozumitelnosti rozhraní. Při automatizovaném testování provede opakovatelnou kontrolu nástroj. Hodí se pro časté, stabilní a jednoznačně vyhodnotitelné scénáře, ale vyžaduje návrh, data, prostředí a údržbu.
Nejde o souboj dvou týmů. Manuální a automatizované testování se doplňují a rozhodnutí je třeba dělat po scénářích. Platí to i pro malý tým bez samostatného testera, kde se odpovědnosti rozdělí, ale potřeba lidského úsudku nezmizí. Pomohou otázky, kdy se automatizace vyplatí a co se nevyplatí automatizovat, nikoli cíl dosáhnout libovolného procenta automatizace.
Black-box, white-box a průzkumné testování
Další názvy popisují, z jakých informací test vychází. Při black-box testování, tedy testování černé skříňky, se tester dívá na vstupy a pozorovatelné výstupy, aniž by test odvozoval z vnitřní implementace. Tak lze ověřovat veřejné API, formulář i celý systém. Znalost obchodního kontextu přitom není zakázána; „černá skříňka“ pojmenovává pohled na chování, nikoli neinformovanost člověka.
Při white-box testování, tedy testování bílé skříňky, návrh kontroly využívá znalost kódu nebo struktury. Test může cílit na konkrétní větev rozhodování, datový tok nebo ošetření výjimky. Strukturální pokrytí pomůže najít neprovedená místa, ale samotný průchod řádkem ještě neukazuje, že test ověřil správný výsledek. Grey-box testování je praktické pojmenování kombinace: test používá veřejnou hranici, avšak scénáře a diagnostiku vybírá se znalostí architektury, databáze nebo protokolu.
Průzkumné testování je způsob práce, při kterém se učení o produktu, návrh testu a jeho provedení průběžně ovlivňují. Tester si může určit časově ohraničenou misi, například prozkoumat chování košíku při souběžné změně ceny, a podle zjištění měnit další kroky. Není to náhodné klikání bez cíle ani opak manuálního scénáře. Automatizované nástroje mohou pomoci připravovat data, měnit vstupy nebo sbírat důkazy, zatímco směr zkoumání určuje člověk.
Ani tyto pojmy neurčují úroveň. Black-box kontrola může být komponentová i E2E; white-box přístup lze použít v integračním testu. Při plánování si proto zaznamenejte, zda potřebujete potvrdit požadavek zvenčí, prozkoumat vnitřní strukturu nebo objevovat rizika, která ještě nemají pevný scénář.
API a UI testy popisují vstup do systému
API test komunikuje přes programové rozhraní bez proklikávání obrazovek. Umí přesně připravit vstup, ověřit stavový kód, tělo odpovědi, schéma, oprávnění i vedlejší účinek. Pro rozhodování pomůže seznam, co testovat v API, a praktický postup testování REST API. Asynchronní hranice potřebují také scénáře pro podpisy, duplicity a opožděné webhooky nebo pro spouštěče a duplicity transakčních e-mailů. U cizí služby je třeba vědomě zvolit mock, sandbox nebo reálnou službu. Ve vztazích mezi službami přidává jiný druh jistoty kontraktní testování, které hlídá zaznamenaná očekávání klienta a poskytovatele.
UI test ovládá nebo vykresluje uživatelské rozhraní. Potvrdí, že člověk dokáže prvek najít, vyplnit a použít a že vrstvy pod ním jsou v rozsahu testu správně propojené. Bývá však citlivější na stav dat, časování a změny rozhraní. Proto není účelné přesouvat každou kombinaci přes prohlížeč; článek o tom, proč stovky UI testů nenahradí API testy, vysvětluje rozdíl v typu pokrytí.
Obě rozhraní lze použít na různých úrovních. API test může izolovat jednu službu nebo projít celý systém. UI test může ověřit komponentu nebo kompletní nákup od košíku po platbu. O rozsahu rozhodují skutečně zapojené části, nikoli použitý ovladač.
Smoke, sanity, regresní a akceptační testy
Tyto názvy popisují hlavně účel výběru a okamžik, kdy test spouštíme:
- Smoke test je krátká, široká kontrola, zda sestavení nebo nasazení vůbec umožňuje pokračovat v dalším testování. Ověří například start aplikace, přihlášení, načtení katalogu a dostupnost klíčového API. Nemá nahradit hloubkovou regresi.
- Sanity test je úzký, cílený výběr po menší změně nebo opravě. Potvrdí, že upravená oblast dává základní smysl a že se vyplatí investovat do dalších kontrol. V praxi firmy termíny smoke a sanity někdy zaměňují; důležitější je dohodnutý rozsah a brána, kterou výsledek ovládá.
- Regresní testování zjišťuje, zda změna nepoškodila dříve fungující chování. Výběr může být malý u pull requestu a širší před releasem nebo v noci. Dobrý regresní balík se řídí dosahem změny a rizikem, nikoli mechanickým spuštěním všeho; pravidelně v něm posuďte také, které testy lze smazat bez ztráty důležitého pokrytí.
- Akceptační testování ověřuje, zda řešení splňuje dohodnuté potřeby a podmínky přijetí. Může být automatizované i manuální a probíhat na API nebo UI. Akceptační test tedy není synonymem E2E; jednoduché obchodní pravidlo lze akceptovat také na nižší úrovni, pokud tam vzniká důvěryhodný důkaz.
Tyto výběry se mohou překrývat. Jeden klíčový akceptační scénář může patřit i do regrese a jeho zkrácená verze do smoke sady. V CI/CD je užitečné rozdělit testy podle bodu a rychlosti zpětné vazby namísto jednoho dlouhého balíku pro každou změnu. Pokud stejné testy lokálně projdou, ale v CI selhávají, samostatně ověřte rozdíly prostředí, dat, paralelizace a času.
Jak vybrat vhodnou kombinaci testů
Začněte rozhodnutím, nikoli katalogem názvů. Pro jednu funkci nebo změnu projděte tento postup:
- Pojmenujte následek selhání. Co se stane uživateli a firmě, pokud je výsledek nesprávný, pomalý, nedostupný, nepřístupný nebo zneužitelný? Zohledněte závažnost i pravděpodobnost.
- Rozdělte tok na pravidla a hranice. U objednávky jsou pravidly výpočet ceny a povolené stavy; hranicemi databáze, sklad, platba, e-mail a UI. Každá kritická hranice potřebuje přiměřený důkaz.
- Zvolte nejnižší důvěryhodnou úroveň. Kombinace slev patří převážně do unit nebo komponentových testů. Serializace objednávky a zápis do databáze do integračních. Několik reprezentativních cest potvrdí systémový nebo E2E scénář.
- Doplňte cíle kvality. Funkční scénář neřekne, kolik souběžných objednávek systém zvládne, zda jej lze ovládat klávesnicí ani zda běžný uživatel získá cizí data. Pro relevantní rizika určete samostatné nefunkční kontroly a kritéria.
- Vyberte rozhraní a způsob. API bývá účelné pro množství datových kombinací; UI pro klíčové interakce. Opakovanou stabilní kontrolu zvažte pro automatizaci, novou nebo nejednoznačnou oblast prozkoumejte člověkem. Potřebná data navrhujte záměrně — kopie produkční databáze není testovací datová strategie a E2E běhy potřebují nezávislá, opakovatelná testovací data.
- Určete okamžik běhu a reakci. Rychlá sada může běžet při každé změně, smoke test po nasazení a širší regrese podle rizika. U každého selhání musí být jasné, zda blokuje sloučení, nasazení nebo vyžaduje vyšetřování. Sledujte také nestabilitu; náhodně selhávající testy snižují důvěru ve výsledek.
- Zkontrolujte důkaz a mezery. Test musí mít smysluplné očekávání, vlastníka a čitelný výsledek. QA metriky mají ukázat riziko a čas zpětné vazby, nikoli jen rostoucí počet testů.
Jeden release tak může obsahovat stovky rychlých unit kontrol pravidel, desítky komponentových a integračních testů, kontrakty mezi službami, malý počet E2E cest, cílenou regresi, smoke po nasazení a samostatný výkonnostní nebo přístupnostní test. Přesný poměr závisí na architektuře a rizicích produktu.
Testování, monitoring a audit nejsou totéž
Testování vytváří důkaz o chování za vybraných podmínek a v konkrétním čase. Monitoring průběžně sbírá signály z běžícího provozu a má podpořit odhalení a řešení incidentu. Syntetická kontrola může technicky provádět podobný scénář jako automatizovaný test, ale její provozní účel, frekvence, bezpečná data a upozornění jsou jiné. Rozdíl přibližuje syntetický monitoring po releasu i porovnání syntetického a reálného uživatelského monitoringu. Produkční scénář je třeba navrhnout tak, aby nevytvářel falešné objednávky ani nepoškozoval data. Samotný signál dostupnosti navíc nemusí odhalit nefunkční nákup, proto uptime nestačí.
Audit je systematické posouzení vymezeného produktu, procesu nebo důkazů vůči dohodnutým kritériím. Může používat výsledky testů, revize i rozhovory, ale není synonymem testovacího běhu. QA audit například hodnotí pokrytí rizik, proces, prostředí a zdraví sady; automaticky nepřidává chybějící testy ani nepřebírá nepřetržité sledování produkce.
Tyto tři činnosti se doplňují. Testy snižují nejistotu před změnou, monitoring ukazuje skutečný provoz a audit pomáhá najít systémové mezery. Jedna vrstva však nemá vytvářet falešný pocit, že nahradila ostatní.
Co získáte přesnějším pojmenováním
Když tým třídí testy podle více os, snáze uvidí, že má například mnoho automatizovaných UI regresí, ale žádné integrační kontroly platební hranice nebo výkonnostní kritérium. Přesnější názvy také zlepšují diagnostiku: selhaný úzký integrační test ukazuje jinou oblast než celý E2E tok.
Přínosem není dokonale vyplněná taxonomie. Je jím kratší cesta k důvěryhodnému výsledku, méně duplicitních kontrol a vědomé pokrytí rizik, která mohou zasáhnout uživatele nebo firmu.
Další krok
Vyberte deset nejdůležitějších scénářů produktu a pro každý vytvořte jeden řádek se šesti údaji: riziko, testovaná vlastnost, hranice systému, úroveň, rozhraní a okamžik spuštění. Poté označte duplicity, chybějící hranice a testy bez jasného očekávání. Tento malý audit vám dá konkrétní seznam přesunů a doplnění dříve, než začnete kupovat nástroj nebo rozšiřovat sadu.