Mnoho jsem o automatickém testování četl, kdysi jsem to několikrát zkoušel (ale špatně, protože jsem testy nepsal předem, ale dodatečně) a až teď jsem skutečně objevil jeho kouzlo. Zjistil jsem nejenom to, že není vůbec otravné, ale dokonce že to je velice příjemné a celkem dost užitečné. Řekl bych, že to je tím, že jsem se dal na Test Driven Development.
Kolem automatického testování existuje spousta nepodložených obav a mýtů. Pokusím se alespoň některé z nich vyvrátit nebo objasnit:
- Automatické testování žere hodně času — zjistil jsem že toho času není zdaleka tolik a že pokud jde o čas, nárůst času potřebného na vyřešení nějakého problému se pohybuje někde mezi 10% a 20%. Když pak vezmu úsporu při supportu projektu, při refactoringu (který je bez automatického testování poněkud adrenalinovým sportem :-D), při dohadování se analytikem/zákazníkem (Analytik: “…ale my jsem tam tu funkci dřív měli a teď zmizela!“, Vývojář: “Ne, neměli jsme ji, protože jsme na ni nidky neměli test!” nebo A: “Ale před tím to dělalo tohle!” V: “Ne, vždycky to dělalo jenom tamto, protože jinak by neprošel test!“), ztráta je minimální, pokud vůbec nějaká.
- Automatické testování je nepohodlné — naopak! Automatické testování je neuvěřitelně pohodlné. Nemusíte provádět testy ručně! Typický vývoj webové aplikace probíhá tak, že napíšete kousek kódu, reloadujete stránku nebo submitnete formulář díváte se jestli to dělá to, co má. A když ne, tak ještě jednou, podruhé, … S automatickým testováním, prostě spouštíte task v Antu tak dlouho, dokud všechny testy neprojdou. V nových NetBeans, prostě jenom mačkáte Alt-F6…
- Automatické testování vám zaručí bezchybný kód — toto bohužel také není pravda. Kvalita kódu se bezpochyby zvýší, ale 100% bezchybný kód vám to nezaručí. Ale zato vám zajistí klidnější spánek po každém deploymentu k zákazníkovi (“Co, když jsem někde do něčeho drbnul a už to nefunguje?“), po každém refactoringu. S automatickým testováním měníte (co se týče bezpečnosti) Škodovku 120 za Hummera. Můžete prostě po dálnici jezdit rychleji a nic se vám nestane…
- Můj program se nedá automaticky testovat — oblíbený argument lidí, kteří se bojí, že by je někdo nutil psát automatické testy. Jsem přesvědčen o tom, že naprostá většina programů se testovat dá (pokud použijete metodiku Test Driven Developmentu), protože při jejich vývoji to prostě programátor musí taky dělat. To, jak to kontroluje programátor, se určitě dá automatizovat. Program o nichž jejich autoři tvrdí, že jsou netestovatelné jsou nejspíš špatně navržené.
Kromě toho, ale u automatického testování existují také výhody, které nemusí být na první pohled zřejmé:
- Automatický test je vynikající programátorská dokumentace — unit test je vždy aktuální a snadno čitelná dokumentace toho, co přesně program dělá. Oceníte po nějaké době, když se budete k aplikaci vracet a budete vzpomínat, co to vlastně dělalo…
- Automatické testování vede k lepší strukturovanosti kódu — zjistil jsem že psaní testů člověka nutí k daleko lepšímu návrh tříd a algoritmů. Nezdá se to, ale programy jsou čitelnější, zřejmější.
Rozhodně myslím, že překonat obavy z neznáho se musí vyplatit.