Code Dækningsværktøj: Test af erklæringer, grene og beslutninger
⚡ Smart opsummering
Code dækning er en white-box-måling, der rapporterer i hvilken grad kildekode er blevet anvendt af en testsuite, helping Teams lokaliserer utestede udsagn, grene, betingelser og stier, som skjulte defekter kan optage.

Hvad er Code Dækning?
Code dækning er et mål, der beskriver i hvilken grad et programs kildekode er blevet testet. Det er én form for hvid boks test som finder de områder af et program, der ikke udøves af et sæt testcases. Det hjælper også med at oprette yderligere testcases for at øge dækningen og bestemme et kvantitativt mål for kodedækningen.
I de fleste tilfælde indsamler et kodedækningssystem oplysninger om det kørende program. Det kombinerer derefter disse oplysninger med kildekodeoplysninger for at generere en rapport om testpakkens kodedækning.
Hvorfor brug Code Dækningstest?
Her er nogle hovedårsager til at bruge kodedækning:
- Det hjælper dig med at måle effektiviteten af testimplementeringen.
- Den tilbyder en kvantitativ måling af testning.
- Det definerer i hvilken grad kildekoden er blevet testet.
Code Dækningsmetoder
Følgende er de vigtigste metoder til kodedækning:
- 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 eksekverbare sætninger i kildekoden udføres mindst én gang. Den bruges til at beregne antallet af sætninger i kildekoden, der er blevet udført. Hovedformålet med Statement Coverage er at dække alle mulige stier, linjer og sætninger i kildekoden.
Statement coverage bruges til at udlede scenarier baseret på strukturen af den testede kode.
I white box-testning koncentrerer testeren sig om, hvordan softwaren fungerer. Med andre ord koncentrerer testeren sig om kildekodens interne funktion i forhold til kontrolflowgrafer eller flowdiagrammer.
Generelt i al software, hvis man ser på kildekoden, vil der være en bred vifte af elementer som operatorer, funktioner osv.ping, undtagelseshåndterere osv. Baseret på input til programmet, kan nogle af kodesætningerne muligvis ikke udføres. Målet med Statement coverage er at dække alle mulige stier, linjer og sætninger i koden.
Lad os forstå dette med et eksempel på, hvordan man beregner dækningsgraden for en kontoudtog. Her tager vi to forskellige scenarier for at kontrollere procentdelen af dækningsgraden for hvert scenarie.
Kilde 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
Scenario 1: Hvis A = 3, B = 9
De udsagn markeret med gult er dem, der udføres i henhold til scenariet. Antal udførte udsagn = 5, Samlet antal udsagn = 7, så udsagnsdækning = 5/7 = 71 %.
Scenario 2: Hvis A = -3, B = -9
De udsagn markeret med gult er dem, der udføres i henhold til scenariet. Antal udførte udsagn = 6, Samlet antal udsagn = 7, så udsagnsdækning = 6/7 = 85 %.
Men overordnet set, hvis du ser det, 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
- Dead Code
- Ubrugte grene
- Manglende erklæringer
Test af beslutningsdækning
Beslutningsdækning er en white box-testteknik, der rapporterer de sande eller falske resultater af hvert boolsk udtryk i kildekoden. Målet med beslutningsdækningstestning er at dække og validere al tilgængelig kildekode ved at kontrollere og sikre, at hver gren af ethvert muligt beslutningspunkt udføres mindst én gang.
I denne dækningstype kan udtryk blive komplekse, hvilket gør det udfordrende at opnå 100 % dækning. Derfor bruges forskellige metoder til at rapportere denne metrik. Disse metoder prioriterer de mest kritiske kombinationer. Selvom den ligner forgreningsdækning, giver den 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. Udfaldet af beslutningen er "nej". Hvis (a>5) er markeret, er beslutningsdækningen = 50 %.
Scenario 2: Værdien af a er 6. "Ja"-resultatet for beslutningen. Hvis (a>5) er markeret, er beslutningsdækningen = 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 white box-testmetode, hvor hvert resultat fra et kodemodul (sætning eller løkke) testes. Formålet med branch coverage er at sikre, at hver beslutningsbetingelse fra hver branch udføres mindst én gang. Det hjælper med at måle brøkdele af uafhængige kodesegmenter og finde sektioner, der ikke har nogen branches.
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 om filialdækning, overvej det samme eksempel som brugt tidligere. Filialdækning vil også tage den ubetingede filial i betragtning.
| 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:
- Giver dig mulighed for at validere alle grene i koden.
- Hjælper dig med at sikre, at ingen forgreninger fører til nogen unormaliteter i programmets drift.
- Fjerner problemer, der opstår på grund af test af dækningsgrad for udsagn.
- Giver dig mulighed for at finde områder, der ikke er testet med andre testmetoder.
- Giver dig mulighed for at finde et kvantitativt mål for kodedækning.
- Grendækning ignorerer grene i booleske udtryk.
Tilstandsdækningstest
Tilstandsdækning, eller udtryksdækning, er en testmetode, der bruges til at teste og evaluere variablerne eller underudtrykkene i en betinget sætning. Målet med betingelsesdækning er at kontrollere individuelle resultater for hver logisk betingelse. Betingelsesdækning giver bedre følsomhed over for kontrolflowet end beslutningsdækning. I denne dækning tages kun udtryk med logiske operander i betragtning.
Hvis et udtryk for eksempel har boolske operationer som AND, OR eller XOR, angiver det de samlede muligheder. Betingelsesdækning garanterer ikke fuld beslutningsdækning.
Formlen til at beregne tilstandsdækning:
For et udtryk med to operander er der fire mulige kombinationer: TT, FF, TF og FT. Betragt inputtet X=3, Y=4 (x b) FALSK, hvilket giver en betingelsesdækning på 1/4 = 25%.
Finite State Machine Dækning
Finite state machine coverage er helt sikkert den mest komplekse type kodedækningsmetode. Dette skyldes, at den påvirker designets opførsel. I denne dækningsmetode skal man se på, hvor mange gange specifikke tilstande besøges eller passeres. Den kontrollerer også, hvor mange sekvenser der er inkluderet i en finite state machine.
Hvilken type Code Dækning at vælge
Dette er helt sikkert det sværeste svar at give. For at vælge en dækningsmetode skal testeren kontrollere, om:
- koden under test har en eller flere uopdagede defekter,
- omkostningerne ved den potentielle bøde,
- omkostningerne ved tabt omdømme,
- omkostninger ved tabt salg og så videre.
Jo højere sandsynligheden er for, at defekter vil forårsage dyre produktionsfejl, jo mere alvorligt dækningsniveau skal du vælge.
Code Dækning vs. funktionel dækning
| Code Dækning | Funktionel dækning |
|---|---|
| Fortæller dig, hvor godt kildekoden er blevet brugt af din testbænk. | Måler, hvor godt designets funktionalitet er blevet dækket af din testbænk. |
| Bruger aldrig en designspecifikation. | Bruger en designspecifikation. |
| Udført af udviklere. | Udført af testere. |
Code Dækningsværktøjer
Her er en liste over vigtige værktøjer til kodedækning:
| Værktøjsnavn | Beskrivelse |
|---|---|
| Cobertura | Et værktøj til dækning af open source-kode. Det måler testdækning ved at instrumentere en kodebase og analysere, hvilke kodelinjer der udføres, og hvilke der ikke gør, når testsuiten kører. |
| Clover | Kløver (OpenClover) reducerer også testtiden ved kun at køre de tests, der dækker den applikationskode, der er æ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 grundlæggende blokdækning, aggregeret på kildefil-, klasse- og metodeniveau. |
| Kalistick | Kalistick er en tredjepartsapplikation, der analyserer koden fra forskellige perspektiver. |
| CoView og CoAnt | Et kodedækningsværktøj til metrikker, oprettelse af mock-objekter, kodetestbarhed, sti- og branch-dækning og mere. |
| Bullseye for C++ | BullseyeCoverage er et kodedækningsværktøj til C++ og C. |
| Fiskefinder | Sonar er et værktøj til åben kodedækning, der hjælper dig med at styre kodekvalitet. |
Fordele og ulemper ved at bruge Code Dækning
| Fordele | Ulemper |
|---|---|
| Nyttigt til at evaluere et kvantitativt mål for kodedækning. | Selv når en specifik funktion ikke er implementeret i designet, rapporterer kodedækningen stadig 100% dækning. |
| Giver dig mulighed for at oprette ekstra testsager for at øge dækningen. | Det er ikke muligt at afgøre, om alle mulige værdier for en funktion blev testet ved hjælp af kodedækning. |
| Giver dig mulighed for at finde de områder af et program, der ikke udføres af et sæt testcases. | Code Dækningen fortæller ikke, hvor meget og hvor godt du har dækket din logik. |






