Testování
Osnova cvičení
- Zkusíte vymyslet testovací případy pro knihovnu, ke které máte pouze hlavičkové soubory (black box testing),
- Zkusíte vymyslet vstupní testovací data pro otestování pokrytí kódu
pomocí nástroje
lcov.
Příprava prostředí
Pro část 1 nebudete potřebovat nic nového.
Pro část 2 si potřebujete stáhnout nástroj lcov, pokud jste na vlastních počítačích.
Pokud jste na stolních laboratorních počítačích, musíte nabootovat na Linux
Bookworm, na Ubuntu 22.04 nástroj lcov není.
Instalace pro různé OS
- Ubuntu:
- Fedora:
- MacOS:
Část 1 (Black box module testing)
Stáhněte si projekt 11-blackbox.zip.
Budete testovat správnost implementace bankomatu, k jehož logice a správě dostupných uživatelů ale nemáte přístup, máte jedině přístup k hlavičkovému souboru, který definuje operace nad bankomatem (takzvaný "interface").
Vašim úkolem je vymyslet testovací případy, které otestují správnost implementace bankomatu. Implementace bankomatu má stav, je tedy potřeba dělat operace na bankomatu v konkrétním pořadí (v reálu se nejdříve autorizuje uživatel dle pinu, poté vybere peníze).
Specifikace interface bankomatu
Nad bankomatem jsou specifikovány struktury a funkce v hlavičkovém
souboru atm.h. Bankomat má oprávněné uživatele podle jejich ID a pinu.
V našem případě bankomat pouze podporuje dva uživatele
user_id = 20, pin = 4555, balance = 1234,user_id = 30, pin = 9105, balance = 305.
Pravidla fungování bankomatu:
- k vybrání peněz je potřeba se nejdříve autorizovat správným ID a pinem,
- jestliže existující uživatel zadá pin 3x, je zablokován, a jakákoli následující přihlášení jsou neplatná (uživatel je stále zablokován),
- autorizorizovaný uživatel může prohlížet zůstatek jeho konta a také vybírat peníze, jestliže se pokusí vybrat větší zůstatek, než má na účtě, nic se nevybere a zůstatek zůstává stejný.
Bankomat je identifikován datovým typem atm_psy_t. Jedná se o ukazatel na strukturu,
k jejíž členům nemáte přístup (tzv. opaque typ) a slouží pouze pro předávání
do funkcí operující nad tímto typem (tzv. metody).
Projekt obsahuje Makefile, hlavičkový soubor (atm.h) definující interface bankomatu,
samotnou implementaci bankomatu v souboru atm*.o a také soubor testenv.c,
ve kterém doplníte testovací případy. Soubor testenv.c obsahuje příklad testovacího
scénaře, kde se snaží do konta dostat nezaregistrovaný uživatel.
ℹ️ Testovací případy musí být funkce, která je typu
bool(*)(atm_psy_t*), tedy funkce vracející bool bez parametrů. Funkce vracítrue, jestliže případ prošel,falsejinak. Použijte macroTEST_CASE, se kterém zavoláte příslušný testovací scénář.
⚠️ Musíte upravit
Makefile, aby se slinkovala správná implementace bankomatu. Překlady jsou hotové jak pro x86 Linux, tak pro Apple ARM MacOS. Stolní počítače v učebně mají x86 Linux.
Část 2 (White box testing s nástrojem lcov)
Nejdříve si nainstalujte lcov, viz výše. Stáhněte si projekt 11-lcov-whitebox.zip.
Program je jednoduchá hra v bludišti. Aby se hra spustila, musí existovat soubor mazeconf.txt,
ve kterém je definice bludiště.
Formát bludiště je následující
- První řádka: velikost bludiště
n(jedno celé číslo) - Další řádky: definice bludiště samotného. Jedná se o
nřádek, každá řádka obsahujenznaků. Každá řádka je oddělena newline. - Poslední řádka: dvě čísla - pozice
xay, kde bude začínat hráč.
Definice bludiště může obsahovat následující znaky:
.: místo, kde se hráč může pohybovat,@: překážka, kam uživatel nemůže jít,*: třešnička.
Hráč nemůže začínat mimo hranice bludiště, na překážce či na třešničce.
Po úspěšném načtení bludiště uživatel zadává příkazy w/a/s/d (pohyb v bludišti).
Jakýkoli jiný příkaz skončí hru. Každý příkaz je oddělen enterem.
Váš úkol
Rozbalte .zip s jednoduchou hrou a projekt přeložte. Vyzkoušejte si hru zahrát.
K projektu máte soubor základní bludiště mazeconf.txt, kde je bludiště o velikosti 13x13,
a začínající pozice x=2, y=2. Program tento soubor úšpěšně načte a zkuste si hru zahrát.
Váš úkol je si prohlédnout soubor maze.c a zamyslet se, jak musíte modifikovat
bludiště v mazeconf.txt, abyste pokryli všechny případy, které kontrolují špatný formát
bludiště (špatně zadaná pozice hráče, špatné délky řádky, atp.).
Také si zkuste hru zahrát a pokrýt všechny řádky ve funkci
static void ,
kde běží herní smyčka. Zamyslete se nad všemi podmínkami, které zaručují správnost implementace.
K dispozici máte Makefile s následujícími pravidly:
all: zkompiluje program,run: spustí hru, ale nevygeneruje coverage report,lcov: spustí hru a vygeneruje coverage report.
Report by se měl po více spuštěních sám aktualizovat, interaktivní změnou bludiště
v souboru mazeconf.txt a samotnou hrou můžete pozorovat změny v pokrytí řádek.
ℹ️ Report je ve formátu
.html, který musíte otevřít v prohlížeči. Z příkazové řádky lze report otevřít pomocífirefox coverage_html/index.html(nebo také pomocíxdg-open coverage_html/index.html, popř.open coverage_html/index.htmlpro MacOS).