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.

  • 🎯 Definition: Code Dækning kvantificerer, hvor meget af kildekoden dine tests rent faktisk udfører.
  • 📊 Metoder: Der findes fem metoder - erklæring, beslutning, branch, betingelse og finite state machine coverage.
  • 🧩 Erklæring vs. gren: Opgørelsesdækning kontrollerer linjer, mens filialdækning kontrollerer resultatet af alle beslutninger.
  • ⚖️ Code vs. Funktionel: Code kode for udnyttede dækningsforanstaltninger; funktionelle dækningsforanstaltninger omfattet af krav.
  • 🛠️ Værktøjer: Cobertura, OpenClover, EMMA og Sonar automatiserer målingen af ​​dækning.
  • 🤖 AI Assistance: AI-værktøjer genererer tests og afdækker automatisk utestede, højrisikodækningshuller.

Code Dækningsvejledning

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.

Erklæringsdækning

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

Scenarie 1 for dækning af udsagn

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

Scenarie 2 for dækning af udsagn

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?

  1. Ubrugte erklæringer
  2. Dead Code
  3. Ubrugte grene
  4. 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.

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. 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:

Formel for 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:

Formel for dækning af tilstand

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.

Ofte Stillede Spørgsmål

Mange teams sigter mod 70 til 80% som et praktisk mål. At nå 100% er sjældent omkostningseffektivt. Fokuser på at dække kritisk, højrisikologik i stedet for at jagte et enkelt tal på tværs af hele kodebasen.

Nej. Fuld dækning beviser, at hver linje blev kørt, ikke at hvert input, hver værdi eller hvert krav blev valideret. Logiske fejl og manglende funktioner kan stadig passere uopdaget, så dækning supplerer snarere end erstatter et godt testdesign.

Code Dækning måler, hvor meget kildekode der udføres under testning. Testdækning er bredere, trachvor godt tests imødekommer krav, funktioner og risici. Code Dækning er ét input til den samlede testdækning.

Nej. Du kan opnå 100% dækning af statements, mens du lader branches være utestede, f.eks. en manglende else-sti. Branch (beslutnings-) dækning er stærkere, fordi den omfatter statement coverage og udøver alle resultater.

AI analyserer kildekode og eksisterende tests for at identificere utestede, højrisiko-stier og foreslår eller genererer derefter nye cases. Maskinlæring prioriterer også, hvilke tests der skal køres, hvilket forkorter feedbacken, samtidig med at den holder...ping høj dækning.

Ja. AI-værktøjer som Diffblue Cover scanner kode og skriver autonomt enhedstests for afdækket logik. De er målrettet mod risikable grene og tilstande og øger dækningen med langt mindre manuel indsats.

OpenClover måler dækning af statements, branches og methods og indsamler mere end 20 metrikker. Cobertura, EMMA, og JaCoCo er andre udbredte gratis muligheder for Java projekter.

Modificeret betingelse/beslutningsdækning kræver, at hver betingelse i en beslutning uafhængigt påvirker resultatet. Den er strengere end branch-dækning og er påkrævet for sikkerhedskritisk software, såsom flyelektronik, i henhold til DO-178C-standarden.

Opsummer dette indlæg med: