Můj malý svět

Obrať obličej k slunci
a stíny budou padat za tebe

Bez testů ni ránu

Má opakovaná zkušenost říká, že psát testy se vyplatí. I když ti, co je neznají, říkají, že je to zbytečná duplikace práce (prvně napsat test, a pak ještě vlastní kód, přičemž testy jsou mnohdy delší než samotný kód).

První pěkná věc, která se mi při psaní testů přihodila, byla, že si ještě před vlastním psaním kódu ujasním, co vlastně chci, aby ten kód dělal, a jak budu danou záležitost vlastně implementovat – následně pak už nemusím při programování tolik přemýšlet. Můžu takhle danou funkcionalitu implementovat i po částech – zkrátka tak, jak mám hotové testy, tak dopíšu funkcionalitu, otestuji a jdu dál.

Čili mám možnost průběžně kontrolovat výsledky své práce – vím, že držím směr – a pokud budou úpravy vyžadovat zásahy do více míst kódu, můžu si pomocí testů zajistit, že je provedu všude a na nic nezapomenu. Je to podobné, jako kdybych si to sepsal na papír, a pak po dopsání kódu danou položku na papíře odškrtnul. V testech ale mám navíc i kontrolu správnosti napsaného kódu.

Druhá prima výhoda testů se projeví v okamžiku, kdy je potřeba do už hotového kódu více či méně zasáhnout a provést nějakou úpravu. Zvláště pokud člověk programuje na zakázku, není výjimkou, že zákazník odsouhlasenou věc smete se stolu a řekne, že to chce jinak. Místo přepisování půlky aplikace a modlení se, aby člověk někde něco omylem nerozbil, stačí upravit testy na funkcionalitu, která bude jinak, a nerozbití aplikace už testy ohlídají (pokud jsou dobře a poctivě napsané).

Třetí výhodu člověk pocítí, pokud staví nad nějakou knihovnou nebo frameworkem. Není úplně výjimkou, že se změní chování něterých funkcí, které nemusí být na první pohled patrné, ale může se projevit třeba i jen v jednom krajním případě. U mě je pravidlem, že při upgradu webové aplikace na novější verzi Ruby on Rails je něco rozbité. U starších aplikací, kde testy ještě nemám, proto upgrady raději vůbec nedělám (časem je rovnou přepíšu odznova).

To jsou tři největší výhody testů, na které při programování narážím. Je jich samozřejmě mnohem víc (např. snazší proniknutí do aplikace nováčkem – k tomu je navíc dobré psát i dokumentaci), stačí trošku pohledat nebo popřemýlet.

Aby testy mohly plnit svůj účel, je potřeba naučit se je psát. Není totiž test jako test. Člověk intuitivně testuje, co má aplikace umět (lze vynechat testy používaných knihoven – lze předpokládat, že pokud by tam byla chyba, projeví se to v testech naší aplikace). Důležitým úkolem testů je snažit se ukázat, že v aplikaci je chyba – z toho plynou testy na krajní podmínky, nestandardní vstupy, útoky na přetečení zásobníku atd. Je vidět, že takový test bude mít větší hodnotu než test, zda 1 + 1 = 2. ;c)

Testy totiž nelze prokázat, že v aplikaci není chyba. Na to jsou určeny jiné (formálnější) techniky jako ověřování modelu (model checking) apod. Přesto však jsou testy významnou pomůckou k méně chybovému kódu.

Zaškatulkováno v kategorii: Programování | 31. srpna 2012

Komentáře

Jak přidat komentář? E-mailem! :c) Na komentare -zavináč- mujmalysvet -tečka- cz – do předmětu „Komentář:“ + název zápisku (tj. „Komentář: Bez testů ni ránu“), případně připojte i svou přezdívku a domovskou stránku.