IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

1. diel - Úvod do testovania v JavaScripte

Vitajte, všetci pokročilí programátori, u prvej lekcie online kurzu testovanie aplikácií v Javascriptu a vo Visual Studio Code. V kurze budeme postupne pokrývať kód rôznymi typmi testov a tým vytvárať spoľahlivé a kvalitné aplikácie. Je určený pre všetkých, ktorí sa usilujú o slušné zamestnanie, kde vás za tieto skúsenosti veľmi dobre ohodnotí, alebo ktorí majú nejakú svoju aplikáciu a radi by ju ďalej pohodlne rozširovali tak, aby sa nemuseli báť, že zmeny kódu rozbijú pôvodnej funkčnosť.

Budem predpokladať, že poznáte:

Testovanie je vlastne takým štvrtým bodom osnovy vyššie, ktorý by mal každý dobrý programátor poznať, aby jeho práca za niečo stála.

Kedy testovať

Testovanie sa určite radí medzi dobré praktiky vývoja softvéru (best practices). Ďalšia touto praktikou je napr. Programovať objektovo, používať viacvrstvovú architektúru a podobne. Niektoré praktiky by sme mali dodržiavať naozaj ortodoxne, napr. Pre písanie neobjektového kódu existuje naozaj jediný dôvod a tým je neznalosť programátora. Zapúzdrovanie logiky aplikácie do objektov a vrstiev znamená pre skúseného vývojárov minimálnu zdržanie a minimalizuje náklady na rozširovanie a udržiavanie neprehľadné a nerozvrstvené aplikácie. Na druhú stranu, niektoré praktiky vývoja softvéru by sme naopak nemali dodržiavať až takto extrémne a medzi ne patrí práve testovania.

Hneď na úvod spomeniem, že testovanie je veľmi dôležité a v určitej časti projektu dokonca nepostrádateľné. Na druhú stranu, v prvých fázach projektu (a to najmä u start-upov), kedy sa hrá na čas, funkčnosti aplikácie sa často mení, a je potrebné čo najskôr spustiť, nie je vôbec dobrý nápad testy písať. Museli by sa často meniť, zbytočne by spomaľovali a mohli by poškodiť rozjazd. Niektorým z vás teraz možná blysla hlavou teórie okolo TDD (Test-Driven Development), ktorá sa naopak opiera o neustále testovaní úplne všetkého. Ako teoretický koncept znie síce pekne, ale v praxi by mal dobrý programátor dokázať myslieť aj trochu ako manažér a nakladať rozumne s vývojovým BUDG (rozpočtom). Koniec koncov, aj jeho plat vychádza z toho ako je aplikácia konkurencieschopná. Ak máte naopak aplikáciu, ktorá má už niekoľko stabilných funkcií a chcete ju ďalej rozširovať, bez testov sa nezaobídete. Testy teda pokrývame také aplikácie, ktoré už majú niekoľko stabilných funkčnosťou.

Rozširovanie softvéru

Akékoľvek rozširovanie softvéru, ak ho robíte kvalitne, vždy znamená zmenu existujúcich funkčnosťou. Do istej miery môže kvalitné analýza a návrh pripraviť pôdu pre budúce úpravy, ale aj keď sa budete veľmi snažiť, trh sa mení nekontrolovane a úspešnú aplikáciu bude treba upravovať zo všetkých strán. Ak existujúce funkcie nebudete upravovať, začne vám vznikať redundantný kód (napr. Napíšete podobnú metódu znova, namiesto aby ste len parametrizovali nejakú, čo už aplikácia má, pridávate zbytočne ďalšie databázové tabuľky namiesto toho, aby ste len upravili dátový model a podobne).

Asi viete, že vyhýbať sa úprave existujúceho kódu aplikácie sa vôbec neoplatí, trpel by tým jej návrh a do budúcnosti by bolo veľmi ťažké taký zlepenec nejako upravovať alebo rozširovať, keď ste museli zmeny vykonávať na niekoľkých miestach, bloky kódu by sa opakovali a podobne. Došli sme teda k tomu, že svoju aplikáciu budete stále meniť a prepisovať, takto vývoj softvéru jednoducho vyzerá. A kto potom otestuje, že všetko funguje? Človek? Keď sme došli k tomu, že musíme testovať, či sa predchádzajúca funkčnosť novou úpravou nerozbila, povedzme si prečo nemôže testovanie vykonávať človek.

Prečo to nemôže robiť človek?

Zamyslime sa nad naivné predstavou.

Očakávania

Programátor alebo tester si sadne k počítaču a preklikne jednu službu za druhou, či fungujú. Zoberme si napríklad ITnetwork. Tester by sa skúsil zaregistrovať, prihlásiť sa, zmeniť si zabudnuté heslo, upraviť profil, dobiť body kreditnou kartou ... Funkčnosťou (use časov) sú v tunajšom systému stovky. Ak vás napadá, že človek by ich testoval hodiny a že preto to necháme urobiť stroj, ktorý to urobí pravdepodobne za pár minút, stále nemáte úplne pravdu. Sadnúť si a deň klikať nie je v zásade stále taký problém, testy sa píšu dlho, možno by sa to ešte aj vyplatilo. Ale ...

Realita

Predstavte si, že takto testujete aplikáciu, ste niekde v polovici testovacieho scenára a nájdete chybu. Nejde napísať komentár k článku napr. Kvôli zmene nejakého validátora. Chybu opravíte, úspešne pokračujete až do konca scenára. Otestovanú aplikáciu nasadíte na produkčný server a ďalší deň vám príde email, že nejdú kupovať články. Po chvíli skúmaní zistíte, že oprava, ktorú ste vykonali, rozbila inú funkčnosť, ktorú ste už otestovali predtým. Takto ste mohli prísť aj o niekoľko desiatok tisíc Sk, než vám chybu niekto nahlásil. A to sme vôbec nespomenuli katastrofické scenáre, kedy by došlo k nejakému úniku dát, zaspamování používateľov a podobne. Ak sa počas testovania vykoná oprava, musíte celý scenár vykonať od začiatku! A že sa tých chýb zvyčajne nájde hneď niekoľko, celé testovanie sa pretiahne až na niekoľko dní klikanie. Programátor toto pravdepodobne nevydrží a nevykoná testy starostlivo (osobne som frustráciu z vykonávania tých istých úkonov stále dokola nikdy nezniesol:) ), Čím dôjde k zaneseniu chyby na produkciu.

A práve preto musia testy vykonávať stroj, ktorý celú aplikáciu preklikne obvykle maximálne za desiatky minút a môže to robiť znova a znova a znova. Preto píšeme automatické testy, toto vám bohužiaľ väčšina návodov na internete nepovie.

robot - Testovanie v JavaScripte

Typy testov

Zamerajme sa teraz na to, čo na aplikáciu testujeme. Typov testov je hneď niekoľko, zvyčajne nepokrývajú úplne všetky možné scenáre (všetok kód), ale hovoríme o percentuálnom pokrytí testy (code coverage), väčšinou kritických častí aplikácie. Čím väčšia aplikácie je, tým viac typov testov potrebuje a tým viac funkčnosti obvykle pokrývame. Prvá verzia menších aplikácií väčšinou naopak ešte nepotrebujú žiadne testy alebo len tie úplne základné, napr. Aby sa do nich dalo registrovať.

Popíšme si tie najzákladnejšie typy testov:

  • Jednotkové testy (Unit testy) - Zvyčajne testujú univerzálne knižnice, nepíšeme je pre kód špecifický pre danú aplikáciu. Jednotkové testy testujú triedy, presnejšie ich metódy, jednu po druhej. Odovzdávajú im rôzne vstupy a skúša, či sú ich výstupy korektné. Nemá úplne zmysel pomocou unit-testov testovať, či metóda obsahujúci databázový dotaz, ktorá je použitá v jednom kontroleru (CodeBehindu, nejaké riadiace vrstve) vracia čo má. Naopak dáva veľmi dobrý zmysel testovať napr. Validátor telefónnych čísel, ktorý používame na 20 miestach alebo dokonca v niekoľkých aplikáciách. Takýto jednotkový test vyskúša napr. 20 rôznych správnych a nesprávnych telefónnych čísel, či validátor naozaj spozná, ktorá obsahuje bezchybné a ktorá nie. Unit testy sú tzv. Whitebox testy, to znamená, že je píšeme s tým, že vieme, ako testovaný kód vnútri funguje (vidíme dovnútra).
  • Akceptačné testy - Tento typ testov je naopak úplne odtienený od toho, ako je aplikácia vnútri naprogramovaná, sú to teda blackbox testy (nevidíme dovnútra). Každý test zvyčajne testuje určitú funkčnosť, napr. Test pre písanie článkov by testoval jednotlivé use cases s tým spojené (odovzdať článok na schválenie, schváliť článok, zamietnu článok, publikovať článok ako administrátor ...). Tieto testy zvyčajne využívajú framework Selenium, ktorý umožňuje automaticky klikať vo webovom prehliadači a simulovať internetového užívateľa, čo vašu aplikáciu používa. Týmito testami sa teda v podstate skúša špecifická logika aplikácie (databázové dotazy a podobne), testuje sa výsledok, ktorý aplikácia vygeneruje, nie priamo jej vnútorné kód.
  • Integračné testy - V dnešnej dobe dosahujú aplikácie už pomerne vysoké komplexnosti a veľmi často bývajú rozdelené do niekoľkých služieb, ktoré spolu komunikujú a sú vyvíjané zvlášť. Práve integračné testy dohliada na to, aby do seba všetko správne zapadalo.
  • Systémové testy - Aj keď aplikácia funguje dobre, na produkčnom prostredí podlieha ďalším vplyvom, s ktorými musíme tiež počítať, napr. Že by mala zvládať obsluhovať tisíc užívateľov v jeden okamih. To by sme vykonali záťažovým testom, ktorý spadá medzi systémové testy.
  • A mnohé ďalšie ...

V-model

Úvod do problematiky softvérového testovania zakončíme predstavením tzv. V-modelu. Ten rozširuje známy vodopádový model vývoja softvéru, ktorý má nasledujúce fázy:

  • analýza požiadaviek
  • High-level návrh
  • Detailné špecifikácie
  • implementácia

Ako iste viete, celý softvér sa už dávno nevyvíja postupným vykonaním týchto 4 fáz, ale iteračné, teda vykonávaním týchto fáz v krátkych časových intervaloch pre ďalšie a ďalšie časti aplikácie. V-model každej z týchto fáz priraďuje testovacej fázy (typ testov, o ktorých sme hovorili vyššie):

v_model - Testovanie v JavaScripte

Vidíme, že názov v-modelu je odvodený z podoby s písmenom V. Po implementácii unit testy overíme detailnú špecifikáciu, integračnými testy high-level návrh a akceptačnými testami či fungujú všetky use casy. V-model sa niekedy robí ešte o niekoľko poschodí vyššie, ak je aplikácia naozaj rozsiahla a vyžaduje viac typov testov, napr. Ešte testy systémové).

V budúcej lekcii, Testovanie v JavaScripte - Úvod do unit testov , si pripravíme testovací projekt a ukážeme si základy k Unit testovanie.


 

Všetky články v sekcii
Testovanie v JavaScripte
Preskočiť článok
(neodporúčame)
Testovanie v JavaScripte - Úvod do unit testov
Článok pre vás napísal Filip Zeman
Avatar
Užívateľské hodnotenie:
1 hlasov
Autor se věnuje vývoji aplikací v jazyce C# a Swift jak už ve sféře desktopové, tak mobilní či herní. Jako mladý člověk s nadšením sleduje nové technologie a postupy.
Aktivity