Testovací techniky nám pomáhají snáze najít chyby, najít jich víc a úspěšně dokončit misi testování. Proto si zaslouží naši pozornost! Testovacích technik je úctyhodné množství. Abychom se v nich zorientovali, je nutné si je nejdřív rozdělit podle účelu použití. (viz. obr. 1).

Obr. 1 – Přehled testovacích technik

Máme statické a dynamické techniky. Statické techniky nevyžadují funkční software. Využívají se v počátečních fázích vývoje SW, když ještě nemáme funkční prototyp. Lze je využít na analýzu zdrojového kódu nebo kontrolu specifikace požadavků. Pro tyto techniky není třeba počítač. Naproti tomu dynamické techniky vyžadují spuštění aplikace (testy se spouští po buildu). Využívají se v pozdějších fázích a jsou zaměřeny na provoz aplikace.

Statické techniky

  • Informal Reviews – neformální review se uplatňuje v počátečních fázích životního cyklu dokumentu. Nejjednoduší realizací je prodiskutovat dokument s druhou osobou. Později se recence dělá ve více lidech třeba na meetingu. Cílem je zlepšit kvalitu dokumentu. Jedná o neformální recenze, proto nejsou zdokumentovány.
  • Walkthroughs – autor seznamuje tým s celým dokumentem za účelem pochopení a posbírání zpětné vazby.
  • Technical Reviews – Technické review je diskusní meeting, který se zaměřuje na technický obsah dokumentu. Jakési méně formální review, řídí ho moderátor nebo technický odborník. Cílem je vyhodnotit technický návrh.
  • Static Analysis – Statická analýza kódu se provádí na zdrojovém kódu. Buď manuálně (kód review) nebo automaticky promocí nástrojů. Přehled nástrojů najdete na Wiki.

Dynamické techniky

Tyto techniky se dále dělí dle toho, zda je ověření správnosti založené na strukruře White box (Structure based), nebo na specifikaci Black box (Specification based). Poslední kategorií je ověření na základě zkušeností se softwarem.

White box (Structure based)

Hlavní technikou testování White Box je analýza pokrytí kódu (code coverage analysis). Analýza pokrytí kódu eliminuje díry v sadě TestCasů. Identifikuje oblasti programu, které nejsou testovány. Jakmile jsou zjištěny, vytvoříte testy k ověření netestovaných částí kódu. Tím zvyšujete kvalitu softwarového produktu. K provádění analýzy pokrytí kódem existují tooly. Níže jsou nejčastěji používané:
  • Statement coverage – technika vyžaduje vykonání všech příkazů ve zdrojovém kódu alespoň jednou. Míra pokrytí měří, zda byl příkaz alespoň jednou testován.
  • Branch coverage – technika kontroluje každou možnou cestu (if-else a jiné podmíněné smyčky) softwarové aplikace.
Komě výše uvedených existují i další techniky Condition coverage, Multiple Condition coverage, Path coverage, Function coverage. Použitím Statement a Branch coverage většinou dosáhnete pokrytí 80 – 90 %, což je dostatečné.

Black box (Specification based)

  • Equivalence Partitioning – třída ekvivalence. Jedná se o poměrně opomíjenou techniku. Přitom velmi usnadňuje testování! Rozděluje vstupní testovaná data na ekvivalentní části (proto Equivalence Partitioning), z nichž lze odvodit testcasy. Testcasy jsou v zásadě navrženy tak, aby pokrývaly každou část alespoň jednou. Tato technika se pokouší definovat testcasy, které odhalují druhy chyb, čímž se sníží celkový počet testcasů, které je třeba vyvinout. Výhodou tohoto přístupu je zkrácení doby potřebné pro testování SW díky menšímu počtu testovacích případů. Příklad: máte otestovat správné zadání data. Tříd ekvivalence pouze u dnů bude celkem 5, a to těchto 1 – 28, 29, 30, 31, 0 a 32 a více. Jejich zpracování závisí na měsících i roce.
  • Boundary Value Analysis – analýza hraničních hodnot. Jedná se o techniku, při které pro každou identifikovanou hranici vstupních a výstupních hodnot se vytvoří dva testcasy. Jeden na každe straně hranice. Tak blízko hranice, jak je to jen možné. Příklad: máme rezervační systém pro letenky a v jedné objednávce je povolené objednat maximálně 10 letenek. Hraniční hodnoty pro test budou 0, 1, 10, 11.
  • Decision Table – rozhodovací tabulka. Tato technika je oproti dvěma předchozím více zaměřena na obchodní logiku a hodí se ve složitějších situacích. Prvním úkolem je určit vhodnou funkci nebo subsystém, který reaguje podle kombinace vstupů nebo událostí. Jakmile zjistíte aspekty, které je třeba kombinovat, vložte je do tabulky obsahující všechny kombinace True a False pro každý aspekt. Příklad: máte otestovat tlačítko pro bookování letu. Vstupem je, odkud chceme letět a kam. Tlačítko má být aktivováno, pouze pokud jsou vyplněna obě místa. Tabulka bude obsahovat 3 řádky – Odkud, Kam a Tlačítko aktivní. Vyplníte všechny hodnoty True a False. Výsledkem jsou 4 sloupce (4 pravidla). Z nich můžeme vytvořit 4 testcasy. Pro složitější situace ale můžete vybrat je některé pravidla.
  • State Transition – Testování přechodu mezi stavy je technika, při níž změny vstupních podmínek způsobují změnu stavu v testované aplikaci. Funkční chování je namodelováno pomocí stavového automatu. Testcasy jsou potom vytvářeny pro:
    • A) každý stav automatu
    • B) použití každého přechodu automatu (0 – přechodové pokrytí)
    • C) každou možnou posloupnost přechodů (n – přechodové pokrytí)
  • Use Case Testing – Použití testování případů je technikou, která pomáhá identifikovat testcasy, které pokrývají celý systém, na základě transakce. Transakce od počátku až po koncový bod. Příklad s bankomatem (U – uživatel, S – system)
    1. U: Vložte kartu
    2. S: Ověřit kartu a požádat o PIN
    3. U: vloží PIN
    4. S: ověří PIN
    5. S: povolí přistup k účtu

Experience based

  • Exploratory testing – průzkumné testování je velmi často používanou technikou v agilním vývoji pro získání hodnotných informací o testovaném produktu. Jedná se o styl testování softwaru, který zdůrazňuje osobní svobodu a odpovědnost každého testera neustále optimalizovat kvalitu své práce tím, že zapracovává učení testováním, návrh testů, provádění testů a interpretace výsledků testů jako vzájemně se podporující činnosti, které probíhají paralelně v průběhu celého projektu.
  • Error Guessing – předpokládání chyb. Technika, při které zkušení a dobří testeři vymýšlí situace, ve kterých se software nemusí chovat správně. Podstatou je identifikovat slabá místa v systému a ty otestovat. Jedná se spíše o doplňkovou metodu následující po formálních technikách. Jejím účelem je zkrácení doby testování.

Nástroje pro testování

Kromě technik je dobré si usnadnit práci také správnými nástroji. Přehled nástrojů podporujících testování najdete v článku Nejlepší testovací nástroje.