Programování řízené testy
Mám to potěšení napsat pár řádků o knize od Kenta Becka s názvem Programování řízení testy (v anglickém originálu Test Driven Development: By Example).
Každý programátor má své návyky, které aplikuje pří vývoji softwaru. Klasický přístup vypadá tak, že identifikujete systém a jeho use casy, naprogramujte část systému a pak vyzkoušíte zda se chová tak jak má.
Odlišný přístup se jmenuje programování řízené testy (test driven development). Pracovní postup je zde odlišný – před psaním samotnéhé kódu napíšete testy – sadu podmínek, které musí výsledná aplikace splňovat.
Pokud tímto způsobem ještě neprogramujete může být pro váš těžké si to představit v praxi. A právě k tomu je výborná kniha, o níž pojednává tento článek.
Obsah knihy
Kniha je rozdělena na tři velké části:
Část první – Příklad s penězi
V této části, která tvoří polovinu celé knihy, autor prochází od samého začátku příkladu s finančními operacimi ve více měnách. Na začátku práce je virtuální list papíru, na který si píšeme požadavky na výsledný program. Poté se započne s napsáním testu na tu nejjednodušší funkčnost. Slyšíte správně – nepíšou se žádné třídy – rovnou testy, ve kterých se s klidem odvoláváme na neexistující třídy a metody.
Následuje spuštění testu – test samozřejmě neprojde. Dalším krokem je sprovoznění testů – s nejmenším možným odporem. Pokud tedy máme mít metodu na sčítání dvou čísel a test vypadá takto:
public void testFoo() {
this.assertEquals(3, myClass.foo(1, 2);
}
Tak nejjednodušší implementace metody foo pro projití testem bude vypadat:
public void foo(int a, int b) {
return 3;
}
Možná si řeknete, že je tento postup hloupý, ale jedním z pravidel
TDD je psát pouze kód,
který projde testy. Nic navíc. Když přidáte další testy bude samozřejmě
potřeba metodu foo
upravit. Vývoj pomocí TDD má následující
cykly:
- Napsání nového testu a jeho spuštění
- Úprava kódu programu tak, aby nový test prošel (a s ním samozřejmě všechny předcházející)
- Refaktorizace kódu (např. kvůli odstranění duplicit)
V první části je v použit programovací jazyk Java.
Část druhá – Příklad s xUnit
xUnit je název pro testovaný rámec, který se v příkladu vytváří. Tentokrát je použit jazyk Python. Obsah kapitoly je podobné té první – opět návrh programu from scratch pomocí TDD.
Část třetí – Vzory pro vývoj řízený testy
V této části autor mluví o návrhových vzorech, refaktorizaci, testovacích vzorech atd.
Na závěr krátký citát z knihy:
Jednou z velkých frustrací mého života mladého inženýra bylo zahájit projekt s obrovským nadšením a pak sledovat, jak se kód během doby hatí. O rok později jsem si už nepřál nic jiného, jen ten teď už smradlavý kód zahodit a dostat nový projekt. TDD vám umožní získat během času důvěru ve váš kód, Jak se testy hromadí (a vaše testování zlepšuje), získáváte důvěru v chování systému. Jak vylepšujete návrh, můžete dělat stále více a více změn. Mým cílem je, abych se po roce cítil ohledně projektu lépe, než když jsem nadšeně začal s růžovými brýlemi na nose.
Závěr
Věřím, že hodně z vás už tuto knihu četlo – často bývá zmiňována jako základní publikace z této oblasti. Útlá knížečka je psaná čtivým (a srozumitelným) jazykem. Je to čtení na pár večerů.
Informace o knize
- Název
- Test Driven Development: By Example
- Autoři
- Kent Beck
- Vydal
- Addison-Wesley Proffesional
- ISBN
- 0321146530
- Datum vydání
- 2003
- Počet stran
- 204
Celý článek 7 komentářů 11. October 2007