Role testování ve vývoji moderní webové aplikace

Webové aplikace se dnes vyvíjí velmi rychle v krátkých vývojových cyklech za použití Agile metodologie. Ani platforma Zpravodaje365 není vyjímkou a prochází dynamickým rozvojem. Neustále pro vás přidáváme nové funkce a vylepšujeme ty stávající. Každý software postupem času narůstá, stává se komplexnějším a vzniká větší prostor pro chyby. K odstranění tohoto nežádoucího jevu přistupujeme pomocí propracované testovací strategie.

Náš tým programátorů je doplněn o testery, jak tomu bývá běžně zvykem. Základní testovací cyklus začíná nahráním nového kódu na náš interní server. Testeři pečlivě ověřují, že všechny nově přidané nebo modifikované aspekty aplikace odpovídají zadání. Testy jsou rozděleny na co nejmenší jednotky a výsledkem je zpráva, která se vyplní po dokončení testování. Získané informace slouží jako zpětná vazba pro programátory. V případě odhalení chyby dojde k jejímu opravení a celý proces začíná znova.

Podobný způsob zajišťování kvality softwaru zní rozumně a je jeho nedílnou součástí. Naráží však na několik omezení. Především není dostatečně rychlý a není schopen udržet tempo s moderním vývojem softwaru, jak jsme zmínili na začátku toho článku. Dříve se nové verze aplikací připravovaly několik měsíců nebo dokonce i několik let. Specifikace byly předem jasně dané a neměnily se. Dnes se používá podstatně flexibilnější způsob a nový software se ke klientům dostává pravidelně v řádu měsíců, týdnů nebo v některých případech i dnů. Manuální testování samo o sobě už není dostatečné a ke slovu se dostává automatizace. Automatizací se výrazně zrychluje proces testování. Programátoři mají takřka okamžitou odezvu na případnou chybu, kterou způsobili. Nemusí čekat několik hodin nebo dnů než se chyba odhalí manuálním testováním.

Rozlišujeme dvě hlavní formy samočinného testování. Jedná se o takzvané unit testy a automatizované testy. Unit test ověřuje správnou funkčnost bloků nacházející se na velmi nízké úrovni architektury aplikace. Zpravidla se testují jednotlivé metody nebo funkce. Unit test je krátký a jednoduchý kód, ověřující, že pro daný vstup dostaneme požadovaný výstup. Tento typ testů je vytvářen a udržován programátory. Unit testy poskytují velmi rychlou zpětnou vazbu a zabraňují regresi. Ověřují, že software, který byl dříve vyvinut a testován, stále funguje stejným způsobem po jeho změně nebo propojení s jiným softwarem. Dalším benefitem je čitelnější kód. Programátoři jsou nuceni psát software tvořený malými logickými bloky, které jdou snadno testovat a také udržovat. Unit testy jsou velmi užitečné, ale už z jejich definice se zabývají pouze kódem na velmi nízké úrovni. Neověřují správnost větších komponent nebo funkčnost aplikace jako celku. Z tohoto důvodu používáme automatizované testy. Pro každý aspekt aplikace se napíší testovací scénáře. Příklad popisu testu pro vytvoření zpravodaje vypadá následovně:

  1. Příhlásím se jako administrátor do platformy Zpravodaje365.
  2. Expanduji seznam položek v administraci.
  3. Kliknu na sekci ‘Zpravodaje’.
  4. Kliknu na tlačítko ‘Přidat’.
  5. Vyplním všechny požadované hodnoty ve správném formátu.
  6. Kliknu na tlačítko ‘Uložit’.
  7. Ověřím, že nově vytvořený zpravodaj je viditelný v seznamu zpravodajů.

Podobné testy se spouští každý den a počítač postupuje krok po kroku, stejně jako by to udělal člověk. Otevře webový prohlížeč, zadá adresu testované aplikace, přihlásí se, provede navigaci a přidá například nový zpravodaj. Tento typ testování představuje větší síť zachycující chyby než je tomu u unit testů. Zároveň se provádějí podstatně rychleji než by to zvládl člověk. Nevýhodou je vysoká náročnost jejich tvorby a údržby.

Unit testy a automatizované testy signifikantně zrychlují zpětnou vazbu detekce chyb v aplikaci. To je zřejmé. K čemu tedy potřebujeme lidské testery? Výše popsané testy uvolňující ruce testerům, kteří tak mohou zaujmout důležitější roli. Namísto bezduchého provádění testů se mohou věnovat navrhování nových scénářů na základě své rozsáhlé doménové znalosti a ověřování mezních situací, které nejsou testy podchyceny. Zároveň se mohou starat o údržbu a rozvoj automatizovaných testů.