Kodedekningsveiledning: Branch, Statement & Decision Testing

Hva er kodedekning?

Kodedekning er et mål som beskriver graden av kildekoden til programmet er testet. Det er en form for testing av hvite bokser som finner områdene i programmet som ikke utøves av et sett med testtilfeller. Det oppretter også noen testtilfeller for å øke dekningen og bestemme et kvantitativt mål for kodedekning.

I de fleste tilfeller samler kodedekningssystem informasjon om det kjørende programmet. Den kombinerer også det med kildekodeinformasjon for å generere en rapport om testpakkens kodedekning.

Hvorfor bruke kodedekningstesting?

Her er noen hovedgrunner for å bruke kodedekning:

  • Det hjelper deg å måle effektiviteten av testimplementering
  • Den tilbyr en kvantitativ måling.
  • Den definerer i hvilken grad kildekoden er testet.

Metoder for kodedekning

Følgende er viktige kodedekningsmetoder

  • Uttalelsesdekning
  • Beslutningsdekning
  • Filialdekning
  • Toggle Dekning
  • FSM-dekning

Uttalelsesdekning

Uttalelsesdekning er en hvit boks-testteknikk der alle de kjørbare setningene i kildekoden kjøres minst én gang. Den brukes til å beregne antall utsagn i kildekoden som er utført. Hovedformålet med Statement Coverage er å dekke alle mulige stier, linjer og utsagn i kildekoden.

Uttalelsesdekning brukes til å utlede scenario basert på strukturen til koden som testes.

Uttalelsesdekning

In Hvit Box Testing, konsentrerer testeren seg om hvordan programvaren fungerer. Med andre ord vil testeren konsentrere seg om den interne driften av kildekoden angående kontrollflytgrafer eller flytskjemaer.

Generelt i enhver programvare, hvis vi ser på kildekoden, vil det være et bredt utvalg av elementer som operatører, funksjoner, looping, eksepsjonelle behandlere, etc. Basert på input til programmet, kan det hende at noen av kodesetningene ikke blir utført . Målet med Statement-dekning er å dekke alle mulige stier, linjer og uttalelser i koden.

La oss forstå dette med et eksempel, hvordan du beregner utsagnsdekning.

Scenario for å beregne erklæringsdekning for gitt kildekode. Her tar vi to forskjellige scenarier for å sjekke prosentandelen av erklæringsdekningen for hvert scenario.

Kildekode:

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 

Scenario 1:

Hvis A = 3, B = 9

Uttalelsesdekning

Utsagnene merket med gul farge er de som utføres i henhold til scenariet

Antall utførte utsagn = 5, Totalt antall utsagn = 7

Uttalelsesdekning: 5/7 = 71 %

Uttalelsesdekning

På samme måte vil vi se scenario 2,

Scenario 2:

Hvis A = -3, B = -9

Uttalelsesdekning

Utsagnene merket med gul farge er de som utføres i henhold til scenariet.

Antall utførte utsagn = 6

Totalt antall utsagn = 7

Uttalelsesdekning

Uttalelsesdekning: 6/7 = 85 %

Uttalelsesdekning

Men totalt sett, hvis du ser, er alle utsagnene dekket av begge scenariene. Så vi kan konkludere med at den generelle dekningen er 100 %.

Uttalelsesdekning

Hva dekkes av erklæringsdekning?

  1. Ubrukte uttalelser
  2. Død kode
  3. Ubrukte grener
  4. Manglende utsagn

Testing av beslutningsdekning

Beslutningsdekning er en hvit boks-testteknikk som rapporterer sanne eller falske utfall av hvert boolsk uttrykk for kildekoden. Målet med testing av beslutningsdekning er å dekke og validere all tilgjengelig kildekode ved å sjekke og sikre at hver gren av alle mulige beslutningspunkter utføres minst én gang.

I denne dekningstypen kan uttrykk bli komplekse, noe som gjør det utfordrende å oppnå 100 % dekning. Dette er grunnen til at ulike metoder brukes for å rapportere denne beregningen. Disse metodene prioriterer de mest kritiske kombinasjonene. Selv om det ligner på beslutningsdekning, gir det større følsomhet for kontrollflyt.

Testing av beslutningsdekning

Eksempel på vedtaksdekning

Tenk på følgende kode-

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

Scenario 1:

Verdien av a er 2

Testing av beslutningsdekning

Koden uthevet i gult vil bli utført. Her er "Nei"-utfallet av avgjørelsen If (a>5) krysset av.

Beslutningsdekning = 50 %

Scenario 2:

Verdien av a er 6

Testing av beslutningsdekning

Koden uthevet i gult vil bli utført. Her er "Ja"-utfallet av avgjørelsen If (a>5) krysset av.

Beslutningsdekning = 50 %

Testsak Verdien av A Produksjon Beslutningsdekning
1 2 2 50%
2 6 18 50%

Testing av grendekning

Filialdekning er en hvit boks-testmetode der hvert utfall fra en kodemodul (utsagn eller loop) testes. Hensikten med filialdekning er å sikre at hver beslutningsbetingelse fra hver filial blir utført minst én gang. Det hjelper å måle brøkdeler av uavhengige kodesegmenter og å finne ut seksjoner som ikke har noen forgreninger.

For eksempel, hvis resultatene er binære, må du teste både sanne og usanne utfall.

Formelen for å beregne grendekning:

Testing av grendekning

Eksempel på filialdekning

For å lære grendekning, la oss vurdere det samme eksemplet som ble brukt tidligere

Tenk på følgende kode-

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

Testing av grendekning

Filialdekning vil også vurdere ubetinget filial

Testsak Verdien av A Produksjon Beslutningsdekning Filialdekning
1 2 2 50% 33%
2 6 18 50% 67%

Fordeler med filialdekning:

Filialdekning Testing gir følgende fordeler:

  • Lar deg validere alle grenene i koden
  • Hjelper deg med å sikre at ingen forgrenet fører til unormalt i programmets drift
  • Branch-dekningsmetoden fjerner problemer som oppstår på grunn av testing av erklæringsdekning
  • Lar deg finne de områdene som ikke er testet av andre testmetoder
  • Den lar deg finne et kvantitativt mål for kodedekning
  • Grenedekning ignorerer grener inne i de boolske uttrykkene

Tilstandsdekningstesting

Tilstandsdekning eller uttrykksdekning er en testmetode som brukes til å teste og evaluere variablene eller underuttrykkene i den betingede setningen. Målet med tilstandsdekning er å sjekke individuelle utfall for hver logisk tilstand. Tilstandsdekning gir bedre følsomhet for kontrollflyten enn beslutningsdekning. I denne dekningen vurderes kun uttrykk med logiske operander.

For eksempel, hvis et uttrykk har boolske operasjoner som AND, OR, XOR, som indikerer totale muligheter.

Tilstandsdekning gir ingen garanti om full vedtaksdekning.

Formelen for å beregne tilstandsdekning:

Tilstandsdekningstesting

Eksempel:

Tilstandsdekningstesting

For uttrykket ovenfor har vi 4 mulige kombinasjoner

  • TT
  • FF
  • TF
  • FT

Tenk på følgende innspill

X = 3

Y = 4

(x TRUE Tilstandsdekning er ¼ = 25 %
A = 3

B = 4

(a>b) FALSK

Finite State Machine Dekning

Finite state maskindekning er absolutt den mest komplekse typen kodedekningsmetode. Dette er fordi det fungerer på oppførselen til designet. I denne dekningsmetoden må du se etter hvor mange tidsspesifikke stater som besøkes, transitt. Den sjekker også hvor mange sekvenser som er inkludert i en endelig tilstandsmaskin.

Hvilken type kodedekning å velge

Dette er absolutt det vanskeligste svaret å gi. For å velge en dekningsmetode, må testeren sjekke at

  • koden som testes har én eller flere uoppdagede defekter
  • kostnaden for den potensielle straffen
  • kostnadene ved tapt omdømme
  • kostnader ved tapt salg, etc.

Jo høyere sannsynlighet for at feil vil forårsake kostbare produksjonssvikt, desto strengere er dekningsnivået du må velge.

Kodedekning vs. funksjonell dekning

Kodedekning Funksjonell dekning
Kodedekningen forteller deg hvor godt kildekoden har blitt brukt av testbenken din. Funksjonell dekning måler hvor godt funksjonaliteten til designet har blitt dekket av testbenken din.
Bruk aldri en designspesifikasjon Bruk designspesifikasjoner
Utført av utviklere Utført av testere

Verktøy for kodedekning

Her er en liste over viktige kodedekningsverktøy:

Verktøyets navn Tekniske beskrivelser
Cobertura Det er et dekningsverktøy for åpen kildekode. Den måler testdekning ved å instrumentere en kodebase og analysere hvilke linjer med kode som kjøres og hvilke som ikke kjøres når testpakken kjører.
Kløver Clover reduserer også testtiden ved kun å kjøre testene som dekker applikasjonskoden som ble endret siden forrige konstruksjon.
DevPartner DevPartner gjør det mulig for utviklere å analysere Java kode for kodekvalitet og kompleksitet.
Emma EMMA støtter klasse-, metode-, linje- og basisblokkdekning, aggregerte kildefil-, klasse- og metodenivåer.
Kalistick Kalistick er en tredjepartsapplikasjon som analyserer kodene med forskjellige perspektiver.
CoView og CoAnt Kodingsprogramvare er et kodedekningsverktøy for beregninger, mock-objektoppretting, kodetestbarhet, bane- og grendekning, etc.
Bullseye for C++ BulseyeCoverage er et kodedekningsverktøy for C++ og C.
Sonar Sonar er et åpent kodedekningsverktøy som hjelper deg med å administrere kodekvalitet.

Fordeler og ulemper ved å bruke kodedekning

Fordeler med kodedekning Kodedekning Ulemper
Nyttig for å evaluere et kvantitativt mål på kodedekning Selv når en bestemt funksjon ikke er implementert i design, rapporterer kodedekning fortsatt 100 % dekning.
Den lar deg lage ekstra testtilfeller for å øke dekningen Det er ikke mulig å fastslå om vi testet alle mulige verdier av en funksjon ved hjelp av kodedekning
Den lar deg finne områdene i et program som ikke utøves av et sett med testtilfeller Kodedekningen forteller heller ikke hvor mye og hvor godt du har dekket logikken din
I tilfellet når den angitte funksjonen ikke er implementert, eller ikke er inkludert i spesifikasjonen, kan ikke strukturbaserte teknikker finne det problemet.

Sammendrag

  • Kodedekning er et mål som beskriver graden av kildekoden til programmet er testet
  • Det hjelper deg å måle effektiviteten av testimplementering
  • Fem kodedekningsmetoder er 1.) Erklæringsdekning 2.) Tilstandsdekning 3) Bransjedekning 4) Toggle Dekning 5) FSM Dekning
  • Uttalelsesdekning innebærer utførelse av alle de kjørbare setningene i kildekoden minst én gang
  • Beslutningsdekning rapporterer sanne eller usanne utfall av hvert boolsk uttrykk
  • I grendekningen testes hvert utfall fra en kodemodul
  • Betinget vil avsløre hvordan variablene eller underuttrykkene i den betingede setningen blir evaluert
  • Finite state maskindekning er absolutt den mest komplekse typen kodedekningsmetode
  • For å velge en dekningsmetode, må testeren sjekke kostnadene for den potensielle straffen, tapt omdømme, tapt salg, etc.
  • Kodedekning forteller deg hvor godt kildekoden har blitt brukt av testbenken din, mens funksjonell dekning måler hvor godt funksjonaliteten til designet har blitt dekket
  • Cobertura, JTest, Clover, Emma, ​​Kalistick er noen viktige kodedekningsverktøy
  • Kodedekning lar deg lage ekstra testtilfeller for å øke dekningen
  • Kodedekning hjelper deg ikke med å avgjøre om vi har testet alle mulige verdier for en funksjon

Oppsummer dette innlegget med: