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.
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 = 9Udsagn 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 %
Ligeledes vil vi se scenario 2,
Scenario 2:
Hvis A = -3, B = -9
Udsagn markeret med gul farve er dem, der udføres i henhold til scenariet.
Antal udførte udsagn = 6
Samlet antal udsagn = 7
Opgørelsesdækning: 6/7 = 85 %
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 %.
Hvad er dækket af erklæringsdækning?
- Ubrugte erklæringer
- Død kode
- Ubrugte grene
- 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.
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
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
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:
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) }
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:
Eksempel:
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