Obsah
Testovací dluh
Testovací dluh (z anglického test debt) je forma technického dluhu, která vzniká, když tým:
- nedodělá potřebné testy,
- píše špatné, nedostatečné nebo nespolehlivé testy,
- nebo odkládá automatizaci testů kvůli časovému tlaku.
Na rozdíl od kódu, který „funguje“, testovací dluh sníží důvěru v kvalitu systému, zpomaluje vývoj a zvyšuje riziko regresí (návratu již opravených chyb).
Původ pojmu
Pojem vychází z analogie s technickým dluhem (Ward Cunningham, 1992), ale konkrétně se zaměřuje na testovací strategii a pokrytí. Testovací dluh se často akumuluje v raných fázích projektu, kdy tým „zrychluje vývoj“ tím, že testy ignoruje – což se později vyplácí náklady na ladění, manuální testování a nestabilitu systému.
Typy testovacího dluhu
| Typ dluhu | Popis | Příklad |
|---|---|---|
| Chybějící testy | Neexistují testy pro kritické části kódu. | Kód pro platbu v e-shopu nemá žádné jednotkové testy. |
| Povrchní testy | Testy existují, ale pokrývají jen „happy path“, ne okrajové případy. | Test ověřuje jen úspěšné přihlášení, ne špatné heslo. |
| Nespolehlivé testy (flaky tests) | Testy občas selžou bez změny kódu. | E2E test selže, pokud je server pomalý. |
| Nepřehledné testy | Testy jsou špatně čitelné, bez jasných asercí. | Test používá magická čísla a žádné komentáře. |
| Špatně umístěné testy | E2E testy pro logiku, kterou by měly pokrýt jednotkové testy. | Ověření výpočtu DPH probíhá přes UI místo jednotkového testu. |
| Manuální testovací scénáře bez automatizace | Důležité scénáře se opakují ručně. | Každé nasazení vyžaduje 2 hodiny manuálního testování košíku. |
Důsledky testovacího dluhu
- Zpomalení vývoje: Vývojáři se bojí měnit kód, protože nevědí, co porouchají.
- Časté regrese: Chyby se vrací, protože nejsou zachyceny testy.
- Nízká důvěra v automatizaci: Tým začne testy ignorovat nebo je označovat jako „označené k přeskočení“.
- Zvýšené náklady na QA: Roste potřeba manuálního testování.
- Horší kvalita produktu: Do produkce se dostávají chyby, které by mohly být zachyceny dříve.
- Morální úpadek týmu: Vývojáři ztrácejí radost z kódování v „nepřehledném“ systému.
Jak testovací dluh měřit?
Přestože není možné ho přesně kvantifikovat jako finanční dluh, lze použít následující metriky:
- Test coverage – procento kódu pokrytého testy (např. pomocí JaCoCo, coverage.py).
⚠️ Varování: Vysoké pokrytí ≠ kvalitní testy! Může být 100 %, ale testovat jen „že kód běží“.
- Počet flaky testů – testů, které selhávají náhodně.
- Poměr typů testů – odchylka od testovací pyramidy (např. 80 % E2E, 5 % jednotkových).
- Manuální testovací scénáře – počet kritických scénářů bez automatizace.
- Stáří neotestovaného kódu – kolik dní/kommitů od posledního testovacího commitu.
Jak se testovacímu dluhu vyhnout?
- Testuj od prvního dne – i malý projekt by měl mít základní jednotkové testy.
- Dodržuj testovací pyramidu – většina testů by měla být jednotkových.
- Nepřijímej PR bez testů – zaved politiku „code coverage gate“ v CI.
- Refaktoruj testy – testy jsou kód; aplikuj na ně stejná pravidla (DRY, čitelnost).
- Pravidelně odstraňuj flaky testy – buď je oprav, nebo odstraň.
- Plať dluh postupně – při každé úpravě kódu přidej testy pro danou komponentu („boy scout rule“).
Jak testovací dluh splácet?
- Prioritizuj kritické části – začni testováním modulů s nejvyšším rizikem (např. platby, autentizace).
- Použij „stratégii krabičky“ – pokud nemůžeš testovat jednotlivé funkce, otestuj celý modul jako „černou krabičku“.
- Zautomatizuj manuální scénáře – začni s nejčastějšími nebo nejrizikovějšími.
- Vytvoř „dluhový backlog“ – eviduj testovací dluh jako uživatelské příběhy v nástroji pro správu úloh (Jira, Trello).
- Naplánuj „sprint pro kvalitu“ – občas věnuj celý sprint odstranění dluhu.
Testovací dluh vs. technický dluh
| Aspekt | Technický dluh | Testovací dluh |
| ——– | —————- | —————- |
| Zaměření | Kvalita kódu, architektura | Kvalita a přítomnost testů |
| Důsledek | Těžší údržba kódu | Nízká důvěra v chování systému |
| Měřitelnost | Statická analýza (SonarQube) | Coverage, počet testů, flakiness |
| Splácení | Refaktoring, přepis | Psaní testů, zlepšování testovací strategie |
💡 Testovací dluh je často součástí technického dluhu, ale vyžaduje specifický přístup.
Související pojmy
Externí odkazy
- Martin Fowler – Test Debt: https://martinfowler.com/articles/is-quality-worth-cost.html
- Google Testing Blog – Flaky Tests: https://testing.googleblog.com/2017/04/where-do-our-flaky-tests-come-from.html
- IEEE – „The Real Cost of Test Debt“ (akademický článek)
