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.

O testování a lidech

~ ~
Všechno co jsme do této chvíle naprogramovali je špatně. To že to funguje nás neomlouvá.

Tento blog bude o programování. O radosti z programování a snaze udělat ze světa lepší místo. O testování webových aplikací, lepším návrhu, čistém kódu a, fuj, o péhápku.

Když mluvím o testování mám většinou na mysli jednotkový testování, ale hlavně půjde o automatické testování softwaru takže se nevyhneme integračním a akceptačním testům. A v rámci čistoty kódu si povíme i o refaktorování a kvalitě obecně.

Hlavní důvod proč se vrhám na tak něvděčnou činnost jako je psaní o zdánlivých zbytečnostech je, že takhle ke stáru začínám být trochu radikální a doslova doruda mě vytáčí co všechno za paskvily jsou schopni programátoři vyplodit, mě nevyjímaje.

A co mě opravňuje k tomu abych do toho tak ryl? Zkušenosti, milé děti. Webové aplikace v PHP programuju už devátým rokem. Napsal jsem několik CMS i tzv redakčních systémů, webový obchod, dva frameworky... Psal jsem v Jave i C#, embedded i desktopové aplikace v několika asemblerech, v mnoha odrudách basicu včetně nechvalně proslulého VB6. Psal jsem intepretry vlastních jazyků v C i v C++ a pár řádků jsem zanechal i ve zrůdném Pascalu. Teď, po dvaceti letech, už vím jak se to dělat nemá. Vydejte se se mnou za osvícením.

A ano jsem z Prahy, takže jsem dost nafoukanej.