code coverage tutorial
Ta obsežna vadnica pojasnjuje, kaj je pokritost kode pri testiranju programske opreme, njene vrste, prednosti in pomanjkljivosti:
Končni cilj vsakega podjetja za razvoj programske opreme je razviti kakovostno programsko opremo. Za dosego tega cilja je treba programsko opremo temeljito preizkusiti.
Testiranje je tako sestavni del razvoja programske aplikacije. Zato je nujno, da razvijalec pregleda razvito programsko opremo (kar se opravi med fazo testiranja enote) in jo nato posreduje ekipi QC, ki jo mora temeljito preizkusiti, da se prepriča, da ima minimalne napake ali brez njih.
Programska oprema je preizkušena na enoto, preden je dana na preizkus dejanski preskusni skupini. Ker to testiranje vključuje testiranje na ravni kode, ga opravi razvijalec. To se naredi, da se zagotovi, da vsak del kode, ki se preskuša, deluje po pričakovanjih.
Tukaj so majhni kosi, ki so bili razviti, ločeno preizkušeni, da se zagotovi njihova pravilnost. Toda vprašanje razvijalca je pogosto v mislih koliko enote je treba opraviti in odgovor na to je v pokritosti kodeksa.
Ta vadnica vam bo dala globoko znanje o tem, kaj je pokritost s kodo in zakaj jo potrebujemo. Spoznali boste, kako se razlikuje od kritja preskusov.
Ogledali si bomo tudi orodja in metodologije, ki se uporabljajo za pokritost kode, in proti koncu te vadnice bomo videli koristi skupaj s svojimi pomanjkljivostmi. Tu bi bili zajeti tudi nekateri miti, povezani s pokritostjo kode.
Kaj se boste naučili:
Kaj je pokritost s kodo
To je pomembna metrika preskušanja enot. Priročno je vedeti učinkovitost enotnih testov. To je mera, ki kaže, kolikšen odstotek izvorne kode bi bil izveden med testiranjem.
Preprosto povedano, v kolikšni meri se bo med preskušanjem izvajala izvorna koda programske opreme ali aplikacije, se imenuje pokritost kode.
Če preizkusi izvedejo celoten kos kode, vključno z vsemi vejami, pogoji ali zankami, potem bi rekli, da obstaja popolna pokritost vseh možnih scenarijev, zato je pokritost kode 100-odstotna. Da bi to še bolje razumeli, vzemimo primer.
Spodaj je prikazana preprosta koda, ki se uporablja za dodajanje dveh številk in prikaz rezultata, odvisno od vrednosti rezultata.
Input a, b Let c = a + b If c <10, print c Else, print ‘Sorry’
Zgornji program ima dva vhoda, to je 'a' in 'b'. Vsota obeh je shranjena v spremenljivki c. Če je vrednost c manjša od 10, se izpiše vrednost 'c', sicer pa 'Žal'.
Če imamo nekaj testov za potrditev zgornjega programa z vrednostmi a & b, tako da je vsota vedno manjša od 10, potem se preostali del kode nikoli ne izvede. V takem scenariju bi rekli, da pokritost ni popolna.
To je bil le majhen primer za razjasnitev pomena Code Coverage. Ko bomo več raziskovali, boste dobili večjo jasnost.
Zakaj potrebujemo pokritost kode
(slika vir )
Zaradi različnih razlogov je pokritost kode bistvenega pomena, nekateri pa so navedeni spodaj:
spremeni char v int c ++
- Pomaga ugotoviti, da ima programska oprema manj napak v primerjavi s programsko opremo, ki nima dobre pokritosti kode.
- S pomočjo pri izboljšanju kakovosti kode posredno pomaga pri zagotavljanju boljše 'kakovostne' programske opreme.
- To je merilo, s katerim lahko spoznamo učinkovitost testa (učinkovitost preskusov enote, ki so napisani za preizkus kode).
- Pomaga pri prepoznavanju tistih delov izvorne kode, ki ne bi bili preizkušeni.
- Pomaga ugotoviti, ali trenutno preskušanje (enotno testiranje) zadostuje ali ne in ali so potrebni še nekateri testi.
Pokritost kode Vs preskusna pokritost
Da bi razumeli razliko med pokritostjo kode in testno pokritostjo, najprej razumemo pomen testne pokritosti.
Testna pokritost
To je merilo, koliko delov pričakovanega testiranja je bilo zajetih med testiranjem programske opreme. Avtor 'Pričakovano testiranje' mislimo na celoten nabor testnih primerov, ki so napisani za izvajanje določene programske opreme.
Recimo, da je za testiranje programske opreme napisan sklop 500 testnih primerov. Zdaj je bilo v okviru preizkusne dejavnosti izvedenih le 300 testnih primerov. Predpostavimo, da je to posledica pomanjkanja časa. V tem primeru bi bilo spodnje poročilo o preskusu.
Test Coverage = (Izvedeni testni primeri / skupni testni primeri) * 100
= (300/500) * 100
= 60%
Primerjajmo to s tem, kaj je Code Coverage.
Pokritost kode
To je mera, ki prikazuje obseg izvajanja izvorne kode aplikacije med preskušanjem kode. Tako kaže, v kolikšni meri bi se izvorna koda preizkusila.
Recimo, da preizkusite aplikacijo s 500 vrsticami kode, s testi pa se izvede le 400 vrstic kode. Predpostavimo, da je to posledica določene zanke / pogoja, ki se ne izvrši. V tem primeru bi bilo spodaj pokritost kode.
Pokritost kode = (število vrstic izvedene kode / skupno število vrstic kode) * 100
= (400/500) * 100
= 80%
Spodaj so navedene razlike med pokritostjo kode in testno pokritostjo:
Testna pokritost | Pokritost kode |
---|---|
To je merilo, koliko dela pričakovanega testiranja je bilo zajeto med testiranjem programske opreme. | To je mera, ki prikazuje obseg izvajanja izvorne kode aplikacije med preskušanjem kode. |
Testno pokritost lahko izračunamo po spodnji formuli: Test Coverage = (Izvedeni testni primeri / skupni testni primeri) * 100 | Pokritost kode lahko izračunamo po spodnji formuli: Pokritost kode = (število vrstic izvedene kode / skupno število vrstic kode) * 100 |
Metodologije
Tu bomo razpravljali o različnih metodah, ki so / se lahko uporabljajo za merjenje pokritosti kode.
Da bi razumeli te metodologije, si oglejmo spodnji delček kode:
Add (int a, int b) { If (b > a) { b = b - a Print b } If (a > b) { b = a – b Print b } Else Print ‘0’ }
Pokritost izjave
Ta metodologija je merilo, ki pove, ali so bili vsi možni izvršljivi stavki kode v izvorni kodi izvedeni vsaj enkrat. To je metoda, ki zagotavlja, da so preskusi vsaj enkrat zajeti v vsaki vrstici izvorne kode.
To se morda sliši preprosto, vendar je pri merjenju pokritosti z izjavo potrebna previdnost. Razlog je v tem, da v izvorni kodi obstaja določen pogoj, ki se morda ne bo izvršil, odvisno od vhodnih vrednosti.
To bi pomenilo, da vse vrstice kode ne bi bile zajete v testiranje. Tako bomo morda morali uporabiti različne nabore vhodnih vrednosti, da pokrijemo vse take pogoje v izvorni kodi.
Na primer v zgornji izvorni kodi, če so vhodne vrednosti 2 in 3, potem se del kode ‘Else’ ne bi izvedel. Če pa sta vhodni vrednosti tipa 3 in 2, potem del kode 'Če' ne bo izveden.
To pomeni, da z nobenim naborom vrednosti naše izjave pokritost ne bi bila 100%. V takem primeru bomo morda morali opraviti preskuse z vsemi tremi ((2, 3), (3, 2), (0, 0)) nizom, da zagotovimo 100% pokritost z izjavo.
Pokritost funkcije
Kot že ime pove, ta metodologija meri, v kolikšni meri so funkcije, ki so prisotne v izvorni kodi, zajete med testiranjem. Vse funkcije v izvorni kodi se med izvajanjem preizkusa preizkusijo. Spet je treba zagotoviti, da te funkcije preizkusimo za različne vrednosti, tako da se funkcija temeljito preizkusi.
V izvorni kodi je lahko več funkcij in odvisno od uporabljenih vhodnih vrednosti lahko funkcija pokliče ali pa tudi ne. Tako je namen pokritosti funkcij zagotoviti, da imamo zahtevano vsako funkcijo.
Na primer v zgornji izvorni kodi, če naši testi celo enkrat pokličejo funkcijo »Dodaj«, bi to poklicali kot popolno pokritost funkcije.
Kritje stanja
V izvorni kodi, kjer koli imamo pogoj, bi bil rezultat logična vrednost bodisi true ali false. Cilj kritja pogojev je ugotoviti, ali preskusi zajemajo obe vrednosti, tj. True, false.
V izvorni kodi naj bi bilo, ko je vsak pogoj ovrednoten tako za resnično kot za lažno stanje, pokritost pogojev za kodo popolna.
Na primer v zgornji kodi, če se uporabljajo nabori vrednosti (2, 3) in (4, 2), bi bila pokritost pogojev 100%. Ko se uporabi nabor podatkov (2, 3), potem (b> a) oceni na true in (a> b) oceni na false. Podobno se pri uporabi nabora podatkov (4, 2) vrednost (b> a) izračuna na false in (a> b) na true.
Tako imata oba pogoja tako vrednosti, tj. True in false. Zato bi bila pokritost pogojev 100%.
Pokritost podružnice
Cilj te metodologije je zagotoviti, da se vsaka veja, ki se pojavi v vsaki pogojni strukturi, izvede v izvorni kodi. Na primer, v zgornji kodi mora biti test za 100-odstotno pokritost podružnice zajet v vseh izjavah „Če“ in vseh priloženih izjavah „Else“.
Na primer v zgornji kodi, če se uporabljajo nabori vrednosti (2, 3), (4, 2), (1, 1), bi bila pokritost podružnice 100%. Ko se uporabi nabor podatkov (2, 3), se nato (b> a) in izvede prva veja »Če«. Podobno se pri uporabi nabora podatkov (4, 2) vrednost (a> b) oceni na vrednost true in izvrši se druga veja „Če“.
Nato z naborom podatkov (1, 1) podružnica ‘Else’ oceni na true in se izvrši. S tem zagotovite 100% pokritost podružnice.
Pokritost podružnice v primerjavi s pokritostjo pogojev
Pokritost podružnice se pogosto zamenjuje s pokritostjo pogojev, vendar sta različni.
Razumimo to s preprostim primerom.
If (a >0) & (b >0) Then Print “Hello” Else Print “Bye”
Zapišite si nabor podatkov, potreben za dokončanje Pokritost podružnice:
(1, 1) - V tem primeru sta 'a' in 'b' resnična, zato se pogoj If izvrši.
(1, 0) - V tem primeru je 'a' res, 'b' pa ne, zato se izvede drugi del kode.
kako uporabljati torrent datoteke po prenosu
Kot vemo, je namen pokritosti podružnic, da se vsaka podružnica izvrši vsaj enkrat, in ta namen je dosežen.
Kritje stanja:
(1, 0) - V tem primeru je 'a' res, 'b' pa ne.
(0, 1) - V tem primeru je „a“ napačen, „b“ pa bi bil resničen.
Namen kritja pogojev je pridobiti vsako od resničnih in neresničnih podatkov za vsak izvršen pogoj in ta namen je tukaj dosežen.
Ste opazili, da se preostali del ne izvrši v pogoju pogoja? Tu se pogojna pokritost razlikuje od pokritosti podružnice.
Orodja za pokritost kode
Za merjenje pokritosti katere koli programske opreme je na trgu na voljo več orodij.
Spodaj je navedenih nekaj orodij za referenco:
- Parasoft JTest
- Testwell CTC ++
- Pokritost
- JaCoCo
- CodeCover
- Pokritost Bullseye
- EMMA
- OpenCover
- NCover
- Squish COCO
- Merilnik pokritosti
- GCT
- TCAT C / C ++
- Gretel
- JCov
Priporočeno branje => Orodja za pokritje kode
Zgornja povezava bo vsebovala naslednje informacije o teh orodjih:
- Ključne funkcije
- Vrsta licence
- Uradni URL
- Prednosti in slabosti
- Najnovejša različica
Prednosti
Kot je razvidno zgoraj, je zelo uporabna testna metrika iz spodnjih razlogov:
10 najboljših upravljanih ponudnikov varnostnih storitev
- Pomaga prepoznati tista področja v izvorni kodi, ki bi s testi ostala nepreverjena / nepokrita.
- Priročen je pri prepoznavanju rabljene / mrtve kode in s tem izboljšanju kakovosti kode.
- Učinkovitost enotnih testov je mogoče poznati s pomočjo Code Coverage.
- Z uporabo teh meritev lahko dobite programsko opremo boljše kakovosti.
Pomanjkljivosti
- Če poskušamo doseči 100-odstotno pokritost kode, včasih pride do pomanjkanja zanesljivosti preskusov, kar povzroči zamudo pri zajemanju nagnjenih scenarijev.
- V nasprotju s splošnim dojemanjem ne more zagotoviti, ali zasnovana programska oprema ustreza vsem zahtevam.
Miti proti dejstvom
Mit | Dejstvo |
---|---|
100-odstotna pokritost kode zagotavlja, da programska oprema ne bo imela napak. | Ne, 100-odstotna pokritost kode ne more zagotoviti programske opreme brez napak. Dobra pokritost kode skupaj z dobrimi prizadevanji ekipe QC lahko zagotovi programsko opremo z minimalnimi napakami ali brez njih. |
100-odstotna pokritost kode pomeni, da je napisana koda popolna. | Ne, če koda sploh ne zajame pomembnih zahtev, potem kode ne moremo označiti za popolno, kljub 100% pokritosti kode. |
Code Coverage meri učinkovitost testov, izvedenih na programskem izdelku. | Ne, Code Coverage je le merilo, ki se uporablja za preizkušanje učinkovitosti preskusov enote, tj. Preskusov, izvedenih samo na izvorni kodi programske opreme. |
Pogosta vprašanja
V # 1) Kaj je sprejemljivo pokrivanje kode?
Odgovor: Doseganje 100-odstotne pokritosti kode ne bi smel biti cilj med preizkušanjem programske kode enote. Zakaj pa ne? Da bi razumeli razlog, se boste morda morali potopiti nekoliko globlje, da boste razumeli osnovni pomen.
Ko ciljamo na 100-odstotno pokritost, se pogosteje zgodi, da gre ves poudarek pri oblikovanju testov v to, da se preizkusi vsak stavek, zanka, veja ali pogoj. Torej pristanemo in si naložimo preveč truda, ki se morda ne bi splačal upoštevati porabljenega časa.
Poleg tega se s poudarkom na visoki pokritosti izpuščajo tudi pomembni scenariji, ki bi lahko imeli napake, ker si prizadevamo le za to, da bi preizkusili vsako vrstico kode.
Osredotočanje na visoko pokritost kode ni vedno tako pomembno in ne more biti niti fiksno število, ki bi ga ciljali za preizkušanje različnih kod. Na splošno pa bi moralo biti pokritost 75% - 80% idealno število.
Med preskušanjem naše kode bi se morali osredotočiti na zagotavljanje kritja kritičnih in verjetno nagnjenih scenarijev. Če bi jih zamudili, bi naši testi kljub 100-odstotni pokritosti kode preprosto imeli slabo učinkovitost.
Q # 2) Kako preverim svojo pokritost kode?
Odgovor: Za preizkus odstotka pokritosti kode, ki ste ga morda dosegli s preskusi za testiranje kode, imamo na trgu več orodij. Odvisno od programskega jezika, ki ga uporabljamo, imamo različna orodja.
Nekateri med njimi so navedeni spodaj:
- Java - Pokritost, JaCoCo
- Javascript - Blanket.js, Istanbul
- Python - Coverage.py
- Ruby - SimpleCov
S pomočjo teh orodij lahko dobimo popolno poročilo o pokritosti naših testov, ki nam pomagajo vedeti, kateri del kode bo izveden in kateri bodo naši testi zamudili.
Q # 3) Je Code Coverage dobra metrika?
Odgovor: V resničnih scenarijih je to do neke mere in na določene načine koristno.
Če pogledamo najprej njegove omejitve, dobro vemo, da 100-odstotna pokritost ne pomeni, da kodeks ne vsebuje napak, niti ne zagotavlja, da so vse zahteve zajete v kodeksu, tj. Kljub 100-odstotni pokritosti kode smo zelo verjetno, da bodo v kodi napake, ker pokritost ne zagotavlja, da so bili preizkušeni vsi scenariji.
Poleg tega, če so bile zahteve med pisanjem kode preskočene, potem ni preslikave zahtev s kodo, za katero je poskrbljeno kot del kritja kode.
Ob tem ne moremo zanikati, da ko uporabljamo pokritost kode kot metriko, nam daje idejo, ali smo pokrili osnovne zahteve testiranja vsake vrstice naše kode. Ta odstotek pokritosti nam daje predstavo o tem, koliko delov naše kode se izvaja z našimi enotnimi testi.
Spoznamo, koliko naše kode bi bilo neizvršenih. To pa nam pomaga, da se odločimo, koliko dodatnih preskusov enot je potrebnih in za katere dele kode.
Tako lahko sklepamo, da imamo zaradi slabe pokritosti predstavo o neučinkovitosti enotnih testov. Hkrati pa zagotavljanje 100% pokritosti ni zagotovilo za kodo brez napak. Tako je treba imeti uravnotežen pristop, pri katerem ne pretirano poudarjamo pomena ciljanja na visok odstotek pokritosti kode.
Q # 4) Kako lahko izboljšam svojo pokritost kode?
Odgovor: Poročilo o pokritosti kode, ki ga zagotavljajo orodja za pokrivanje, kot so JaCoCo, Istanbul itd., Prikazuje področja, ki so zajeta s testi, pa tudi tista, ki bi ostala nepreizkušena.
S poznavanjem nepreizkušenih delov kode lahko teste napišemo ročno ali s katerim koli orodjem za avtomatizacijo, da pokrijemo področja, ki bi sicer ostala nepreverjena, in s tem povečamo pokritost kode.
Pomembno je omeniti, da lahko med testiranjem funkcije v kodi napišemo na stotine vrstic kode, vendar je pokritost morda zelo majhna. Razlog je v tem, da pregloboko preizkušanje dela velike kode ne bo pomagalo povečati pokritosti kode.
Če je torej cilj povečati pokritost, je treba paziti, da pokrijemo vse funkcije, pogoje in zanke, namesto da bi se potopili globoko v eno funkcijo in napisali velike teste za to eno funkcijo.
Zaključek
Kakovostni programski izdelek je potreben v današnjem hitrem internetnem svetu.
Za zagotavljanje kakovostne programske opreme ni odgovoren samo inženir QA, temveč tudi razvijalec. Code Coverage je tako zelo koristen, ko razvijalci dostavijo kakovostni izdelek ekipi za zagotavljanje kakovosti.
Ta vadnica je razložila vse o pokritosti kode in njeni uporabi. Poglobili smo se tudi v razumevanje razlike med pokritostjo kode in testno pokritostjo. Poleg tega smo razumeli uporabljene metodologije skupaj z različnimi orodji Code Coverage.
Tu so bile predstavljene prednosti in slabosti. Na koncu smo razbili nekaj mitov in pogostih vprašanj, povezanih s Code Coverage
Veselo branje !!
Priporočeno branje
- 15 najboljših orodij za pokrivanje kode (za Java, JavaScript, C ++, C #, PHP)
- 15 najboljših JAVA orodij za razvoj, izdelavo, profiliranje, pokritost kode in pregled
- Vadnica za funkcije / metode C # s primeri kode
- Vadnica za ravnanje z izjemami C # s primeri kode
- Tortoise SVN Vadnica: Revizije v odlagališču kod
- Vadnica za dolžino polja Java s primeri kode
- Vadnica za AWS CodeBuild: Izvlečenje kode iz Maven Build
- Vadnica za SVN: Upravljanje izvorne kode z uporabo Subverzije