Code Alat za pokrivenost: Testiranje izjava, grananja i odluka

โšก Pametni saลพetak

Code pokrivenost je mjerenje bijele kutije koje pokazuje stupanj u kojem je izvorni kod testiran testnim paketom, helping Timovi pronalaze netestirane naredbe, grane, uvjete i putove koje mogu zauzimati skriveni nedostaci.

  • ๐ŸŽฏ Definicija: Code pokrivenost kvantificira koliko izvornog koda vaลกi testovi zapravo izvrลกavaju.
  • ๐Ÿ“Š Metode: Postoji pet metoda - naredbena, odluฤujuฤ‡a, grananja, uvjetna i pokrivenost konaฤnim automatom stanja.
  • ๐Ÿงฉ Izjava u odnosu na podruลพnicu: Pokrivenost izjava provjerava retke, dok pokrivenost granama provjerava svaki ishod odluke.
  • โš–๏ธ Code u odnosu na funkcionalno: Code mjere pokrivenosti provedene kodom; funkcionalne mjere pokrivenosti obuhvaฤ‡eni zahtjevi.
  • ๐Ÿ› ๏ธ Alati: Cobertura, OpenClover, EMMA i Sonar automatiziraju mjerenje pokrivenosti.
  • ๐Ÿค– AI pomoฤ‡: Alati umjetne inteligencije automatski generiraju testove i otkrivaju netestirane, visokoriziฤne praznine u pokrivenosti.

Code Vodiฤ za pokrivenost

ล to je Code Pokrivenost?

Code pokrivenost je mjera koja opisuje stupanj testiranja izvornog koda programa. To je jedan oblik testiranje bijele kutije koji pronalazi podruฤja programa koja nisu testirana skupom testnih sluฤajeva. Takoฤ‘er pomaลพe u stvaranju dodatnih testnih sluฤajeva za poveฤ‡anje pokrivenosti i odreฤ‘ivanje kvantitativne mjere pokrivenosti koda.

U veฤ‡ini sluฤajeva, sustav za pokrivenost koda prikuplja informacije o programu koji se izvrลกava. Zatim ih kombinira s informacijama o izvornom kodu kako bi generirao izvjeลกฤ‡e o pokrivenosti koda testnog paketa.

Zaลกto koristiti Code Testiranje pokrivenosti?

Evo nekoliko glavnih razloga za koriลกtenje pokrivenosti kodom:

  • Pomaลพe vam u mjerenju uฤinkovitosti implementacije testiranja.
  • Nudi kvantitativno mjerenje testiranja.
  • Definira stupanj do kojeg je izvorni kod testiran.

Code Metode pokrivanja

Slijede glavne metode pokrivanja koda:

  • Pokrivenost izjave
  • Pokrivenost odluka
  • Pokrivenost podruลพnica
  • Toggle Pokrivenost
  • FSM pokrivenost

Pokrivenost izjave

Pokrivenost izjave je tehnika testiranja bijele kutije u kojoj se sve izvrลกne naredbe u izvornom kodu izvrลกavaju barem jednom. Koristi se za izraฤunavanje broja naredbi u izvornom kodu koje su izvrลกene. Glavna svrha pokrivanja naredbi je pokriti sve moguฤ‡e putove, retke i naredbe u izvornom kodu.

Pokrivenost izjavama koristi se za izvoฤ‘enje scenarija na temelju strukture koda koji se testira.

Pokrivenost izjave

U testiranju bijele kutije, tester se koncentrira na to kako softver radi. Drugim rijeฤima, tester se koncentrira na unutarnji rad izvornog koda u vezi s grafovima toka upravljanja ili dijagramima toka.

Opฤ‡enito u bilo kojem softveru, ako pogledate izvorni kod, postojat ฤ‡e ลกirok raspon elemenata poput operatora, funkcija, looping, rukovatelje iznimkama i tako dalje. Na temelju ulaznih podataka u program, neke od naredbi koda moลพda se neฤ‡e izvrลกiti. Cilj pokrivanja naredbi je pokriti sve moguฤ‡e putove, retke i naredbe u kodu.

Razumijemo ovo s primjerom kako izraฤunati pokrivenost izvoda. Ovdje uzimamo dva razliฤita scenarija kako bismo provjerili postotak pokrivenosti izvoda za svaki scenarij.

izvor Code:

Prints (int a, int b) {                       ------------  Printsum is a function
    int result = a + b;
    If (result > 0)
        Print ("Positive", result)
    Else
        Print ("Negative", result)
    }                                        -----------   End of the source code

Scenarij 1: Ako je A = 3, B = 9

Scenarij pokrivenosti izvoda 1

ลฝutom bojom oznaฤene su izjave koje se izvrลกavaju prema scenariju. Broj izvrลกenih izjava = 5, Ukupan broj izjava = 7, pa je Pokrivenost izjava = 5/7 = 71%.

Scenarij 2: Ako je A = -3, B = -9

Scenarij pokrivenosti izvoda 2

ลฝutom bojom oznaฤene su izjave koje se izvrลกavaju prema scenariju. Broj izvrลกenih izjava = 6, Ukupan broj izjava = 7, pa je Pokrivenost izjava = 6/7 = 85%.

Ali sveukupno, ako vidite, sve izjave su pokrivene oba scenarija. Dakle, moลพemo zakljuฤiti da je ukupna pokrivenost izjava 100%.

ล to pokriva Statement Coverage?

  1. Neiskoriลกtene izjave
  2. Mrtav Code
  3. Neiskoriลกtene grane
  4. Izjave koje nedostaju

Testiranje pokrivenosti odluka

Pokrivenost odluka je tehnika testiranja bijele kutije koja izvjeลกtava o istinitim ili netoฤnim ishodima svakog logiฤkog izraza u izvornom kodu. Cilj testiranja pokrivenosti odluka je pokriti i validirati sav dostupni izvorni kod provjerom i osiguravanjem da se svaka grana svake moguฤ‡e toฤke odluke izvrลกi barem jednom.

U ovoj vrsti pokrivenosti, izrazi mogu postati sloลพeni, ลกto oteลพava postizanje 100%-tne pokrivenosti. Zbog toga se koriste razliฤite metode za izvjeลกtavanje o ovoj metrici. Ove metode daju prioritet najkritiฤnijim kombinacijama. Iako je sliฤno pokrivanju granama, pruลพa veฤ‡u osjetljivost na tok upravljanja.

Testiranje pokrivenosti odluka

Primjer pokrivenosti odlukama

Razmotrite sljedeฤ‡i kรดd:

Demo(int a) {
    If (a > 5)
        a = a * 3
    Print (a)
    }

Scenarij 1: Vrijednost a je 2. Ishod odluke "Ne". Ako je oznaฤeno (a>5), onda je Pokrivenost odluke = 50%.

Scenarij 2: Vrijednost a je 6. Ishod odluke "Da". Ako je oznaฤeno (a>5), onda je Pokrivenost odluke = 50%.

Testni sluฤaj Vrijednost A Izlaz Pokrivenost odluka
1 2 2 50%
2 6 18 50%

Testiranje pokrivenosti podruลพnica

Pokrivenost podruลพnica je metoda testiranja bijele kutije u kojoj se testira svaki ishod iz kodnog modula (naredbe ili petlje). Svrha pokrivanja grananja je osigurati da se svaki uvjet odluke iz svake grane izvrลกi barem jednom. Pomaลพe u mjerenju udjela neovisnih segmenata koda i pronalaลพenju odjeljaka koji nemaju grane.

Na primjer, ako su ishodi binarni, morate testirati i True i False ishode.

Formula za izraฤun pokrivenosti podruลพnice:

Formula pokrivenosti podruลพnice

Primjer pokrivenosti podruลพnica

Za uฤenje pokrivenosti grananja, razmotrite isti primjer koji je ranije koriลกten. Pokrivenost grananja ฤ‡e takoฤ‘er uzeti u obzir bezuvjetnu granu.

Testni sluฤaj Vrijednost A Izlaz Pokrivenost odluka Pokrivenost podruลพnica
1 2 2 50% 33%
2 6 18 50% 67%

Prednosti pokrivenosti podruลพnice:

  • Omoguฤ‡uje vam validaciju svih grana u kodu.
  • Pomaลพe vam osigurati da nijedna grana ne dovede do abnormalnosti u radu programa.
  • Uklanja probleme koji se javljaju zbog testiranja pokrivenosti izjava.
  • Omoguฤ‡uje vam pronalaลพenje podruฤja koja nisu testirana drugim metodama testiranja.
  • Omoguฤ‡uje vam pronalaลพenje kvantitativne mjere pokrivenosti koda.
  • Pokrivenost grana zanemaruje grane unutar logiฤkih izraza.

Ispitivanje pokrivenosti stanja

Pokrivenost stanjaPokrivenost izraza, ili pokrivenost izraza, je metoda testiranja koja se koristi za testiranje i procjenu varijabli ili podizraza u uvjetnoj naredbi. Cilj pokrivenosti uvjeta je provjera pojedinaฤnih ishoda za svaki logiฤki uvjet. Pokrivenost uvjeta nudi bolju osjetljivost na tok upravljanja od pokriฤ‡a odluka. U ovom pokrivanju razmatraju se samo izrazi s logiฤkim operandima.

Na primjer, ako izraz ima logiฤke operacije poput AND, OR ili XOR, to oznaฤava ukupan broj moguฤ‡nosti. Pokrivenost uvjeta ne jamฤi potpunu pokrivenost odluka.

Formula za izraฤun pokriฤ‡a stanja:

Formula za pokriฤ‡e stanja

Za izraz s dva operanda postoje ฤetiri moguฤ‡e kombinacije: TT, FF, TF i FT. Razmotrimo ulaz X=3, Y=4 (x b) NETOฤŒNO, ลกto daje pokrivenost uvjeta od 1/4 = 25%.

Pokrivenost konaฤnog stroja stanja

Pokrivenost konaฤnim automatom stanja zasigurno je najsloลพenija vrsta metode pokrivanja koda. To je zato ลกto radi na ponaลกanju dizajna. U ovoj metodi pokrivanja potrebno je pogledati koliko puta se odreฤ‘ena stanja posjeฤ‡uju ili prolaze. Takoฤ‘er se provjerava koliko je sekvenci ukljuฤeno u konaฤni automat stanja.

Koja vrsta Code Pokrivenost po izboru

Ovo je svakako najteลพi odgovor. Kako bi odabrao metodu pokrivanja, tester mora provjeriti je li:

  • kod koji se testira ima jedan ili viลกe neotkrivenih nedostataka,
  • troลกak potencijalne kazne,
  • cijena izgubljenog ugleda,
  • troลกak izgubljene prodaje i tako dalje.

ล to je veฤ‡a vjerojatnost da ฤ‡e nedostaci uzrokovati skupe kvarove u proizvodnji, to je veฤ‡a razina pokrivenosti koju trebate odabrati.

Code Pokrivenost u odnosu na funkcionalnu pokrivenost

Code Pokrivenost Funkcionalna pokrivenost
Pokazuje koliko je dobro izvorni kod testiran na vaลกem testnom sustavu. Mjeri koliko je dobro funkcionalnost dizajna pokrivena vaลกim ispitnim stolom.
Nikada ne koristi specifikaciju dizajna. Koristi specifikaciju dizajna.
Izradili programeri. Izvrลกeno od strane testera.

Code Alati za pokrivenost

Evo popisa vaลพnih alata za pokrivanje koda:

Naziv alata Description
Cobertura Alat za pokrivenost otvorenog koda. Mjeri pokrivenost testovima instrumentiranjem baze koda i analizom koji se redovi koda izvrลกavaju, a koji ne, kada se pokrene testni paket.
Djetelina Djetelina (OpenClover) takoฤ‘er smanjuje vrijeme testiranja pokretanjem samo testova koji pokrivaju kod aplikacije izmijenjen od prethodne izgradnje.
DevPartner DevPartner omoguฤ‡uje programerima analizu Java kod za kvalitetu i sloลพenost koda.
Emma EMMA podrลพava pokrivenost klasa, metoda, redaka i osnovnih blokova, agregirano na razini izvorne datoteke, klase i metode.
Kalistick Kalistick je aplikacija treฤ‡e strane koja analizira kod iz razliฤitih perspektiva.
CoView i CoAnt Alat za pokrivenost koda za metrike, stvaranje laลพnih objekata, testiranje koda, pokrivenost putova i grana i joลก mnogo toga.
Bullseye za C++ BullseyeCoverage je alat za pokrivanje koda za C++ i C.
Sonar Sonar je alat za pokrivenost otvorenog koda koji vam pomaลพe u upravljanju kvalitetom koda.

Prednosti i nedostaci koriลกtenja Code Pokrivenost

Prednosti Nedostaci
Korisno za procjenu kvantitativne mjere pokrivenosti koda. ฤŒak i kada odreฤ‘ena znaฤajka nije implementirana u dizajnu, pokrivenost koda i dalje iznosi 100%-tnu pokrivenost.
Omoguฤ‡uje vam stvaranje dodatnih testnih sluฤajeva za poveฤ‡anje pokrivenosti. Nije moguฤ‡e utvrditi jesu li sve moguฤ‡e vrijednosti znaฤajke testirane koriลกtenjem pokrivenosti koda.
Omoguฤ‡uje vam pronalaลพenje podruฤja programa koja nisu testirana skupom testnih sluฤajeva. Code pokrivenost ne govori koliko i koliko dobro ste pokrili svoju logiku.

Pitanja i odgovori

Mnogi timovi ciljaju na 70 do 80% kao praktiฤan cilj. Postizanje 100% rijetko je isplativo. Usredotoฤite se na pokrivanje kritiฤne, visokoriziฤne logike umjesto da jurite za jednim brojem u cijeloj kodnoj bazi.

Ne. Potpuna pokrivenost dokazuje da je svaki redak pokrenut, a ne da je svaki ulaz, vrijednost ili zahtjev validiran. Logiฤke pogreลกke i nedostajuฤ‡e znaฤajke i dalje mogu proฤ‡i neotkriveno, pa pokrivenost nadopunjuje, a ne zamjenjuje dobar dizajn testa.

Code pokrivenost mjeri koliko se izvornog koda izvrลกava tijekom testiranja. Pokrivenost testiranjem je ลกira, trackralj koliko dobro testovi adresiraju zahtjeve, znaฤajke i rizike. Code pokrivenost je jedan od ulaznih podataka za ukupnu pokrivenost testiranjem.

Ne. Moลพete postiฤ‡i 100%-tno pokrivanje naredbi, a pritom ostaviti grane netestiranima, poput nedostajuฤ‡eg puta else. Pokrivenost grana (odluka) je jaฤa jer obuhvaฤ‡a pokrivenost naredbi i primjenjuje svaki ishod.

Umjetna inteligencija analizira izvorni kod i postojeฤ‡e testove kako bi identificirala netestirane, visokoriziฤne puteve, a zatim predlaลพe ili generira nove sluฤajeve. Strojno uฤenje takoฤ‘er daje prioritet testovima koje treba pokrenuti, skraฤ‡ujuฤ‡i povratne informacije dok istovremeno odrลพavaping pokrivenost visoka.

Da. Alati umjetne inteligencije poput Diffblue Covera skeniraju kod i autonomno piลกu jediniฤne testove za neotkrivenu logiku. Ciljaju riziฤne grane i uvjete, poveฤ‡avajuฤ‡i pokrivenost uz daleko manje ruฤnog napora.

OpenClover mjeri pokrivenost naredbi, grana i metoda te prikuplja viลกe od 20 metrika. Cobertura, EMMA i JaCoCo postoje i druge ลกiroko koriลกtene besplatne opcije za Java projektima.

Izmijenjeno pokriฤ‡e uvjeta/odluka zahtijeva da svako stanje u odluci neovisno utjeฤe na ishod. Stroลพe je od pokriฤ‡a grane i obavezno je za sigurnosno kritiฤan softver, poput avionike, prema standardu DO-178C.

Saลพmite ovu objavu uz: