code coverage tutorial
Tento komplexný výukový program vysvetľuje, čo je kódové pokrytie v testovaní softvéru, jeho typy, výhody a nevýhody:
Konečným cieľom každej spoločnosti zaoberajúcej sa vývojom softvéru je vývoj kvalitného softvéru. Na dosiahnutie tohto cieľa musí byť softvér dôkladne otestovaný.
Testovanie je teda neoddeliteľnou súčasťou vývoja softvérovej aplikácie. Preto je nevyhnutné, aby vyvinutý softvér skontroloval vývojár (čo sa uskutoční počas fázy testovania jednotky) a potom bol postúpený tímu QC, aby bol dôkladne otestovaný, aby sa zabezpečilo, že obsahuje minimálne alebo žiadne chyby.
Softvér je predtým, ako je vydaný na testovanie skutočnému testovaciemu tímu, testovaný. Pretože toto testovanie zahŕňa testovanie na úrovni kódu, vykonáva ho vývojár. To sa deje s cieľom zabezpečiť, aby každá časť testovaného kódu fungovala podľa očakávania.
Tu sú malé kúsky kódu, ktoré boli vyvinuté, testované izolovane, aby sa zabezpečila ich správnosť. Otázka, ktorá sa často vynára v mysli vývojára, je koľko testovania jednotky by sa malo vykonať a odpoveď na túto otázku spočíva v pokrytí kódom.
Tento tutoriál vám poskytne hlboké znalosti o tom, čo je pokrytie kódu a prečo ho potrebujeme. Mali by ste vedieť, ako sa líši od Test Coverage.
Tiež sa pozrieme na nástroje a metodiky, ktoré sa používajú na pokrytie kódu, a na konci tohto tutoriálu by sme videli výhody spolu s jeho nevýhodami. Niektoré mýty spojené s pokrytím kódu by sa tu tiež mohli venovať.
Čo sa dozviete:
Čo je to pokrytie kódu
Toto je dôležitá metrika testovania jednotiek. Je užitočné poznať účinnosť jednotkových testov. Je to opatrenie, ktoré označuje, aké percento zdrojového kódu by sa malo vykonať počas testovania.
Jednoducho povedané miera, do akej sa počas testovania vykoná zdrojový kód softvérového programu alebo aplikácie, sa nazýva pokrytie kódu.
Ak testy vykonajú celú časť kódu vrátane všetkých vetiev, podmienok alebo slučiek, potom by sme povedali, že existuje úplné pokrytie všetkých možných scenárov, a teda pokrytie kódu je 100%. Aby sme to ešte lepšie pochopili, vezmime si príklad.
Nižšie je uvedený jednoduchý kód, ktorý sa používa na sčítanie dvoch čísel a zobrazenie výsledku v závislosti od hodnoty výsledku.
Input a, b Let c = a + b If c <10, print c Else, print ‘Sorry’
Vyššie uvedený program prijíma dva vstupy, tj. „A“ a „b“. Súčet oboch je uložený v premennej c. Ak je hodnota c menšia ako 10, potom sa vytlačí hodnota „c“, inak sa vytlačí „Ospravedlňujeme sa“.
Teraz, ak máme nejaké testy na overenie vyššie uvedeného programu s hodnotami a & b, takže súčet je vždy menší ako 10, potom sa iná časť kódu nikdy nespustí. V takom prípade by sme povedali, že pokrytie nie je úplné.
Toto bol iba malý príklad na objasnenie významu pokrytia kódu. Keď toho preskúmame viac, získate tým lepšiu jasnosť.
Prečo potrebujeme pokrytie kódom
[obrázok zdroj ]
Z dôvodu rôznych dôvodov je pokrytie kódu nevyhnutné a niektoré z nich sú uvedené nižšie:
c ++ pauza na 1 sekundu
- Pomáha zistiť, či má softvér menšie chyby v porovnaní so softvérom, ktorý nemá dobré pokrytie kódom.
- Pomáhaním pri zlepšovaní kvality kódu nepriamo pomáha pri dodávaní lepšieho „kvalitného“ softvéru.
- Je to opatrenie, ktoré možno použiť na poznanie účinnosti testu (efektívnosť jednotkových testov, ktoré sú napísané na testovanie kódu).
- Pomáha identifikovať tie časti zdrojového kódu, ktoré by zostali nevyskúšané.
- Pomáha zistiť, či je súčasné testovanie (testovanie jednotky) dostatočné alebo nie a či sú potrebné aj ďalšie testy.
Pokrytie kódu Vs Pokrytie testu
Aby sme pochopili rozdiel medzi Pokrytím kódu a Pokrytím testu, najskôr pochopíme význam Testovania.
Pokrytie testu
Je to miera toho, koľko častí očakávaného testovania bolo pokrytých počas testovania softvéru. Autor: „Očakávané testovanie“ máme na mysli kompletnú sadu testovacích prípadov, ktoré sú napísané na vykonanie za účelom testovania daného softvéru.
Predpokladajme, že na testovanie softvéru bolo napísaných celkovo 500 testovacích prípadov. Teraz bolo v rámci testovacej činnosti vykonaných iba 300 testovacích prípadov. Predpokladajme, že to bolo spôsobené nedostatkom času. V takom prípade by testom bolo pokrytie nižšie.
Pokrytie testu = (Vykonané testovacie prípady / Celkový počet testovacích prípadov) * 100
= (300/500) * 100
= 60%
Porovnajme to s tým, čo je pokrytie kódu.
Pokrytie kódu
Je to opatrenie, ktoré ukazuje, do akej miery sa zdrojový kód aplikácie vykoná počas testovania kódu. Ukazuje teda mieru, do akej by sa mohol testovať zdrojový kód.
Predpokladajme, že otestujete aplikáciu s 500 riadkami kódu, testmi sa vykoná iba 400 riadkov kódu. Predpokladajme, že je to spôsobené tým, že sa určitá slučka / podmienka nevykoná. V takom prípade bude kódom pokrytie nižšie.
Pokrytie kódu = (počet riadkov kódu vykonaných / celkový počet riadkov kódu) * 100
= (400/500) * 100
= 80%
Nižšie sú uvedené rozdiely medzi pokrytím kódu a pokrytím testu:
Pokrytie testu | Pokrytie kódu |
---|---|
Je to miera toho, ako veľká časť očakávaného testovania bola pokrytá počas testovania softvéru. | Je to opatrenie, ktoré ukazuje, do akej miery sa zdrojový kód aplikácie vykoná počas testovania kódu. |
Pokrytie testu je možné vypočítať podľa nasledujúceho vzorca: Pokrytie testu = (Vykonané testovacie prípady / Celkový počet testovacích prípadov) * 100 | Pokrytie kódu je možné vypočítať pomocou nasledujúceho vzorca: Pokrytie kódu = (počet riadkov kódu vykonaných / celkový počet riadkov kódu) * 100 |
Metodiky
Tu budeme diskutovať o rôznych metódach, ktoré sú / môžu byť použité na meranie pokrytia kódu.
Aby sme pochopili tieto metodiky, pozrime sa na nasledujúci útržok kódu:
Add (int a, int b) { If (b > a) { b = b - a Print b } If (a > b) { b = a – b Print b } Else Print ‘0’ }
Pokrytie vyhlásenia
Táto metodika predstavuje opatrenie, ktoré určuje, či boli všetky možné spustiteľné príkazy kódu v zdrojovom kóde vykonané aspoň raz. Jedná sa o metódu, ktorá zabezpečí, že každý riadok zdrojového kódu bude testami pokrytý aspoň raz.
Môže to znieť jednoducho, ale pri meraní pokrytia výpisom je potrebné postupovať opatrne. Dôvodom je, že v zdrojovom kóde môže byť určitá podmienka, ktorá sa nemusí vykonať v závislosti od vstupných hodnôt.
To by znamenalo, že testovaním nebudú pokryté všetky riadky kódu. Možno budeme musieť na pokrytie všetkých týchto podmienok v zdrojovom kóde použiť rôzne sady vstupných hodnôt.
Napríklad, vo vyššie uvedenom zdrojovom kóde, ak sa vstupné hodnoty berú ako 2 a 3, potom by sa časť „Else“ kódu nespustila. Ak sú však vstupné hodnoty typu 3 a 2, potom by sa časť kódu „If“ nezrealizovala.
To znamená, že ani jedna sada hodnôt nášho pokrytia výpisom by nebola 100%. V takom prípade možno budeme musieť vykonať testy so všetkými tromi súbormi hodnôt [(2, 3), (3, 2), (0, 0)], aby sme zaistili 100% pokrytie výpisom.
Funkčné pokrytie
Ako naznačuje názov, táto metodika meria, do akej miery sú počas testovania pokryté funkcie prítomné v zdrojovom kóde. Počas vykonávania testu sa otestujú všetky funkcie, ktoré sú v zdrojovom kóde. Opäť musí byť zabezpečené, že tieto funkcie testujeme na rôzne hodnoty, aby sme mohli funkciu dôkladne otestovať.
V zdrojovom kóde môže byť viac funkcií a v závislosti od použitých vstupných hodnôt sa funkcia môže alebo nemusí volať. Účelom pokrytia funkcií je teda zabezpečiť, aby sme mali každú požadovanú funkciu.
Napríklad, v zdrojovom kóde vyššie, ak naše testy volajú funkciu „Add“ čo i len raz, potom by sme to nazvali ako úplné pokrytie funkcií.
Pokrytie stavu
V zdrojovom kóde, nech máme podmienku kdekoľvek, výsledkom by bola logická hodnota typu true alebo false. Cieľom pokrytia stavu je zistiť, či testy zahŕňajú obidve hodnoty, tj. True, false.
Keď sa v zdrojovom kóde vyhodnotí každá vyskytujúca sa podmienka pre pravdivé aj nepravdivé stavy, potom sa predpokladá, že pokrytie stavu pre kód je úplné.
Napríklad, vo vyššie uvedenom kóde, ak sa použijú množiny hodnôt (2, 3) a (4, 2), bude pokrytie podmienky 100%. Keď sa použije množina údajov (2, 3), potom (b> a) sa vyhodnotí ako pravdivé a (a> b) sa vyhodnotí ako nepravdivé. Podobne, keď sa použije súbor údajov (4, 2), potom (b> a) sa vyhodnotí ako nepravdivé a (a> b) sa vyhodnotí ako pravdivé.
Obidve podmienky teda majú pokryté obidve hodnoty, tj. True aj false. Z tohto dôvodu by pokrytie stavu bolo 100%.
Pokrytie pobočky
Cieľom tejto metodiky je zabezpečiť, aby sa každá vetva vyskytujúca sa v každej podmienenej štruktúre vykonala v zdrojovom kóde. Napríklad vo vyššie uvedenom kóde by mali byť všetky vyhlásenia „If“ a akékoľvek sprievodné vyhlásenia „Else“ pokryté testom 100% pokrytia pobočky.
Napríklad, vo vyššie uvedenom kóde, ak sa použijú množiny hodnôt (2, 3), (4, 2), (1, 1), pokrytie pobočky by bolo 100%. Keď sa použije množina údajov (2, 3), potom (b> a) a vykoná sa prvá vetva „Ak“. Podobne, keď sa použije dátový súbor (4, 2), potom (a> b) sa vyhodnotí ako true a vykoná sa druhá vetva „If“.
Potom s dátovou sadou (1, 1) vetva ‘Else’ vyhodnotí ako true a vykoná sa. Tým zaisťuje 100% pokrytie pobočiek.
Pokrytie pobočky vs Pokrytie stavu
Pokrytie pobočky je často zamieňané s Pokrytím podmienky, obe sú však odlišné.
Poďme to pochopiť na jednoduchom príklade.
If (a >0) & (b >0) Then Print “Hello” Else Print “Bye”
Zapíšme si súbor údajov potrebný na dokončenie Pokrytie pobočky:
(1, 1) - V tomto prípade platí „a“ aj „b“, takže sa vykoná podmienka If.
(1, 0) - V tomto prípade je „a“ pravdivé a „b“ by bolo nepravdivé, takže sa vykoná druhá časť kódu.
dobrý bezplatný sťahovač hudby pre Android
Ako vieme, účelom pokrytia pobočky je vykonať každú pobočku aspoň raz a tento účel je splnený.
Pokrytie stavu:
(1, 0) - V takom prípade je „a“ pravdivé a „b“ by bolo nepravdivé.
(0, 1) - V takom prípade je „a“ nepravdivé a „b“ by bolo pravdivé.
Účelom Pokrytia podmienky je dostať každú z hodnôt true a false za každú vykonanú podmienku a tento účel sa tu dosiahne.
Všimli ste si, že iná časť sa nespustí v pokrytí stavu? To je miesto, kde sa Pokrytie podmienok líši od Pokrytia pobočiek.
Nástroje na pokrytie kódu
Na meranie pokrytia kódu ľubovoľného softvéru je na trhu k dispozícii niekoľko nástrojov.
Nižšie sú uvedené niektoré z nástrojov pre vašu referenciu:
- Parasoft JTest
- Testwell CTC ++
- Pokrytie
- JaCoCo
- CodeCover
- Kryt Bullseye
- EMMA
- OpenCover
- NCover
- Squish COCO
- CoverageMeter
- GCT
- TCAT C / C ++
- Mařenka
- JCov
Odporúčané čítanie => Nástroje na pokrytie kódu
Vyššie uvedený odkaz bude obsahovať nasledujúce informácie o týchto nástrojoch:
- Kľúčové vlastnosti
- Typ licencie
- Oficiálna adresa URL
- Klady a zápory
- Najnovšia verzia
Výhody
Ako je vidieť vyššie, ide o veľmi užitočnú testovaciu metriku z nasledujúcich dôvodov:
sťahovať video a audio z youtube
- Pomáha identifikovať tie oblasti v zdrojovom kóde, ktoré by zostali testami nevyskúšané / nezistené.
- Prichádza vhod pri identifikácii použitého / mŕtveho kódu, čím sa zvyšuje kvalita kódu.
- Účinnosť jednotkových testov je možné zistiť pomocou pokrytia kódu.
- Softvér s lepšou kvalitou možno dodať pomocou týchto metrík.
Nevýhody
- Pokus o zameranie na 100% pokrytie kódu niekedy spôsobuje nedostatočnú robustnosť testov, čo vedie k tomu, že chýbajú možnosti zachytenia scenárov náchylných na chyby.
- Na rozdiel od bežného vnímania nemôže zaručiť, že navrhnutý softvér spĺňa všetky požiadavky.
Mýty vs. fakty
Mýtus | Fakt |
---|---|
100% pokrytie kódu zaručuje, že softvér nebude mať žiadne chyby. | Nie, 100% pokrytie kódu nemôže zaručiť bezchybný softvér. Dobré pokrytie kódu spojené s dobrým úsilím tímu QC môže zabezpečiť softvér s minimálnymi alebo žiadnymi chybami. |
100% pokrytie kódu znamená, že napísaný kód je perfektný. | Nie, ak kód na prvom mieste nezachytí dôležité požiadavky, potom ho nemožno označiť za dokonalý napriek tomu, že pokrytie kódu je 100%. |
Pokrytie kódu meria účinnosť testov vykonaných na softvérovom produkte. | Nie, pokrytie kódu je iba opatrenie, ktoré sa používa na testovanie účinnosti jednotkových testov, t. J. Testov vykonaných iba na zdrojovom kóde softvéru. |
Časté otázky
Otázka č. 1) Čo je prijateľné pokrytie kódu?
Odpoveď: Dosiahnutie 100% pokrytia kódom by nemalo byť cieľom počas testovania softvérového kódu jednotky. Ale prečo nie? Aby ste pochopili dôvod, možno sa budete musieť ponoriť trochu hlbšie, aby ste pochopili podstatný význam.
Keď sa zameriavame na 100% pokrytie, potom sa častejšie stáva, že sa pri navrhovaní testov sústredíme na zaistenie toho, aby boli testované jednotlivé výroky, slučky, vetvy alebo podmienky. Takže pristupujeme k príliš veľkému úsiliu, ktoré by možno nestálo za zváženie stráveného času.
Okrem toho zameranie sa na vysoké pokrytie vedie tiež k tomu, že prichádzame o dôležité scenáre, ktoré pravdepodobne budú mať chyby, pretože všetko, čo sa zameriavame, je zabezpečiť, aby bol každý riadok kódu testovaný.
Zameranie na vysoké pokrytie kódom nie je vždy také dôležité a nemusí to byť ani pevný počet, ktorý by bol zameraný na testovanie rôznych kódov. Všeobecne by však pokrytie 75% - 80% malo byť ideálnym číslom.
Pri testovaní nášho kódu by sa mala hlavná pozornosť sústrediť na zabezpečenie pokrytia kritických a pravdepodobných scenárov náchylných na chyby. Ak sa tieto premeškajú, potom by naše testy mali 100% pokrytie kódom, len by mali slabú účinnosť.
Otázka č. 2) Ako môžem skontrolovať svoje pokrytie kódom?
Odpoveď: Na testovanie percenta pokrytia kódom, ktoré ste mohli dosiahnuť testami určenými na testovanie kódu, máme na trhu niekoľko nástrojov. V závislosti na použitom programovacom jazyku máme rôzne nástroje.
Niektoré z nich sú uvedené nižšie:
- Java - Pokrytie, JaCoCo
- Javascript - Blanket.js, Istanbul
- Python - Coverage.py
- Ruby - SimpleCov
Pomocou týchto nástrojov môžeme získať kompletnú správu o pokrytí našich testov, ktorá nám pomôže zistiť, ktorá časť kódu by bola vykonaná a ktorá by našimi testami unikla.
Otázka č. 3) Je pokrytie kódu dobrou metrikou?
Odpoveď: V scenároch z reálneho života je to do istej miery a určitými konkrétnymi spôsobmi užitočné.
Ak sa pozrieme najskôr na jeho obmedzenia, veľmi dobre vieme, že 100% pokrytie nezaručuje, že je kód bez chýb, ani nezaručuje, že všetky požiadavky boli v kóde splnené, tj napriek 100% pokrytiu kódu sme veľmi pravdepodobne budú mať chyby v kóde, dôvodom je, že pokrytie nezabezpečuje testovanie všetkých scenárov.
Navyše, ak boli požiadavky počas písania kódu preskočené, potom neexistuje mapovanie požiadaviek s kódom, o ktorý sa bude starať ako o súčasť pokrytia kódu.
To znamená, že nemôžeme poprieť, že keď používame Code Coverage ako metriky, dáva nám predstavu, či sme pokryli základné požiadavky na testovanie každého riadku nášho kódu. Toto percento pokrytia nám dáva predstavu o tom, koľko častí nášho kódu sa vykonáva pomocou našich testov jednotiek.
Dozvieme sa, koľko z nášho kódu by bolo nevykonaných. To nám zase pomáha rozhodnúť sa, koľko ďalších jednotkových testov je potrebných a pre ktoré časti kódu.
Môžeme teda dospieť k záveru, že nedostatočné pokrytie nám dáva predstavu o neúčinnosti jednotkových testov. Zaručenie 100% pokrytia zároveň nie je zárukou bezchybného kódu. Potrebujeme teda vyvážený prístup, pri ktorom príliš nezdôrazňujeme dôležitosť zamerania na vysoké percento pokrytia kódom.
Otázka č. 4) Ako môžem vylepšiť svoje pokrytie kódom?
Odpoveď: Správa o pokrytí kódu, ktorú poskytujú nástroje na pokrytie, ako sú JaCoCo, Istanbul atď., Zobrazuje oblasti, ktoré sú predmetom testov, a tiež tie, ktoré by neboli testované.
Poznaním netestovaných častí kódu možno testy zapisovať buď ručne, alebo pomocou ľubovoľného automatizačného nástroja na pokrytie oblastí, ktoré by inak zostali nevyskúšané, a tým zvýšiť pokrytie kódu.
Tu je dôležité si uvedomiť, že aj keď môžeme napísať stovky riadkov kódu na otestovanie funkcie v kóde, pokrytie môže byť stále menšie. Dôvod je ten, že príliš hlboké otestovanie časti obrovského kódu nepomôže zvýšiť pokrytie kódu.
Ak je teda cieľom zvýšiť pokrytie, je potrebné venovať pozornosť pokrytiu všetkých funkcií, podmienok a slučiek namiesto toho, aby ste sa ponorili hlboko do jednej funkcie a písali veľké testy pre túto jedinú funkciu.
Záver
V dnešnom rýchlo sa rozvíjajúcom svete internetu je potrebný vysoko kvalitný softvérový produkt.
Za zabezpečenie kvalitného softvéru nie je zodpovedný iba inžinier QA, ale aj vývojár. Kódové pokrytie je teda veľmi užitočné, pokiaľ ide o dodanie kvalitného produktu tímu QA vývojármi.
V tomto výučbe sú vysvetlené všetky informácie o pokrytí kódom a jeho použití. Tiež sme sa ponorili trochu hlbšie do porozumenia rozdielu medzi pokrytím kódu a pokrytím testu. Okrem toho sme porozumeli použitým metodikám spolu s rôznymi nástrojmi na pokrytie kódu.
Tu boli uvedené výhody a nevýhody. Na záver sme zrušili niektoré mýty a časté otázky súvisiace s pokrytím kódu
Príjemné čítanie !!
Odporúčané čítanie
- Top 15 nástrojov na pokrytie kódu (pre Java, JavaScript, C ++, C #, PHP)
- 15 najlepších nástrojov JAVA na vývoj, zostavovanie, profilovanie, pokrytie kódu a kontrolu
- Výukový program pre funkcie / metódy C # s príkladmi kódu
- Výukový program na spracovanie výnimiek C # s príkladmi kódu
- Výukový program pre korytnačky SVN: Revízie v úložisku kódov
- Výukový program Java Array Length s príkladmi kódu
- Výukový program AWS CodeBuild: Extrahovanie kódu z Maven Build
- Výukový program SVN: Správa zdrojového kódu pomocou subverzie