Kaj je pokritost kode?
Pokritost kode je merilo, ki opisuje stopnjo preizkušenosti izvorne kode programa. To je ena od oblik preizkušanja bele škatle, ki ugotavlja področja programa, ki jih niz testov ne izvaja. Ustvari tudi nekaj testnih primerov za povečanje pokritosti in določanje kvantitativnega merila pokritosti kode.
V večini primerov sistem pokritosti kode zbira informacije o delujočem programu. To združuje tudi z informacijami o izvorni kodi, da ustvari poročilo o pokritosti kode testne zbirke.
V tej vadnici boste izvedeli-
- Kaj je pokritost kode?
- Zakaj uporabljati Code Coverage?
- Metode zajema kod
- Pokritost izjave
- Pokritost odločitve
- Pokritost podružnice
- Kritje stanja
- Končna pokritost stroja
- Katero vrsto pokritosti kode izbrati
- Pokritost kode v primerjavi s funkcionalno pokritostjo
- Orodja za pokritje kode
- Prednosti in slabosti uporabe pokritosti kode
Zakaj uporabljati Code Coverage?
Tu je nekaj glavnih razlogov za uporabo kode:
- Pomaga vam pri merjenju učinkovitosti izvajanja testa
- Ponuja kvantitativne meritve.
- Določa stopnjo preizkušenosti izvorne kode.
Metode zajema kod
Sledijo glavne metode zajema kod
- Pokritost izjave
- Pokritost odločitve
- Pokritost podružnice
- Preklopi pokritost
- Pokritost FSM
Pokritost izjave
Statement Coverage je tehnika preizkušanja belega polja, pri kateri se vsi izvršljivi stavki v izvorni kodi izvedejo vsaj enkrat. Uporablja se za izračun števila izvršenih stavkov v izvorni kodi. Glavni namen Statement Coverage je zajeti vse možne poti, vrstice in izjave v izvorni kodi.
Pokritost z izjavo se uporablja za izpeljavo scenarija na podlagi strukture kode, ki se preskuša.
V testiranju bele škatle se tester osredotoča na to, kako deluje programska oprema. Z drugimi besedami, preizkuševalec se bo osredotočil na notranje delovanje izvorne kode glede nadzornih grafov pretokov ali diagramov poteka.
Če pogledamo izvorno kodo, bo v kateri koli programski opremi na voljo širok spekter elementov, kot so operatorji, funkcije, zanke, izjemni upravljavci itd. Na podlagi vnosa v program nekaterih stavkov kode morda ni mogoče izvesti . Cilj pokritosti z izjavo je zajeti vse možne poti, črte in izjave v kodi.
Razumimo to na primeru, kako izračunati pokritost izpiskov.
Scenarij za izračun pokritosti izjave za dano izvorno kodo. Tukaj uporabljamo dva različna scenarija, da preverimo odstotek pokritosti izpiskov za vsak scenarij.
Izvorna koda:
Tiski (int a, int b) {------------ Printsum je funkcijaint rezultat = a + b;Če (rezultat> 0)Natisni ("Pozitivno", rezultat)DrugačeNatisni ("Negativno", rezultat)} ----------- Konec izvorne kode
1. scenarij:
Če je A = 3, B = 9
Stavki, označeni z rumeno barvo, so tisti, ki se izvajajo v skladu s scenarijem
Število izvršenih stavkov = 5, skupno število stavkov = 7
Pokritost izjave: 5/7 = 71%
Videli bomo tudi scenarij 2,
2. scenarij:
Če je A = -3, B = -9
Stavki, označeni z rumeno barvo, so tisti, ki se izvajajo v skladu s scenarijem.
Število izvršenih stavkov = 6
Skupno število izjav = 7
Pokritost izjave: 6/7 = 85%
Ampak na splošno, če vidite, so vse izjave, ki jo zajema 2 nd scenarij je upoštevati. Tako lahko sklepamo, da je splošna pokritost izjav 100%.
Kaj je zajeto v izjavi?
- Neuporabljene izjave
- Dead Code
- Neuporabljene podružnice
- Manjkajoče izjave
Pokritost odločitve
Pokrivanje odločitev je tehnika testiranja belega polja, ki poroča o resničnih ali napačnih izidih vsakega logičnega izraza izvorne kode. Cilj testiranja zajema odločitev je zajeti in preveriti vso dostopno izvorno kodo s preverjanjem in zagotavljanjem, da se vsaka veja vsake možne točke odločitve izvede vsaj enkrat.
Pri tej pokritosti se izrazi včasih lahko zapletejo. Zato je zelo težko doseči 100% pokritost. Zato obstaja veliko različnih načinov poročanja o tej metriki. Vse te metode se osredotočajo na pokrivanje najpomembnejših kombinacij. Je zelo podoben kritju odločitev, vendar ponuja boljšo občutljivost za nadzor pretoka.
Primer kritja odločitve
Upoštevajte naslednjo kodo -
Predstavitev (int a) {Če (a> 5)a = a * 3Natisni (a)}
1. scenarij:
Vrednost a je 2
Koda, označena z rumeno, bo izvedena. Tu je preverjen izid odločitve "Ne" Če je (a> 5).
Pokritost odločitve = 50%
2. scenarij:
Vrednost a je 6
Koda, označena z rumeno, bo izvedena. Tu je preverjen izid odločitve "Da" Če (a> 5).
Pokritost odločitve = 50%
Testni primer | Vrednost A | Izhod | Pokritost odločitve |
1. | 2. | 2. | 50% |
2. | 6. | 18. | 50% |
Pokritost podružnice
Branch Coverage je metoda testiranja belega polja, pri kateri se preizkušajo vsi izidi kodnega modula (stavek ali zanka). Namen pokritosti podružnice je zagotoviti, da se vsak pogoj odločitve iz vsake podružnice izvede vsaj enkrat. Pomaga pri merjenju delcev neodvisnih segmentov kode in pri iskanju odsekov, ki nimajo vej.
Če so na primer binarni izidi, morate preizkusiti resnične in napačne rezultate.
Formula za izračun pokritosti podružnice:
Primer pokritosti podružnice
Če se želite naučiti pokritosti podružnic, si oglejmo isti primer, ki smo ga uporabili prej
Upoštevajte naslednjo kodo
Predstavitev (int a) {Če (a> 5)a = a * 3Natisni (a)}
Pokrivanje podružnic bo upoštevalo tudi brezpogojno podružnico
Testni primer | Vrednost A | Izhod | Pokritost odločitve | Pokritost podružnice |
1. | 2. | 2. | 50% | 33% |
2. | 6. | 18. | 50% | 67% |
Prednosti pokritosti podružnice:
Testiranje pokritosti poslovalnice ponuja naslednje prednosti:
- Omogoča preverjanje veljavnosti vseh vej v kodi
- Pomaga vam zagotoviti, da nobeno razvejano vodi do nepravilnosti v delovanju programa
- Metoda pokritosti poslovalnic odstrani težave, ki se zgodijo zaradi testiranja pokritosti izpiskov
- Omogoča iskanje tistih področij, ki niso preizkušena z drugimi preskusnimi metodami
- Omogoča vam kvantitativno merjenje pokritosti kode
- Pokritost vej prezre veje znotraj logičnih izrazov
Kritje stanja
Pogoj Pokritost ali pokritost izraza je preskusna metoda, ki se uporablja za preizkušanje in ovrednotenje spremenljivk ali pod izrazov v pogojni izjavi. Cilj pokritosti pogojev je preveriti posamezne izide za vsako logično stanje. Pokritost pogojev ponuja boljšo občutljivost na krmilni tok kot pokritost odločitve. V tem poročilu so upoštevani samo izrazi z logičnimi operandi.
Na primer, če ima izraz logične operacije, kot so AND, OR, XOR, kar kaže na skupne možnosti.
Kritje pogojev ne daje jamstva za popolno kritje odločitev.
Formula za izračun kritja pogojev:
Primer:
Za zgornji izraz imamo 4 možne kombinacije
- TT
- FF
- TF
- FT
Upoštevajte naslednji vnos
X = 3 Y = 4 |
(x |
PRAV |
Kritje stanja je ¼ = 25% |
A = 3 B = 4 |
(a> b) |
NAPAKA |
Končna pokritost stroja
Pokritost končnih avtomatov je zagotovo najbolj zapletena vrsta pokritosti. To pa zato, ker deluje na obnašanje modela. Pri tej metodi pokritosti morate poiskati, koliko časovno specifičnih držav je obiskanih in prepeljanih. Preveri tudi, koliko zaporedij je vključenih v končni avtomat.
Katero vrsto pokritosti kode izbrati
To je zagotovo najtežji odgovor. Da bi izbral način kritja, mora preskuševalec preveriti, ali je
- preizkušana koda ima ene ali več neodkritih napak
- stroški morebitne kazni
- stroški izgubljenega ugleda
- stroški izgubljene prodaje itd.
Večja kot je verjetnost, da bodo napake povzročile drage proizvodne okvare, hujšo stopnjo pokritosti morate izbrati.
Pokritost kode v primerjavi s funkcionalno pokritostjo
Pokritost kode | Funkcionalna pokritost |
Pokritost kode vam pove, kako dobro je izvorno kodo uporabljal vaš preskusni sistem. | Funkcionalna pokritost meri, kako dobro je funkcionalnost zasnove zajela vaša preskusna naprava. |
Nikoli ne uporabljajte specifikacij zasnove | Uporabite specifikacijo zasnove |
Naredili razvijalci | Sestavljajo preizkuševalci |
Orodja za pokritje kode
Tu je seznam pomembnih orodij za pokritje kode:
Ime orodja | Opis |
Cobertura | Je orodje za pokrivanje odprte kode. Izmeri testno pokritost z instrumentiranjem osnove kode in analizira, katere vrstice kode se izvajajo in katere se ne izvajajo, ko se testni paket zažene. |
Detelje | Clover prav tako zmanjšuje čas testiranja samo s tem, da izvaja preskuse, ki pokrivajo kodo aplikacije, ki je bila spremenjena od prejšnje gradnje. |
DevPartner | DevPartner razvijalcem omogoča analizo kode Java glede kakovosti in zapletenosti kode. |
Emma | EMMA podpira pokritost razreda, metode, linije in osnovnega bloka, agregirane izvorne datoteke, razreda in metode. |
Kalistick | Kalistick je aplikacija tretje osebe, ki kode analizira z različnih vidikov. |
CoView in CoAnt | Programska oprema za kodiranje je orodje za pokritje kode za meritve, lažno ustvarjanje predmetov, preizkušanje kode, pokritost poti in vej itd. |
Bullseye za C ++ | BulseyeCoverage je orodje za pokrivanje kod za C ++ in C. |
Sonar | Sonar je odprto orodje za pokrivanje kode, ki vam pomaga upravljati kakovost kode. |
Prednosti uporabe pokritosti kode
- V pomoč pri oceni kvantitativnega merila pokritosti kode
- Omogoča vam ustvarjanje dodatnih testnih primerov za povečanje pokritosti
- Omogoča vam iskanje področij programa, ki se ne izvajajo v naboru testnih primerov
Slabosti uporabe pokritosti kode
- Tudi če katera koli posebna značilnost ni oblikovana, pokritost kode še vedno poroča o 100-odstotni pokritosti.
- Ni mogoče ugotoviti, ali smo s pomočjo pokritosti kode preizkusili vse možne vrednosti funkcije
- Pokritost kode tudi ne pove, koliko in kako dobro ste pokrili svojo logiko
- V primeru, da navedena funkcija ni izvedena ali ni vključena v specifikacijo, tehnike, ki temeljijo na strukturi, ne morejo najti te težave.
Povzetek
- Pokritost kode je merilo, ki opisuje stopnjo preizkušenosti izvorne kode programa
- Pomaga vam pri merjenju učinkovitosti izvajanja testa
- Pet metod pokritosti kode je 1.) Pokritost izjave 2.) Pokritost stanja 3) Pokritost podružnice 4) Preklopna pokritost 5) Pokritost FSM
- Obseg izjave vključuje izvedbo vseh izvršljivih stavkov v izvorni kodi vsaj enkrat
- Pokrivanje odločitev poroča o resničnih ali napačnih izidih vsakega logičnega izraza
- Pri pokritosti podružnice se preizkusi vsak rezultat modula kode
- Pogojno bo razkrilo, kako se ocenjujejo spremenljivke ali podrazi v pogojnem stavku
- Pokritost končnih avtomatov je zagotovo najbolj zapletena vrsta pokritosti
- Za izbiro metode kritja mora preizkuševalec preveriti stroške morebitne kazni, izgubljenega ugleda, izgubljene prodaje itd.
- Pokritost kode vam pove, kako dobro je izvorno kodo uporabljala vaša preskusna naprava, medtem ko funkcionalna pokritost meri, kako dobro je bila zajeta funkcionalnost zasnove
- Cobertura, JTest, Clover, Emma, Kalistick je nekaj pomembnih orodij za pokrivanje kode
- Code Coverage vam omogoča ustvarjanje dodatnih testnih primerov za povečanje pokritosti
- Code Coverage vam ne pomaga ugotoviti, ali smo preizkusili vse možne vrednosti funkcije