- Testování jednotek a integrační testování a funkční testování
- Co je testování jednotek?
- Co je integrační testování?
- Testování jednotek vs. testování integrace
- Funkční testování
- Závěr
- Doporučená četba
Podrobné srovnání jednotkového, integračního a funkčního testování:
Pro každou softwarovou aplikaci je velmi důležité jak testování jednotek, tak i integrační testování, protože každé z nich využívá jedinečný proces testování softwarové aplikace.
Žádný z nich nebo dokonce oba však nemohou v žádném okamžiku nahradit funkční testování.
Testování jednotek a integrační testování a funkční testování
Testování jednotek znamená testování jednotlivých modulů aplikace izolovaně (bez interakce se závislostmi), aby se potvrdilo, že kód dělá věci správně.
Integrační testování znamená kontrolu, zda různé moduly fungují v pořádku, když jsou spojeny do skupiny.
Funkční testování znamená testování části funkcí v systému (může být v interakci se závislostmi), aby se potvrdilo, že kód dělá správné věci.
Funkční testy jsou příbuzné integračním testům, ale označují testy, které kontrolují funkčnost celé aplikace se všemi společně běžícími kódy, téměř superintegrační test.
Testování jednotek se zabývá kontrolou jednotlivých komponent systému, zatímco testování funkčnosti se zabývá kontrolou fungování aplikace na základě zamýšlené funkčnosti popsané ve specifikaci požadavků na systém. Naproti tomu integrační testování se zabývá kontrolou integrovaných modulů v systému.
A co je nejdůležitější, pro optimalizaci návratnosti investic (ROI) by vaše kódová báze měla obsahovat co nejvíce unit testů, méně integračních testů a co nejméně funkčních testů.
Nejlépe to ilustruje následující testovací pyramida:
Jednotkové testy se snadněji píší a rychleji provádějí. Čas a úsilí na implementaci a údržbu testů se zvyšuje od jednotkových testů k funkčním testům, jak ukazuje výše uvedená pyramida.
Příklad:
Pochopíme tyto tři typy testování na zjednodušeném příkladu.
Např. Pro funkční mobilní telefon jsou zapotřebí především "baterie" a "sim karta".
Příklad testování jednotek - Kontroluje se životnost baterie, její kapacita a další parametry. Kontroluje se aktivace SIM karty.
Příklad integračního testování - Baterie a sim karta jsou integrovány, tj. sestaveny tak, aby bylo možné mobilní telefon spustit.
Příklad funkčního testování - Funkčnost mobilního telefonu se kontroluje z hlediska jeho funkcí, využití baterie a vybavení sim kartou.
Viděli jsme laický příklad.
Nyní si ukážeme technický příklad přihlašovací stránky:
Téměř každá webová aplikace vyžaduje, aby se její uživatelé/zákazníci přihlásili. Proto musí mít každá aplikace stránku "Přihlášení", která obsahuje tyto prvky:
- Účet/uživatelské jméno
- Heslo
- Tlačítko pro přihlášení/přihlášení
Pro testování jednotek mohou být testovacími případy:
- Délka pole - pole uživatelského jména a hesla.
- Hodnoty vstupních polí by měly být platné.
- Přihlašovací tlačítko se aktivuje až po zadání platných hodnot (Formát a délka) do obou polí.
Pro integrační testování mohou být testovacími případy:
- Po zadání platných hodnot a stisknutí tlačítka pro přihlášení se uživateli zobrazí uvítací zpráva.
- Po platném zadání a kliknutí na tlačítko Přihlásit by měl být uživatel navigován na uvítací nebo domovskou stránku.
Nyní, po dokončení jednotkového a integračního testování, se podívejme na další testovací případy, které jsou zvažovány pro funkční testování:
- Kontroluje se očekávané chování, tj. zda se uživatel může přihlásit kliknutím na tlačítko přihlášení po zadání platných hodnot uživatelského jména a hesla.
- Má se po úspěšném přihlášení zobrazit uvítací zpráva?
- Má se při neplatném přihlášení zobrazit chybová zpráva?
- Jsou pro přihlašovací pole uloženy nějaké soubory cookie webu?
- Může se přihlásit neaktivovaný uživatel?
- Existuje nějaký odkaz "zapomenuté heslo" pro uživatele, kteří zapomněli své heslo?
Takových případů, které napadnou funkčního testera při provádění funkčního testování, je mnohem více. Vývojář však nemůže při sestavování Unit a Integration testů zohlednit všechny případy.
Existuje tedy spousta scénářů, které je třeba otestovat i po jednotkovém a integračním testování.
Nyní je čas postupně prozkoumat jednotkové, integrační a funkční testování.
Co je testování jednotek?
Jak název napovídá, tato úroveň zahrnuje testování "jednotky".
Jednotkou zde může být nejmenší část aplikace, kterou lze testovat, ať už se jedná o nejmenší jednotlivou funkci, metodu apod. Vývojáři softwaru jsou ti, kteří píší případy testů jednotek. Cílem je zde shoda mezi požadavky a očekávaným chováním jednotky.
Níže uvádíme několik důležitých bodů o testování jednotek a jeho výhodách:
- Vývojáři softwaru provádějí testování jednotek před testováním integrace pomocí technik testování bílé skříňky.
- Testování jednotek nekontroluje pouze pozitivní chování, tj. správný výstup v případě platného vstupu, ale také chyby, které nastanou při neplatném vstupu.
- Nalezení problémů/chyb v rané fázi je velmi užitečné a snižuje celkové náklady na projekt. Protože testování jednotek probíhá před integrací kódu, lze problémy nalezené v této fázi velmi snadno vyřešit a jejich dopad je také velmi malý.
- Jednotkový test testuje malé části kódu nebo jednotlivé funkce, takže problémy/chyby zjištěné v těchto testovacích případech jsou nezávislé a nemají vliv na ostatní testovací případy.
- Další důležitou výhodou je, že jednotkové testovací případy zjednodušují a usnadňují testování kódu. Je tedy snazší řešit problémy i v pozdější fázi, protože se testuje pouze poslední změna v kódu.
- Jednotkové testování šetří čas a náklady, je opakovaně použitelné a snadno se udržuje.
JUnit (framework Java), PHPUnit (framework PHP), NUnit (.Net framework) atd. jsou populární nástroje pro unit testing, které se používají pro různé jazyky.
Co je integrační testování?
Integrační testování je testování integrace různých částí systému dohromady. Nejprve se integrují dvě různé části nebo moduly systému a poté se provede integrační testování.
Cílem integračního testování je ověřit funkčnost, spolehlivost a výkonnost integrovaného systému.
Integrační testování se provádí na modulech, které jsou nejprve testovány jednotkově, a následně integrační testování určuje, zda kombinace modulů dává požadovaný výstup, či nikoliv.
Integrační testování mohou provádět buď nezávislí testeři, nebo také vývojáři.
Existují 3 různé typy přístupů k integračním testům. Pojďme si každý z nich stručně probrat:
a) Integrační přístup velkého třesku
Při tomto přístupu jsou všechny moduly nebo jednotky integrovány a testovány jako celek najednou. Obvykle se tak děje v okamžiku, kdy je celý systém připraven k integračnímu testování v jednom časovém okamžiku.
Nezaměňujte prosím tento přístup integračního testování se systémovým testováním, testuje se pouze integrace modulů nebo jednotek, nikoliv celý systém, jak je tomu při systémovém testování.
Hlavním rysem přístupu velkého třesku je výhoda je, že se vše integrované testuje najednou.
Jeden z hlavních nevýhoda je, že je obtížné identifikovat selhání.
Příklad: Na obrázku níže jsou jednotky 1 až 6 integrovány a testovány pomocí metody velkého třesku.
b) Přístup shora dolů
Integrace jednotek/modulů se testuje postupně od nejvyšší úrovně k nejnižší.
První jednotka se testuje samostatně napsáním testovacích STUBS. Poté se postupně integrují nižší úrovně, až se sestaví a otestuje poslední úroveň.
Přístup shora dolů je velmi organický způsob integrace, protože odpovídá tomu, jak se věci dějí v reálném prostředí.
Jediný obavy Tento přístup spočívá v tom, že hlavní funkce jsou testovány až na konci.
c) Přístup zdola nahoru
Jednotky/moduly jsou testovány od nejnižší úrovně k nejvyšší, krok za krokem, dokud nejsou všechny úrovně jednotek/modulů integrovány a testovány jako jeden celek. Stimulační programy tzv. ŘIDIČI Při tomto přístupu se snáze odhalují problémy nebo chyby na nižších úrovních.
Hlavní nevýhoda tohoto přístupu spočívá v tom, že problémy vyšší úrovně lze identifikovat až na konci, kdy jsou všechny jednotky integrovány.
Testování jednotek vs. testování integrace
Když už jsme se dostatečně rozepsali o jednotkovém a integračním testování, projděme si v následující tabulce rozdíly mezi nimi:
Testování jednotek | Integrační testování |
---|---|
Testuje jednotlivou komponentu celého systému, tj. testuje jednotku izolovaně. | Testuje spolupráci komponent systému, tj. testuje spolupráci více jednotek. |
Rychlejší provedení | Může běžet pomalu |
Žádná externí závislost. Jakákoli externí závislost je zesměšněna nebo vyřazena. | Vyžaduje interakci s externími závislostmi (např. databáze, hardware atd.) |
Jednoduché | Komplexní |
Provádí vývojář | Provádí tester |
Jedná se o typ testování bílých skříněk | Jedná se o typ testování černé skříňky |
Provádí se v počáteční fázi testování a poté může být provedeno kdykoli. | Musí být provedeno po testování jednotek a před testováním systému. |
Levná údržba | Nákladná údržba |
Začíná od specifikace modulu | Začíná specifikací rozhraní |
Testování jednotek má úzký rozsah, protože pouze kontroluje, zda každý malý kousek kódu dělá to, co má. | Má širší rozsah, protože pokrývá celou aplikaci. |
Výsledkem testování jednotek je detailní přehled o kódu. | Výsledkem integračního testování je detailní přehled o integrační struktuře. |
Odhaluje problémy pouze v rámci funkčnosti jednotlivých modulů. Neodhaluje chyby integrace nebo problémy celého systému. | Odhalení chyb, které vznikají při vzájemné interakci různých modulů, které tvoří celkový systém. |
Funkční testování
Technika testování černé skříňky, při níž se testuje funkčnost aplikace, aby při zadání určitého vstupu generovala požadovaný výstup, se nazývá "funkční testování".
V našich procesech testování softwaru to děláme tak, že píšeme testovací případy podle požadavků a scénářů. Pro jakoukoli funkcionalitu může být napsáno od jednoho do mnoha testovacích případů.
Závěr
Všechny tyto tři typy testů spolu souvisejí.
Pro dosažení plného pokrytí je nutné mít jednotkové testy pro cesty/řádky kódu, funkční testy a integrační testy pro ujištění, že "jednotky" fungují společně a soudržně.
Doufám, že vám tento článek poskytl jasnou představu o jednotkovém, integračním a funkčním testování a jejich rozdílech, i když těchto forem testování je mnohem více!!