Code Dekningsverktøy: Testing av uttalelser, grener og beslutninger

⚡ Smart oppsummering

Code dekning er en hvitboksmåling som rapporterer i hvilken grad kildekoden har blitt brukt av en testsuite, helping Teamene finner uprøvde setninger, grener, betingelser og stier som skjulte feil kan oppta.

  • 🎯 Definisjon: Code dekning kvantifiserer hvor mye av kildekoden testene dine faktisk kjører.
  • 📊 Metoder: Det finnes fem metoder – setning, beslutning, gren, betingelse og dekning av endelig tilstandsmaskin.
  • 🧩 Uttalelse vs. gren: Utdragsdekning sjekker linjer, mens filialdekning sjekker alle beslutningsresultater.
  • 🇧🇷 Code vs. Funksjonell: Code dekningstiltak som ble utøvd, kode; funksjonelle dekningstiltak som dekkes krav.
  • 🛠️ Verktøy: Cobertura, OpenClover, EMMA og Sonar automatiserer målingen av dekning.
  • 🤖 AI-hjelp: AI-verktøy genererer tester og avdekker automatisk uprøvde dekningshull med høy risiko.

Code Dekningsveiledning

Hva er Code Dekning?

Code dekning er et mål som beskriver i hvilken grad kildekoden til et program er testet. Det er én form for testing av hvit boks som finner områdene i et program som ikke utøves av et sett med testtilfeller. Det hjelper også med å lage flere testtilfeller for å øke dekningen og for å bestemme et kvantitativt mål på kodedekningen.

I de fleste tilfeller samler et kodedekningssystem informasjon om det kjørende programmet. Det kombinerer deretter dette med kildekodeinformasjon for å generere en rapport om testsuitens kodedekning.

Hvorfor bruk Code Dekningstesting?

Her er noen hovedgrunner til å bruke kodedekning:

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

Code Dekningsmetoder

Følgende er de viktigste metodene for kodedekning:

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

Uttalelsesdekning

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

Utsagnsdekning brukes til å utlede scenarier basert på strukturen til koden som testes.

Uttalelsesdekning

I hvitbokstesting konsentrerer testeren seg om hvordan programvaren fungerer. Med andre ord konsentrerer testeren seg om kildekodens interne virkemåte når det gjelder kontrollflytgrafer eller flytskjemaer.

Generelt sett i all programvare, hvis du ser på kildekoden, vil det være et bredt utvalg av elementer som operatorer, funksjoner, osv.ping, unntakshåndterere og så videre. Basert på input til programmet, kan det hende at noen av kodesetningene ikke blir utført. Målet med setningsdekning er å dekke alle mulige stier, linjer og setninger i koden.

La oss forstå dette med et eksempel på hvordan man beregner dekningsgrad for kontoutskrifter. Her tar vi to forskjellige scenarioer for å sjekke prosentandelen av dekningsgrad for kontoutskrifter for hvert scenario.

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

Dekningsscenario 1 for uttalelser

Utsagnene merket med gult er de som utføres i henhold til scenarioet. Antall utførte utsagn = 5, totalt antall utsagn = 7, så utsagnsdekning = 5/7 = 71 %.

Scenario 2: Hvis A = -3, B = -9

Dekningsscenario 2 for uttalelser

Utsagnene merket med gult er de som utføres i henhold til scenarioet. Antall utførte utsagn = 6, totalt antall utsagn = 7, så utsagnsdekning = 6/7 = 85 %.

Men totalt sett, hvis du ser det, dekkes alle utsagnene av begge scenariene. Så vi kan konkludere med at den totale utsagnsdekningen er 100 %.

Hva dekkes av erklæringsdekning?

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

Testing av beslutningsdekning

Beslutningsdekning er en hvitboks-testteknikk som rapporterer sanne eller usanne resultater for hvert boolsk uttrykk i kildekoden. Målet med beslutningsdekningstesting 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. Derfor brukes ulike metoder for å rapportere denne målingen. Disse metodene prioriterer de mest kritiske kombinasjonene. Selv om den ligner på grendekning, gir den større følsomhet for kontrollflyt.

Testing av beslutningsdekning

Eksempel på beslutningsdekning

Vurder følgende kode:

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

Scenario 1: Verdien av a er 2. Utfallet av beslutningen er «nei». Hvis (a > 5) er avkrysset, er beslutningsdekningen 50 %.

Scenario 2: Verdien av a er 6. «Ja»-utfallet av avgjørelsen. Hvis (a > 5) er avkrysset, er avgjørelsesdekningen = 50 %.

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

Testing av grendekning

Filialdekning er en testmetode i hvit boks der hvert utfall fra en kodemodul (setning eller løkke) testes. Formålet med grendekning er å sikre at hver beslutningsbetingelse fra hver gren utføres minst én gang. Det hjelper med å måle brøkdeler av uavhengige kodesegmenter og finne ut seksjoner som ikke har noen grener.

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

Formelen for å beregne grendekning:

Formel for filialdekning

Eksempel på filialdekning

For å lære om filialdekning, vurder det samme eksemplet som ble brukt tidligere. Filialdekning vil også vurdere den ubetingede filialen.

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

Fordeler med filialdekning:

  • Lar deg validere alle grenene i koden.
  • Hjelper deg med å sikre at ingen grener fører til unormaliteter i programmets drift.
  • Fjerner problemer som oppstår på grunn av testing av dekning av utsagn.
  • Lar deg finne områder som ikke testes med andre testmetoder.
  • Lar deg finne et kvantitativt mål på kodedekning.
  • Grendekning ignorerer grener inne i boolske uttrykk.

Tilstandsdekningstesting

Tilstandsdekning, eller uttrykksdekning, er en testmetode som brukes til å teste og evaluere variablene eller deluttrykkene i en betinget setning. Målet med betingelsesdekning er å sjekke individuelle utfall for hver logiske betingelse. Betingelsesdekning gir bedre følsomhet for kontrollflyten enn beslutningsdekning. I denne dekningen vurderes bare uttrykk med logiske operander.

Hvis for eksempel et uttrykk har boolske operasjoner som AND, OR eller XOR, indikerer det de totale mulighetene. Betingelsesdekning garanterer ikke full beslutningsdekning.

Formelen for å beregne tilstandsdekning:

Formel for tilstandsdekning

For et uttrykk med to operander finnes det fire mulige kombinasjoner: TT, FF, TF og FT. Tenk på inputen X=3, Y=4 (x b) USANN, som gir en tilstandsdekning på 1/4 = 25 %.

Finite State Machine Dekning

Dekning av endelige tilstandsmaskiner er absolutt den mest komplekse typen kodedekningsmetode. Dette er fordi den opererer på designets oppførsel. I denne dekningsmetoden må du se på hvor mange ganger bestemte tilstander besøkes eller passeres. Den sjekker også hvor mange sekvenser som er inkludert i en endelig tilstandsmaskin.

Hvilken type Code Dekning å velge

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

  • koden som testes har én eller flere uoppdagede feil,
  • kostnaden av den potensielle straffen,
  • kostnaden av tapt omdømme,
  • kostnaden for tapt salg, og så videre.

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

Code Dekning vs. funksjonell dekning

Code Dekning Funksjonell dekning
Forteller deg hvor godt kildekoden har blitt brukt av testbenken din. Måler hvor godt funksjonaliteten til designet har blitt dekket av testbenken din.
Bruker aldri en designspesifikasjon. Bruker en designspesifikasjon.
Gjort av utviklere. Utført av testere.

Code Dekningsverktøy

Her er en liste over viktige verktøy for kodedekning:

Verktøyets navn Tekniske beskrivelser
Cobertura Et verktøy for dekning av åpen kildekode. Det måler testdekning ved å instrumentere en kodebase og analysere hvilke kodelinjer som kjøres og hvilke som ikke kjøres når testpakken kjører.
Kløver Kløver (OpenClover) reduserer også testtiden ved kun å kjøre testene som dekker applikasjonskoden som er endret siden forrige versjon.
DevPartner DevPartner gjør det mulig for utviklere å analysere Java kode for kodekvalitet og kompleksitet.
Emma EMMA støtter klasse-, metode-, linje- og grunnleggende blokkdekning, aggregert på kildefil-, klasse- og metodenivå.
Kalistick Kalistick er et tredjepartsprogram som analyserer koden fra forskjellige perspektiver.
CoView og CoAnt Et kodedekningverktøy for metrikk, oppretting av simulerte objekter, kodetestbarhet, sti- og grendekning og mer.
Bullseye for C++ BullseyeCoverage er et kodedekningverktøy for C++ og C.
Sonar Sonar er et verktøy for åpen kodedekning som hjelper deg med å administrere kodekvalitet.

Fordeler og ulemper ved bruk Code Dekning

Fordeler Ulemper
Nyttig for å evaluere et kvantitativt mål på kodedekning. Selv når en spesifikk funksjon ikke er implementert i designet, rapporterer kodedekningen fortsatt 100 % dekning.
Lar deg opprette ekstra testtilfeller for å øke dekningen. Det er ikke mulig å avgjøre om alle mulige verdier for en funksjon ble testet ved hjelp av kodedekning.
Lar deg finne områdene i et program som ikke utøves av et sett med testtilfeller. Code Dekning forteller ikke hvor mye og hvor godt du har dekket logikken din.

Spørsmål og svar

Mange team har som mål å nå 70 til 80 % i praksis. Å nå 100 % er sjelden kostnadseffektivt. Fokuser på å dekke kritisk logikk med høy risiko i stedet for å jage ett enkelt tall over hele kodebasen.

Nei. Full dekning beviser at hver linje ble kjørt, ikke at alle input, verdier eller krav ble validert. Logiske feil og manglende funksjoner kan fortsatt passere uoppdaget, så dekning utfyller snarere enn erstatter et godt testdesign.

Code dekning måler hvor mye kildekode som kjøres under testing. Testdekningen er bredere, trachvor godt tester imøtekommer krav, funksjoner og risikoer. Code dekning er ett innspill i den totale testdekningen.

Nei. Du kan oppnå 100 % setningsdekning uten å teste grener, for eksempel en manglende ellers-sti. Gren-(beslutnings)dekning er sterkere fordi den omfatter setningsdekning og utøver alle utfall.

AI analyserer kildekode og eksisterende tester for å finne utprøvde, høyrisiko-veier, og foreslår eller genererer deretter nye tilfeller. Maskinlæring prioriterer også hvilke tester som skal kjøres, noe som forkorter tilbakemeldinger samtidig som det holderping høy dekning.

Ja. AI-verktøy som Diffblue Cover skanner kode og skriver autonomt enhetstester for udekket logikk. De retter seg mot risikable grener og forhold, og øker dekningen med langt mindre manuell innsats.

OpenClover måler dekning av setninger, grener og metoder og samler inn over 20 målinger. Cobertura, EMMA, og JaCoCo finnes det andre mye brukte gratisalternativer for Java prosjekter.

Modifisert betingelse/beslutningsdekning krever at hver betingelse i en beslutning påvirker resultatet uavhengig. Den er strengere enn bransjedekning og er pålagt for sikkerhetskritisk programvare, som for eksempel avionikk, i henhold til DO-178C-standarden.

Oppsummer dette innlegget med: