V mojom skoršom článku o meraní kódu som vskratke opísal jednu využiteľnú metriku - tzv. cyklomatickú komplexitu (cyclomatic complexity - CC), ktorá nájde svoje využitie aj pri písaní unit testov. Konkrétne číslo CC sa zhoduje s počtom testov, ktoré musíte napísať, aby ste dosiahli 100%-né pokrytie štruktúry programu (všetky vetvy kódu). Teda ak vaša testovaná jednotka - metóda - neobsahuje žiadne príkazy ovládania toku (control flow statements) a má CC o hodnote 1, bude vám stačiť napísať jeden jediný unit test pre túto metódu, aby ste pokryli celé telo metódy. Ak by testovaná metóda obsahovala IF-blok, jej CC by sa zvýšila na hodnotu 2 a potrebovali by ste napísať dva testy: jeden kde tok prechádza cez IF-blok (podmienka je splnená), a ešte jeden, v ktorom je podmienka nesplnená a tok programu kód vo vnútri IF-bloku obíde.
Pre poriadne otestovanie jednotky kódu však nestačí prevetrať len 100% inštrukcií. Pokrytím všetkých riadkov kódu unit testami (počet testov = hodnota cyklomatickej komplexity metódy) sa nám podarí odhaliť problémy spôsobené štrukturálnou komplexitou. Nesmieme však zabúdať na druhý aspekt kódu - dátovú komplexitu - pre ktorú musíme tiež napísať určité množstvo testov.
Koľko testov je nutných pre otestovanie dátovej komplexity sa nedá určiť vopred žiadnym výpočtom. Skúsený tester si pripraví vhodnú sadu testovacích dát, ktorými nakŕmi testovaný systém a, pri troche šťastia, sa mu ho podarí položiť na kolená. Testy dátovej komplexity sa budú obohacovať a dopĺňať pri každom výskyte chyby v programe, na ktorú sme sa vopred nepripravili. Test sa doplní, chybná jednotka sa otestuje, test zlyhá, chyba v testovanej jednotke sa opraví, test sa znova spustí a prebehne bez problémov.
Tieto testy dátovej komplexity sa niekedy nepíšu vôbec a dúfa sa, že chyby odchytia integračné testy, ktoré zapriahnu databázu do nášho testovacieho postroja a potom prevetrajú kód za prítomnosti testovacích dát v databáze. Aj to je lepšie než nič. Popravde, je dôležité uistiť sa, že všetky jednotky pohromade vedia pekne spolupracovať. No ešte lepšie je mať jednotlivé jednotky otestované na úrovni unit testu a na problémy s dátovou komplexitou si postriehnuť s parametrizovaným unit testom.
Možno ste ho už stretli, no ak nie, tak tu je na ukážku jeden taký fešák a viac o ňom a ako parametrizované unit testy fungujú v mojom článku Parametrizované Unit Testy (PUT).
Ukážka parametrizovaného unit testu
|