¨====== TDD (Test-Driven Development) ====== **TDD** není technika testování, ale technika **návrhu** softwaru. Nutí vývojáře přemýšlet o zadání a rozhraní (jak se bude kód používat) dříve, než začne řešit samotnou implementaci (jak to bude fungovat uvnitř). ---- ====== Cyklus Red – Green – Refactor ====== TDD probíhá v neustále se opakujícím krátkém cyklu tří fází, který trvá obvykle jednotky minut: 1. **RED (Červená):** Napíšete malý [[unit_testing|jednotkový test]] pro funkci, která ještě neexistuje. Spustíte testy – tento nový test musí selhat (svítit červeně). Tím ověříte, že test skutečně něco testuje a neprochází jen náhodou. 2. **GREEN (Zelená):** Napíšete nejjednodušší možný kód (klidně i "špinavý" nebo s napevno zadanou hodnotou), aby test prošel (svítil zeleně). Cílem je mít funkční kód co nejrychleji. 3. **REFACTOR (Refaktorování):** Nyní, když máte jistotu, že kód funguje (test je zelený), jej vyčistíte. Odstraníte duplicity ([[dry_princip|DRY]]), zlepšíte názvy a strukturu. Testy po každé změně znovu spustíte, aby byla jistota, že jste nic nerozbili. ---- ====== Výhody TDD ====== * **Vysoké pokrytí testy:** Jelikož kód vzniká jen jako odpověď na test, je téměř 100% kódu pokryto automatizovanými testy. * **Čistší design:** Programátor je nucen psát kód, který je snadno testovatelný, což vede k menším třídám a dodržování [[solid_principy|SOLID principů]]. * **Méně chyb:** Většina logických chyb je odhalena okamžitě během vývoje, nikoliv až testery nebo zákazníky. * **Odvaha ke změnám:** Díky síti testů se vývojář nebojí provádět velké změny v kódu (refaktorovat), protože okamžitě vidí dopad své úpravy. ---- ====== Nevýhody a mýty ====== * **Pomalejší start:** Psaní testů zabere na začátku čas. Z dlouhodobého hlediska se však čas ušetří díky méně chybám a snazší údržbě. * **Není pro všechno:** TDD se hůře aplikuje na UI (uživatelské rozhraní), složité integrace nebo průzkumný vývoj, kde programátor ještě neví, jak bude výsledek vypadat. * **Údržba testů:** Pokud se změní zadání, musí se upravovat nejen kód, ale i testy. ---- ====== Srovnání: Tradiční vývoj vs. TDD ====== ^ Fáze ^ Tradiční vývoj ^ TDD (Vývoj řízený testy) ^ | **1. Krok** | Návrh a psaní kódu. | Psaní selhávajícího testu. | | **2. Krok** | Ruční zkoušení / Psaní testů. | Psaní kódu pro splnění testu. | | **3. Krok** | Oprava chyb. | [[refaktorovani|Refaktorování]] pod dohledem testů. | | **Důraz** | Na rychlost prvního dodání. | Na kvalitu a dlouhodobou udržitelnost. | ---- //Související pojmy: Unit Testing, Refaktorování, SOLID principy, DRY princip, Technický dluh.//