O Test Drive Development jsem dlouho četl a téměř stejně tak dlouho jsem ho i odsuzoval jako metodu, která je trochu postavená na hlavu a člověku jen přidává práci. Nakonec jsem se rozhodl prolomit ledy a TTD používám zhruba týden u jednoho nového projektu a právě ta atypičnost mě chrání před spoustou nástrah do kterých často padáme.

Vsuvka pro lidi kterým zkratka TTD nic neříká. Jedná se o jednu z metodik extrémního programování, která spočívá v tom, že programátor nejdříve napíše jednotkový test. Ten spustí, čímž se přesvědčí, že test nefunguje. V dalším kroku dopíše funkcionalitu i do samotného programu, tak aby splnil test a pak už se jen kód různě refaktorizuje a jede se pořád dokola. Více informací naleznete na Wikipedii.

Na první pohled se Vám tenhle přístup bude zdát asi jako mrhání drahoceným časem, ale jak jsem sám zjistil opak je pravdou a už během takové krátké doby, jako je ten jeden týden, pozoruju spoustu pozitivních důsledků. Jde především o následující:

  1. Ortogonalita: už z podstaty této metodiky je nutno stavět každý modul co nejvíce samostatně, což je žádoucí i mimo svět automatizovaných testů.
  2. Jistota: dřív jsem si různě do logů vypisoval hodnoty, které jednotlivé metody vrací a porovnával je s očekávaným výsledkem. Tohle jsem si však hlídal jen při psaní toho kterého kódu a pak maximámlně při hledání chyb. Teď si jsem jistý, že vše stále funguje a nezanesl jsem tam chybu při jiné práci.
  3. Důsledné oddělení pohledu od logiky: při správném a důsledném použití tohoto přístupu nemůžu používat, všude tak oblíbené, míchání kódu uživatelského rozhraní s aplikační logikou – špagetový kód (či jak se to správně překládá).
  4. Větší přehled o tom co programuju. Ještě před psaním samotného kódu si musím rozmyslet co ta která metoda má vubec dělat a pak s jasným umyslem přistupuju k implementaci.

Problémem zůstává jak tuhle metodiku napsaovat na projekt, který nebyl takhle i navrhován. Starám se o jeden hrůzný software, který porušuje snad všechny nepsané programátorské zásady (další navíc zavádí) a rád bych takhle pracoval. Jak ji však zavést do té spouště jsem zatím nevymyslel, jestli na něco přijdu tak dám vědět.

Poznámka pro Delphisty. I v Delphi máme framework na testování jménem DUnit, který jsem si celkem oblíbil. Druhá důležitá součást nám však ve starších verzích chybí. Touto součástí myslím nějaký druh automatického refactoringu, který je pro úspěšné používání TDD nepostradatelný.