Kodedækningsvejledning: Afdelings-, erklærings- og beslutningstest

Hvad er kodedækning?

Kodedækning er et mål, der beskriver, i hvilken grad programmets kildekode er blevet testet. Det er en form for white box-test, der finder de områder af programmet, der ikke udøves af et sæt testcases. Det skaber også nogle testcases for at øge dækningen og bestemme et kvantitativt mål for kodedækning.

I de fleste tilfælde samler kodedækningssystemet information om det kørende program. Det kombinerer også det med kildekodeoplysninger for at generere en rapport om testpakkens kodedækning.

Hvorfor bruge Code Coverage Testing?

Her er nogle hovedårsager til at bruge kodedækning:

  • Det hjælper dig med at måle effektiviteten af ​​testimplementering
  • Det giver en kvantitativ måling.
  • Det definerer i hvilken grad kildekoden er blevet testet.

Kodedækningsmetoder

Følgende er vigtige kodedækningsmetoder

  • Erklæringsdækning
  • Beslutningsdækning
  • Filialdækning
  • Toggle Dækning
  • FSM Dækning

Erklæringsdækning

Erklæringsdækning er en white box-testteknik, hvor alle de eksekverbare sætninger i kildekoden udføres mindst én gang. Det bruges til at beregne antallet af udsagn i kildekoden, der er blevet udført. Hovedformålet med Statement Coverage er at dække alle mulige stier, linjer og udsagn i kildekoden.

Udsagnsdækning bruges til at udlede scenarier baseret på strukturen af ​​den kode, der testes.

Erklæringsdækning

In Hvid Box Test, koncentrerer testeren sig om, hvordan softwaren fungerer. Med andre ord vil testeren koncentrere sig om den interne bearbejdning af kildekoden vedrørende kontrolflowgrafer eller flowdiagrammer.

Generelt i enhver software, hvis vi ser på kildekoden, vil der være en bred vifte af elementer som operatører, funktioner, looping, exceptionelle handlere osv. Baseret på input til programmet kan nogle af kodesætningerne ikke udføres . Målet med Statement-dækning er at dække alle mulige stier, linjer og sætninger i koden.

Lad os forstå dette med et eksempel, hvordan man beregner udsagnsdækning.

Scenarie til at beregne erklæringsdækning for givet kildekode. Her tager vi to forskellige scenarier for at kontrollere procentdelen af ​​erklæringsdækningen for hvert scenarie.

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

Erklæringsdækning

Udsagn markeret med gul farve er dem, der udføres i henhold til scenariet

Antal udførte udsagn = 5, Samlet antal udsagn = 7

Opgørelsesdækning: 5/7 = 71 %

Erklæringsdækning

Ligeledes vil vi se scenario 2,

Scenario 2:

Hvis A = -3, B = -9

Erklæringsdækning

Udsagn markeret med gul farve er dem, der udføres i henhold til scenariet.

Antal udførte udsagn = 6

Samlet antal udsagn = 7

Erklæringsdækning

Opgørelsesdækning: 6/7 = 85 %

Erklæringsdækning

Men samlet set, hvis du ser, er alle udsagn dækket af begge scenarier. Så vi kan konkludere, at den samlede udsagnsdækning er 100 %.

Erklæringsdækning

Hvad er dækket af erklæringsdækning?

  1. Ubrugte erklæringer
  2. Død kode
  3. Ubrugte grene
  4. Manglende erklæringer

Test af beslutningsdækning

Beslutningsdækning er en hvid boks-testteknik, som rapporterer de sande eller falske resultater af hvert boolesk udtryk for kildekoden. Målet med test af beslutningsdækning er at dække og validere al tilgængelig kildekode ved at kontrollere og sikre, at hver gren af ​​alle mulige beslutningspunkter udføres mindst én gang.

I denne dækningstype kan udtryk blive komplekse, hvilket gør det udfordrende at opnå 100 % dækning. Det er derfor, der bruges forskellige metoder til at rapportere denne metrik. Disse metoder prioriterer de mest kritiske kombinationer. Selvom det ligner beslutningsdækning, giver det større følsomhed over for kontrolflow.

Test af beslutningsdækning

Eksempel på beslutningsdækning

Overvej følgende kode-

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

Scenario 1:

Værdien af ​​a er 2

Test af beslutningsdækning

Koden fremhævet med gult vil blive udført. Her er "Nej"-resultatet af beslutningen If (a>5) markeret.

Beslutningsdækning = 50 %

Scenario 2:

Værdien af ​​a er 6

Test af beslutningsdækning

Koden fremhævet med gult vil blive udført. Her er "Ja"-resultatet af beslutningen If (a>5) markeret.

Beslutningsdækning = 50 %

Test sag Værdien af ​​A Produktion Beslutningsdækning
1 2 2 50 %
2 6 18 50 %

Afprøvning af filialdækning

Filialdækning er en hvid boks-testmetode, hvor hvert resultat fra et kodemodul (udsagn eller loop) testes. Formålet med filialdækning er at sikre, at hver beslutningsbetingelse fra hver filial udføres mindst én gang. Det hjælper med at måle brøkdele af uafhængige kodesegmenter og finde ud af sektioner uden forgreninger.

For eksempel, hvis resultaterne er binære, skal du teste både Sande og Falske udfald.

Formlen til at beregne filialdækning:

Afprøvning af filialdækning

Eksempel på filialdækning

For at lære filialdækning, lad os overveje det samme eksempel, der blev brugt tidligere

Overvej følgende kode-

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

Afprøvning af filialdækning

Filialdækning vil også overveje ubetinget filial

Test sag Værdien af ​​A Produktion Beslutningsdækning Filialdækning
1 2 2 50 % 33 %
2 6 18 50 % 67 %

Fordele ved filialdækning:

Afdelingsdækning Test giver følgende fordele:

  • Giver dig mulighed for at validere alle grenene i koden
  • Hjælper dig med at sikre, at ingen forgrenet fører til nogen abnormitet i programmets drift
  • Filialdækningsmetode fjerner problemer, der opstår på grund af test af erklæringsdækning
  • Giver dig mulighed for at finde de områder, der ikke er testet af andre testmetoder
  • Det giver dig mulighed for at finde et kvantitativt mål for kodedækning
  • Filialdækning ignorerer grene inde i de boolske udtryk

Tilstandsdækningstest

Tilstandsdækning eller udtryksdækning er en testmetode, der bruges til at teste og evaluere variablerne eller underudtrykkene i den betingede erklæring. Målet med tilstandsdækning er at kontrollere individuelle resultater for hver logisk tilstand. Tilstandsdækning giver bedre følsomhed over for kontrolflowet end beslutningsdækning. I denne dækning tages der kun hensyn til udtryk med logiske operander.

For eksempel, hvis et udtryk har booleske operationer som AND, OR, XOR, hvilket indikerer samlede muligheder.

Tilstandsdækning giver ikke garanti for fuld beslutningsdækning.

Formlen til at beregne tilstandsdækning:

Tilstandsdækningstest

Eksempel:

Tilstandsdækningstest

For ovenstående udtryk har vi 4 mulige kombinationer

  • TT
  • FF
  • TF
  • FT

Overvej følgende input

X = 3

Y=4

(x TRUE Tilstandsdækning er ¼ = 25 %
A = 3

B = 4

(a>b) FALSK

Finite State Machine Dækning

Finite state-maskinedækning er bestemt den mest komplekse type kodedækningsmetode. Dette er fordi det virker på designets opførsel. I denne dækningsmetode skal du kigge efter, hvor mange tidsspecifikke stater, der besøges, transiteres. Den kontrollerer også, hvor mange sekvenser der er inkluderet i en finite state-maskine.

Hvilken type kodedækning du skal vælge

Dette er helt klart det sværeste svar at give. For at vælge en dækningsmetode skal testeren kontrollere, at

  • kode under test har enkelte eller flere uopdagede defekter
  • omkostningerne ved den potentielle straf
  • omkostninger ved tabt omdømme
  • omkostninger ved tabt salg mv.

Jo højere sandsynligheden er for, at defekter vil forårsage dyre produktionsfejl, jo mere alvorligt dækningsniveau skal du vælge.

Kodedækning vs. funktionel dækning

Kode dækning Funktionel dækning
Kodedækning fortæller dig, hvor godt kildekoden er blevet brugt af din testbænk. Funktionel dækning måler, hvor godt funktionaliteten af ​​designet er blevet dækket af din testbænk.
Brug aldrig en designspecifikation Brug designspecifikation
Udført af udviklere Udført af testere

Kodedækningsværktøjer

Her er en liste over vigtige kodedækningsværktøjer:

Værktøjsnavn Description
Cobertura Det er et dækningsværktøj til åben kildekode. Den måler testdækning ved at instrumentere en kodebase og analysere, hvilke linjer kode der udføres, og hvilke der ikke udføres, når testpakken kører.
Clover Clover reducerer også testtiden ved kun at køre de test, der dækker applikationskoden, som blev ændret siden den forrige build.
DevPartner DevPartner gør det muligt for udviklere at analysere Java kode for kodekvalitet og kompleksitet.
Emma EMMA understøtter klasse-, metode-, linje- og basisblokdækning, aggregeret kildefil, klasse og metodeniveauer.
Kalistick Kalistick er en tredjepartsapplikation, som analyserer koderne med forskellige perspektiver.
CoView og CoAnt Kodningssoftware er et kodedækningsværktøj til metrik, mock-objektoprettelse, kodetestbarhed, sti- og grendækning osv.
Bullseye for C++ BulseyeCoverage er et kodedækningsværktøj til C++ og C.
Sonar Sonar er et åbent kodedækningsværktøj, som hjælper dig med at styre kodekvaliteten.

Fordele og ulemper ved at bruge kodedækning

Fordele ved kodedækning Kode Dækning Ulemper
Nyttigt til at evaluere et kvantitativt mål for kodedækning Selv når en bestemt funktion ikke er implementeret i designet, rapporterer kodedækning stadig 100 % dækning.
Det giver dig mulighed for at oprette ekstra testcases for at øge dækningen Det er ikke muligt at afgøre, om vi har testet alle mulige værdier af en funktion ved hjælp af kodedækning
Det giver dig mulighed for at finde de områder af et program, som ikke udøves af et sæt testcases Kodedækning fortæller heller ikke, hvor meget og hvor godt du har dækket din logik
I det tilfælde, hvor den angivne funktion ikke er implementeret, eller ikke er inkluderet i specifikationen, kan strukturbaserede teknikker ikke finde dette problem.

Resumé

  • Kodedækning er et mål, der beskriver, i hvilken grad programmets kildekode er blevet testet
  • Det hjælper dig med at måle effektiviteten af ​​testimplementering
  • Fem kodedækningsmetoder er 1.) Erklæringsdækning 2.) Tilstandsdækning 3) Filialdækning 4) Toggle Dækning 5) FSM Dækning
  • Udsagnsdækning involverer udførelse af alle de eksekverbare sætninger i kildekoden mindst én gang
  • Beslutningsdækning rapporterer de sande eller falske resultater af hvert boolesk udtryk
  • I filialdækningen testes hvert udfald fra et kodemodul
  • Betinget vil afsløre, hvordan variablerne eller underudtrykkene i den betingede sætning evalueres
  • Finite state-maskinedækning er bestemt den mest komplekse type kodedækningsmetode
  • For at vælge en dækningsmetode skal testeren tjekke omkostningerne ved den potentielle straf, mistet omdømme, mistet salg osv.
  • Kodedækning fortæller dig, hvor godt kildekoden er blevet udøvet af din testbænk, mens funktionel dækning måler, hvor godt funktionaliteten af ​​designet er blevet dækket
  • Cobertura, JTest, Clover, Emma, ​​Kalistick er få vigtige kodedækningsværktøjer
  • Code Coverage giver dig mulighed for at oprette ekstra testcases for at øge dækningen
  • Kodedækning hjælper dig ikke med at afgøre, om vi har testet alle mulige værdier af en funktion