key successful unit testing how developers test their own code
Testery Black Box nestarajte sa o testovanie jednotiek. Ich hlavným cieľom je overiť aplikáciu podľa požiadaviek bez toho, aby sme zachádzali do podrobností implementácie.
Ale ako zaujímavosť resp Po vybalení z krabice myslenie , zamysleli ste sa niekedy nad tým, ako vývojári testujú ich kód? Akú metódu používajú na testovanie pred vydaním kódu na testovanie? Ako je testovanie vývoja dôležité v agilnom procese? Odpoveďou na toto všetko je Unit Testing. Chcem vás poučiť o dôležitosti testovania jednotiek, aby vývojové a testovacie tímy mohli spolupracovať pri navrhovaní, testovaní a vydávaní vynikajúcich aplikácií.
Kto vie, že v budúcnosti niektorí z vás môžu dokonca prejsť na testovanie v bielom poli a použiť tieto techniky overovania a zlepšovania kódu!
Čo sa dozviete:
Čo je to testovanie jednotiek?
Unit Testing nie je nový koncept. Je tu od prvých dní programovania. Spravidla vývojári a niekedy Testery bielej skrinky napíšte Testy jednotiek na zlepšenie kvality kódu overením každej jednotky kódu použitej na implementáciu funkčných požiadaviek (aka test riadil vývoj TDD alebo test-first development).
Väčšina z nás možno pozná klasickú definíciu -
„Unit Testing je metóda overovania najmenšej časti testovateľného kódu proti jeho účelu.“ Ak účel alebo požiadavka zlyhali, potom zlyhala jednotková skúška.
Jednoduchými slovami to znamená - napísanie kódu (unit test) na overenie kódu (jednotky) napísaného pre implementáciu požiadaviek.
Testovanie jednotiek v SDLC
Pri testovaní jednotiek vývojári pomocou manuálnych alebo automatizovaných testov zabezpečujú, aby každá jednotka v softvéri spĺňala požiadavky zákazníka. Touto jednotkou môže byť samostatná funkcia, objekt, metóda, postup alebo modul v testovanom softvéri.
Zápis jednotkových testov na testovanie jednotlivých jednotiek uľahčuje písanie komplexných testov, pretože všetky jednotky sú zostavené. Počas vývoja softvéru sa vykonáva ako prvá úroveň testovania.
Dôležitosť písania testov jednotky
Testovanie jednotiek sa používa na návrh robustných softvérových komponentov, ktoré pomáhajú udržiavať kód a eliminovať problémy v kódových jednotkách. Všetci vieme, aké dôležité je hľadať a opravovať chyby v ranom štádiu vývojového cyklu softvéru. Toto testovanie slúži na rovnaký účel.
Je neoddeliteľnou súčasťou agilného procesu vývoja softvéru. Kedy by sa mala spustiť nočná zostava testovacej jednotky zostavy a mala by sa vygenerovať správa. Ak niektorý z testov jednotky zlyhal, tím QA by nemal prijať toto zostavenie na overenie.
Keby sme to nastavili ako štandardný proces, v ranom vývojovom cykle by sa zachytilo veľa nedostatkov, čo by ušetrilo veľa času na testovanie.
Viem, že mnohí vývojári neradi píšu jednotkové testy. Ignorujú alebo napíšu zlé testovacie prípady jednotky z dôvodu presného naplánovania alebo nedostatku vážnosti (áno, napíšu prázdne testy jednotky, takže 100% z nich úspešne prejde ;-)). Je dôležité písať dobré jednotkové testy alebo ich nepísať vôbec. Je ešte dôležitejšie poskytnúť dostatočný čas a podporné prostredie pre skutočné výhody.
Metódy testovania jednotky
Môže sa vykonávať dvoma spôsobmi:
- Ručné testovanie
- Automatizované testovanie
V Ručné testovanie , tester vykoná manuálne testovacie prípady bez použitia automatizačného nástroja. Tu sa každá fáza testu vykonáva ručne. Ručné testovanie je zdĺhavé, najmä pre testy, ktoré sa opakujú a vyžaduje si väčšie úsilie pri vytváraní a vykonávaní testovacích prípadov. Ručné testovanie nevyžaduje znalosť žiadneho testovacieho nástroja.
Je pravda, že 100% automatizácie nie je možné, a teda bude vždy prebiehať určitá úroveň manuálneho testovania.
V Automatizované testovanie, na automatizáciu testov / testovacích prípadov sa používajú nástroje na automatizáciu testovania softvéru. Automatizačný nástroj dokáže zaznamenať a uložiť váš test a je možné ho opakovane prehrať toľkokrát, koľko je potrebné bez ďalšieho ľudského zásahu.
Tieto nástroje môžu dokonca zadávať testovacie údaje do testovaného systému, rovnako môžu porovnávať očakávané výsledky so skutočnými výsledkami a automaticky generovať správy. Počiatočné náklady na nastavenie nástrojov na automatizáciu testov sú však vysoké.
Techniky v rámci testovania jednotiek
# 1) Testovanie bielej skrinky:
zoznam a vysvetlenie najmenej dvoch vecí, ktoré môžete dosiahnuť testovaním softvéru na problémy so zabezpečením.
Pri testovaní na bielu skrinku tester pozná vnútornú štruktúru softvéru vrátane kódu a môže ho otestovať podľa návrhu a požiadaviek. Preto je testovanie v bielom poli tiež známe ako transparentné testovanie .
# 2) Testovanie čiernej skrinky:
Pri testovaní čiernej skrinky tester nepozná vnútorné štruktúry ani kód softvéru.
# 3) Testovanie šedej skrinky:
Toto sa tiež označuje ako polopriehľadné testovanie techniky čo znamená, testéri sú si vedomí iba čiastočne vnútornej štruktúry, funkcií a návrhov spolu s požiadavkami. Ladenie sa vykonáva skutočným vstupom z klientskeho rozhrania, aby sa získali presné údaje v serverovom rozhraní. Šedá skrinka sa preto považuje za kombináciu testovacích techník čiernej skrinky a bielej skrinky.
Testovanie v šedej skrinke pokrýva nasledujúce typy testovania:
- Maticové testovanie.
- Testovanie vzorov.
- Testovanie ortogonálnych vzorov.
- Regresné testovanie.
Výhody testovania jednotiek
- Proces sa stáva svižným: Pri pridávaní nových funkcií alebo funkcií k existujúcemu softvéru musíme vykonať zmeny v starom kóde. Zmena vecí na už testovaný kód však môže byť riskantná aj nákladná.
- Zlepšuje sa kvalita kódu: Keď sa vykoná testovanie jednotky, kvalita kódu sa automaticky zvýši. Chyby zistené počas tohto testovania sú opravené pred odoslaním do fázy testovania integrácie. Výsledkom je robustný dizajn a vývoj, pretože vývojári píšu testovacie prípady najskôr pochopením špecifikácií.
- Zistí chyby skôr: Keď vývojári spúšťajú jednotkové testy, zisťujú chyby na začiatku životného cyklu vývoja softvéru a riešia ich. Patria sem chyby alebo chýbajúce časti v špecifikácii, ako aj chyby v implementácii programátora.
- Ľahšie zmeny a zjednodušená integrácia: Testovanie jednotiek uľahčuje vývojárom reštrukturalizáciu kódu, vykonávanie zmien a údržbu kódu. Oveľa jednoduchšie je aj testovanie kódu po integrácii. Oprava problému v testovaní jednotiek môže vyriešiť mnoho ďalších problémov vyskytujúcich sa v neskorších fázach vývoja a testovania
- Dostupnosť dokumentácie: Vývojári, ktorí sa funkcionalite zaoberajú v neskoršej fáze, si môžu prečítať dokumentáciu o testovaní jednotiek a môžu ľahko nájsť testovacie rozhranie jednotky a opraviť alebo pracovať rýchlo a ľahko.
- Jednoduchý proces ladenia: Pomáha to pri zjednodušení procesu ladenia. Ak test v ktorejkoľvek fáze zlyhá, je potrebné odladiť kód, inak môže proces pokračovať bez akýchkoľvek prekážok.
- Nižšia cena: Keď sa chyby odhalia a vyriešia počas testovania jednotky, znížia sa náklady a čas na vývoj. Bez tohto testovania, ak sa rovnaké chyby detegujú v neskoršej fáze po integrácii kódu, je ťažšie ich vystopovať a vyriešiť, čo je nákladnejšie a predĺži sa čas potrebný na vývoj.
- Úplnosť kódu možno preukázať pomocou jednotkových testov: To je užitočnejšie v agilnom procese. Testéri nedostanú funkčné zostavy na testovanie, kým nebude dokončená integrácia. Dokončenie kódu nemožno odôvodniť preukázaním, že ste kód napísali a odbavili. Spustenie testov jednotky však môže preukázať úplnosť kódu.
- Šetrí čas vývoja: Dokončenie kódu môže trvať dlhšie, ale kvôli menšiemu počtu chýb v testovaní systému a prijatia sa dá ušetriť celkový čas vývoja.
- Pokrytie kódu možno merať
Cyklus testovania jednotky
(obrázok zdroj )
Čo robí dobrý test jednotky?
Nie som správna osoba, ktorá by hovorila o tom, čo robí dobrý Unit Test, ale na základe mojich pozorovaní na rôznych projektoch môžem povedať charakteristiku dobrého Unit Testu. Zlý test jednotky nepridáva projektu hodnotu. Namiesto toho náklady na projekt výrazne stúpajú, a to pri písaní a správe chybných testov jednotiek.
Ako napísať dobré testy jednotky?
- Na overenie jednej jednotky kódu a nie integrácie by sa mal napísať test jednotky.
- Malé a izolované testy jednotky s jasným pomenovaním by veľmi uľahčili písanie a údržbu.
- Zmena inej časti softvéru by nemala mať vplyv na test jednotky, ak sú izolované a napísané pre konkrétnu jednotku kódu.
- Malo by to bežať rýchlo
- Test jednotky by mal byť opakovane použiteľný
Jednotkové testovacie rámce
Jednotkové testovacie rámce sa väčšinou používajú na rýchle a ľahké napísanie jednotkových testov. Väčšina programovacích jazykov nepodporuje testovanie jednotiek pomocou vstavaného kompilátora. Na to, aby bolo testovanie jednotiek ešte zábavnejšie, je možné použiť open source a komerčné nástroje tretích strán.
Zoznam populárnych Nástroje na testovanie jednotiek pre rôzne programovacie jazyky:
- Rámec Java - JUnit
- Rámec PHP - PHPUnit
- C ++ rámce - UnitTest ++ a Google C ++
- .Internetová sieť - NUnit
- Rámec Pythonu - py.test
Mylné predstavy a pravdy
- Napísanie kódu pomocou testovacích prípadov jednotky trvá viac času a na to nemáme čas - v skutočnosti by to z dlhodobého hľadiska ušetrilo váš čas na vývoj.
- Testovanie jednotiek nájde všetky chyby - nebude, pretože zámerom testu jednotky nie je nájsť chyby, ale vyvinúť robustné softvérové komponenty, ktoré budú mať v neskorších fázach SDLC menej chýb.
- 100% pokrytie kódu znamená 100% pokrytie testu - To nezaručuje, že kód bude bezchybný.
Ako akceptovať testovanie jednotiek?
Dobré testovanie jednotky je možné vykonať v 3 základných častiach.
- Napíšte testovací kód jednotky
- Spustením testovacieho kódu jednotky skontrolujte, či spĺňa systémové požiadavky
- Vykonajte softvérový kód, aby ste otestovali prípadné chyby a či kód spĺňa systémové požiadavky.
Ak sa po vykonaní vyššie uvedených 3 krokov zdá, že kód je správny, bude vykonaný test jednotky. Ak test nespĺňa systémové požiadavky, test zlyhá. V takom prípade musí vývojár znova skontrolovať a opraviť kód.
V niektorých prípadoch je potrebné kód oddeliť, aby bolo možné presnejšie vykonať toto testovanie.
Najlepší tréning
Ak chcete počas tohto testovania vytvoriť najlepší kód, zvážte nasledujúce body:
- Kód by mal byť silný: Existujú prípady, keď test zlyhá alebo v najhorších prípadoch nebude vykonaný vôbec, ak je kód poškodený.
- Zrozumiteľné a rozumné: Kód by mal byť ľahko pochopiteľný. To vývojárom uľahčuje písanie kódu a dokonca aj ďalší vývojári, ktorí budú na kóde pracovať neskôr, budú ladiť ľahko.
- Mal by to byť jediný prípad: Testy, ktoré definujú viac prípadov v jednom, sú zložité na prácu. Osvedčeným postupom je teda písanie kódu jedného prípadu, vďaka ktorému je kód ľahšie pochopiteľný a laditeľný.
- Povoliť automatizované testy: Vývojári by sa mali ubezpečiť, že test prebieha v automatizovanej podobe. Malo by to byť v procese nepretržitého doručovania alebo integračného procesu.
Mali by ste pamätať na nasledujúce body:
- Namiesto vytvárania testovacích prípadov pre všetky podmienky sa zamerajte na test, ktorý ovplyvňuje správanie systému.
- Existuje pravdepodobnosť opätovného výskytu chyby v dôsledku medzipamäte prehliadača.
- Testovacie prípady by nemali byť vzájomne závislé.
- Venujte pozornosť aj stavu slučky.
- Plánujte testovacie prípady častejšie.
Záver
Testovanie jednotiek sa prejaví, keď sa vyžaduje testovanie každej funkcie osobitne. Je oveľa rozumnejšie zisťovať a opravovať chyby počas tohto testovania a šetriť tak čas a náklady, a nie ich vyhľadávať v neskoršej fáze vývoja softvéru.
Aj keď ponúka veľa výhod, s jeho používaním sú spojené aj obmedzenia. Proces vývoja softvéru vyžaduje prísnu disciplínu a dôslednosť prekonať obmedzenia a získať zamýšľané výhody.
Vaše komentáre sú veľmi vítané!
Ako tester v čiernej skrinke, aké sú vaše postrehy z testovania jednotiek vo vašom tíme? Má niekto lepší nápad na úspešné testovanie jednotiek?
Odporúčané čítanie
- Rozdiely medzi testovaním jednotiek, testovaním integrácie a funkčným testovaním
- 20 najpopulárnejších nástrojov na testovanie jednotiek v roku 2021
- Písanie testov jednotiek s programom Spock Framework
- Najlepšie nástroje na testovanie softvéru 2021 (QA Test Automation Tools)
- Kľúčové rozdiely medzi testovaním čiernej skrinky a testovaním bielej skrinky
- Testovanie záťaže s výukovými programami HP LoadRunner
- Rozdiel medzi počítačom, klientskym serverom a webom
- Čo je to testovanie gama? Fáza záverečného testovania