Programování řízené testy

11. October 2007

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:

  1. Napsání nového testu a jeho spuštění
  2. Úprava kódu programu tak, aby nový test prošel (a s ním samozřejmě všechny předcházející)
  3. 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

Článek patří do kategorie: Knihovna

6 Komentářů Přidat komentář

  • 1. Josef Petrák  |  11. October 2007 v 22.03

    Kniha je i v mé knihovničce. Nikdy jsem ji nepřečetl 100% celou. První část se mi v době čtení zdála trochu zmatečnou – ale s odstupem času jsem pochopil, že má něco do sebe se zaměřit právě na splnění aktuálně psaného testu a nezaobýrat se implementací ničeho dalšího.

    Jedinou fázi TDD, kterou rád směle oželím, je pouštění testů proti neexistujícím třídám, nebo třídám, jež nelze přeložit kvůli chybějícím metodám volaným z testu, chybějícím return statementům, atp. :-/

  • 2. Vlasta  |  12. October 2007 v 9.36

    [1] Ono v takové Javě skutečně nemá cenu spouštět testy proti neexistujícím třídám a metodám – přesněji řešeno ony ani spustit nejdou – protože se nepřeloží. V PHP je situace jiná – k přeložení dochází až při runtimu – tam ty testy spustit půjdou.

  • 3. Josef Petrák  |  15. October 2007 v 12.17

    [3] Souhlas. A tím pádem by se dalo říct, že PHPUnit testy zajišťují také „kontrolu překlepů“. Jen je to matoucí, že spouštět test proti neexistující třídě radili právě v jazyce Java-tudíž je asi na každém, kolik % metodiky TDD kdo bude přijímat za svou a používat.

  • 4. lzap  |  22. October 2007 v 22.30

    Ta kniha bohužel není tak dobrá. Ačkoli jsem velkým obdivovatelem práce J. Blocha, tento titul je zmatečný a podle mého názoru špatně zpracovaný. Nicméně i tak obsahuje mnoho hodnotných rad.

  • 5. jos  |  29. October 2007 v 15.30

    [4] kdo je J.Bloch?

  • 6. Andrej  |  5. November 2007 v 14.40

    Pri pouziti Eclipse + Java sa da takymto sposobom pekne pisat kod zhora dole.
    Napisem nazov triedy, svieti cerveno, Ctrl+1 a vytvorim triedu. Napisem volanie metody, svieti cerveno, Ctrl+1 a implementujem metodu.

Přidat komentář

Povinné

Povinné, skryté

Security Image Povinné
Opište text z obrázku

Povolené HTML značky:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>

Odkazovat na tento článek  |  Přihlásit se k odběru těchto komentářů přes RSS Feed


Kalendář

October 2017
M T W T F S S
« Jan    
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

Poslední články

Locations of visitors to this page