Nesnesitelná lehkost TDD

~ ~
Když se mi před několika lety dostala do rukou knížka Kenta Becka byl jsem ohromen a nemohl jsem uvěřit, že řešení mých problémů je tak snadné.

Díky xUnit frameworkům můžu testovat výstupy metod/funkcí a porovnávat je s referenčními hodnotami. Testy můžu spouštět opakovaně, automaticky a nemíchám je s produkčním kódem. Obrovský pokrok od špaget zasviněných zakomentovanými var_dumpy.

Nadšení vystřídalo zklamání protože všechny tutoriály se omezily na nejzákladnější příklady typu Napiš si svůj první unittest. Já ale hledal způsob jak testovat svoje existující aplikace přistupující do databáze a generující HTML výstup. Jak testy strukturovat, kde je mít uložené a jak s nimi pracovat v PHP.

Zdálo se, že jediný způsob jak rozjet vývoj řízený testy je začít s novým projektem na zelené louce. To je sice jedno z řešení ale bohužel se ukazuje jako krajně nevhodné pokud nezačínáte s opravdu novým projektem který má dělat věci které jste ještě nikdy neprogramovali. Jinak totiž hrozí riziko, že budete roky a roky psát dokola pořád to samé a při každé iteraci to bude mít stále méně funkcí. Navíc musíte zároveň udržovat starý systém ale už nepřidáváte nové vlastnosti a jenom záplatujete a soutředíte se na systém nový který samozřejmě ještě není hotový a na jeho dokončení je vyvíjen obrovský tlak. Takže některé věci neuděláte tak dobře jak byste chtěli a zelená louka už není tak zelená.

Jako mnohem vhodnější způsob se ukazuje postup někdy nazývaný Mírný pokrok v mezích zákona. Tento způsob je sice možná pomalejší ale výrazně bezpečnější, protože nemusíte řešit přechodný stav kdy se vyvíjí nový systém, netříštíte síly při vývoji dvou systémů a zárověn pracujete se systémem který dobře znáte. Takže tento způsob je ve svěm důsledku paradoxně rychlejší.

A teď, ke strojům.