loading...

Jiří Hýsek

nájemný programátor
 

Blogu většinou o programování mobilních aplikací - pro iOS v Rubymotion, multiplatformních mobilních her Corona SDK a webových aplikací v Ruby on Rails.

Co jsou to ty testy?

Tdd

V tomto článku bych chtěl stručně vysvětlit, k čemu slouží automatické testy softwaru. Co nejjednoduššeji bez zabíhání do detailů - tento článek je určen neprogramátorům, například zadavatelům software (klientům). Ne že by to vyloženě museli vědět, ale aspoň mí klienti se tomu málokdy vyhnou. Takže shrnu, v čem spočívají výhody pro ně, co od toho čekat a co od toho nečekat. 

Co jsou softwarové testy?

Test je program nebo chcete-li skript, který ověřuje, jestli nějaká konkrétní funkcionalita aplikace funguje správně. Například vám řekne, jestli se uživatel se správně zadanými přihlašovacími údaji opravdu přihlásí. A nebo jestli se se špatnými údaji opravdu nepřihlásí. A podobně.

Test navodí nějakou situaci, provede nějakou akci a zkoumá, jestli se akce projevila tak, jak by v dané situaci měla. Udělá v podstatě to, co by udělal člověk, když by chtěl danou funkci otestovat. Jenom to dělá mnohem rychleji než člověk a nevadí mu to dělat pořád dokola třeba stokrát denně. Takže není problém po každé změně otestovat celý systém. 

Testy si programátor při po provedení úprav spouští u sebe na počítači. Na serveru během ostrého provozu se nespouštějí, nemají žádný vliv na samotný běh aplikace.

K čemu jsou dobré?

Při vývoji softwaru dochází neustále k nějakým změnám, které mohou mít vliv i na již hotové části. Když jsou k nim ale testy, dá se snadno automaticky ověřit, jestli vše zůstalo v pořádku. Testy si "proklikají" celou aplikaci a pokud něco funguje špatně, dají hned vědět co.  

Z pohledu klienta je důležité, že testy výrazně zvyšují spolehlivost softwaru. Po prvním nasazení se obvykle nějaké ty mouchy najdou vždycky, ale s poctivými testy jich nebývá tolik. Kromě toho se díky nim software mnohem snadněji (takže i levněji) udržuje - máte menší šanci, že vám po úpravě nebo přidání dalších funkcí programátor rozbije to, co už fungovalo. Programátor si to obvykle otestuje i ručně, ale proklikat všechny funkce celého systému po každé drobné změně... to už je nadlidský úkol, proto se to nedělá, a tak se občas stává, že po opravě chyby přibudou další dvě nové. Ale je-li aplikace dobře pokryta testy, tak to testy pohlídají za programátora.

A z pohledu programátora je to vůbec hrozně dobrá věc. Obzvlášť, pokud na softwaru pracuje víc lidí nebo se software přebírá po někom jiném. Přebírat po někom rozsáhlejší software bez testů je celkem nevděčná role - když se najde chyba, nikdo nedokáže říct, jestli ji způsobil nový programátor svými změnami (což se snadno stane, když zpočátku nemá detailní přehled o tom, co a jak v přebíraném systému funguje) nebo tam byla už dřív. Od doby, co používám testy, mám i klidnější spaní - už se nestává, že v 8 ráno volá klient, že mu něco přestalo fungovat a že to potřebuje do 10 minut opravit :)

K čemu nejsou dobré?

Protože situací, ve kterých se aplikace může nacházet, je přibližně nekonečně mnoho, testy je všechny nedokáží pokrýt. Proto testy nedokáží říct, že v aplikaci není chyba. Dokáží říct jen to, že v ní chyba je. Což není totéž. Chyba může nastat v situaci, kterou test neověřuje. Takže i když všechny testy projdou bez chyb, není záruka, že v aplikaci nějaká chyba není.

Ale pokud se na takovou chybu narazí, zodpovědný programátor před její opravou napíše další test, který ji odchytí. Test by měl říct, že za těch a těch okolností nastala chyba. Programátor pak chybu opraví, spustí test znovu a ten by už měl projít bez chyb. Máme tak jistotu, že i když se budou dělat další změny, tak za téhle konkrétní situace už tato chyba nenastane. Respektive pokud nastane, tak že se to programátor dozví ještě před vypuštění aplikace do světa a může ji tak hned opravit.

Na druhou stranu test je také jenom program. Chyba může být i v samotném testu. Proto programátor musí dodržovat určité postupy - např. vždycky si ověřit, že test umí i selhat, udržovat testy jednoduché a přímočaré a podobně… to už ale zabíhám dál, než jsem chtěl. Pro programátory napíšu zase něco příště... 

Zpět na seznam článků