Kodedekningsveiledning: Branch, Statement & Decision Testing
Hva er kodedekning?
Kodedekning er et mål som beskriver graden av kildekoden til programmet er testet. Det er en form for testing av hvite bokser som finner områdene i programmet som ikke utøves av et sett med testtilfeller. Det oppretter også noen testtilfeller for å øke dekningen og bestemme et kvantitativt mål for kodedekning.
I de fleste tilfeller samler kodedekningssystem informasjon om det kjørende programmet. Den kombinerer også det med kildekodeinformasjon for å generere en rapport om testpakkens kodedekning.
Hvorfor bruke kodedekningstesting?
Her er noen hovedgrunner for å bruke kodedekning:
- Det hjelper deg å måle effektiviteten av testimplementering
- Den tilbyr en kvantitativ måling.
- Den definerer i hvilken grad kildekoden er testet.
Metoder for kodedekning
Følgende er viktige kodedekningsmetoder
- Uttalelsesdekning
- Beslutningsdekning
- Filialdekning
- Toggle Dekning
- FSM-dekning
Uttalelsesdekning
Uttalelsesdekning er en hvit boks-testteknikk der alle de kjørbare setningene i kildekoden kjøres minst én gang. Den brukes til å beregne antall utsagn i kildekoden som er utført. Hovedformålet med Statement Coverage er å dekke alle mulige stier, linjer og utsagn i kildekoden.
Uttalelsesdekning brukes til å utlede scenario basert på strukturen til koden som testes.
In Hvit Box Testing, konsentrerer testeren seg om hvordan programvaren fungerer. Med andre ord vil testeren konsentrere seg om den interne driften av kildekoden angående kontrollflytgrafer eller flytskjemaer.
Generelt i enhver programvare, hvis vi ser på kildekoden, vil det være et bredt utvalg av elementer som operatører, funksjoner, looping, eksepsjonelle behandlere, etc. Basert på input til programmet, kan det hende at noen av kodesetningene ikke blir utført . Målet med Statement-dekning er å dekke alle mulige stier, linjer og uttalelser i koden.
La oss forstå dette med et eksempel, hvordan du beregner utsagnsdekning.
Scenario for å beregne erklæringsdekning for gitt kildekode. Her tar vi to forskjellige scenarier for å sjekke prosentandelen av erklæringsdekningen for hvert scenario.
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 = 9Utsagnene merket med gul farge er de som utføres i henhold til scenariet
Antall utførte utsagn = 5, Totalt antall utsagn = 7
Uttalelsesdekning: 5/7 = 71 %
På samme måte vil vi se scenario 2,
Scenario 2:
Hvis A = -3, B = -9
Utsagnene merket med gul farge er de som utføres i henhold til scenariet.
Antall utførte utsagn = 6
Totalt antall utsagn = 7
Uttalelsesdekning: 6/7 = 85 %
Men totalt sett, hvis du ser, er alle utsagnene dekket av begge scenariene. Så vi kan konkludere med at den generelle dekningen er 100 %.
Hva dekkes av erklæringsdekning?
- Ubrukte uttalelser
- Død kode
- Ubrukte grener
- Manglende utsagn
Testing av beslutningsdekning
Beslutningsdekning er en hvit boks-testteknikk som rapporterer sanne eller falske utfall av hvert boolsk uttrykk for kildekoden. Målet med testing av beslutningsdekning 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. Dette er grunnen til at ulike metoder brukes for å rapportere denne beregningen. Disse metodene prioriterer de mest kritiske kombinasjonene. Selv om det ligner på beslutningsdekning, gir det større følsomhet for kontrollflyt.
Eksempel på vedtaksdekning
Tenk på følgende kode-
Demo(int a) {
If (a> 5)
a=a*3
Print (a)
}
Scenario 1:
Verdien av a er 2
Koden uthevet i gult vil bli utført. Her er "Nei"-utfallet av avgjørelsen If (a>5) krysset av.
Beslutningsdekning = 50 %
Scenario 2:
Verdien av a er 6
Koden uthevet i gult vil bli utført. Her er "Ja"-utfallet av avgjørelsen If (a>5) krysset av.
Beslutningsdekning = 50 %
| Testsak | Verdien av A | Produksjon | Beslutningsdekning |
|---|---|---|---|
| 1 | 2 | 2 | 50% |
| 2 | 6 | 18 | 50% |
Testing av grendekning
Filialdekning er en hvit boks-testmetode der hvert utfall fra en kodemodul (utsagn eller loop) testes. Hensikten med filialdekning er å sikre at hver beslutningsbetingelse fra hver filial blir utført minst én gang. Det hjelper å måle brøkdeler av uavhengige kodesegmenter og å finne ut seksjoner som ikke har noen forgreninger.
For eksempel, hvis resultatene er binære, må du teste både sanne og usanne utfall.
Formelen for å beregne grendekning:
Eksempel på filialdekning
For å lære grendekning, la oss vurdere det samme eksemplet som ble brukt tidligere
Tenk på følgende kode-
Demo(int a) {
If (a> 5)
a=a*3
Print (a)
}
Filialdekning vil også vurdere ubetinget filial
| Testsak | Verdien av A | Produksjon | Beslutningsdekning | Filialdekning |
|---|---|---|---|---|
| 1 | 2 | 2 | 50% | 33% |
| 2 | 6 | 18 | 50% | 67% |
Fordeler med filialdekning:
Filialdekning Testing gir følgende fordeler:
- Lar deg validere alle grenene i koden
- Hjelper deg med å sikre at ingen forgrenet fører til unormalt i programmets drift
- Branch-dekningsmetoden fjerner problemer som oppstår på grunn av testing av erklæringsdekning
- Lar deg finne de områdene som ikke er testet av andre testmetoder
- Den lar deg finne et kvantitativt mål for kodedekning
- Grenedekning ignorerer grener inne i de boolske uttrykkene
Tilstandsdekningstesting
Tilstandsdekning eller uttrykksdekning er en testmetode som brukes til å teste og evaluere variablene eller underuttrykkene i den betingede setningen. Målet med tilstandsdekning er å sjekke individuelle utfall for hver logisk tilstand. Tilstandsdekning gir bedre følsomhet for kontrollflyten enn beslutningsdekning. I denne dekningen vurderes kun uttrykk med logiske operander.
For eksempel, hvis et uttrykk har boolske operasjoner som AND, OR, XOR, som indikerer totale muligheter.
Tilstandsdekning gir ingen garanti om full vedtaksdekning.
Formelen for å beregne tilstandsdekning:
Eksempel:
For uttrykket ovenfor har vi 4 mulige kombinasjoner
- TT
- FF
- TF
- FT
Tenk på følgende innspill
| X = 3
Y = 4 |
(x | TRUE | Tilstandsdekning er ¼ = 25 % |
| A = 3
B = 4 |
(a>b) | FALSK |
Finite State Machine Dekning
Finite state maskindekning er absolutt den mest komplekse typen kodedekningsmetode. Dette er fordi det fungerer på oppførselen til designet. I denne dekningsmetoden må du se etter hvor mange tidsspesifikke stater som besøkes, transitt. Den sjekker også hvor mange sekvenser som er inkludert i en endelig tilstandsmaskin.
Hvilken type kodedekning å velge
Dette er absolutt det vanskeligste svaret å gi. For å velge en dekningsmetode, må testeren sjekke at
- koden som testes har én eller flere uoppdagede defekter
- kostnaden for den potensielle straffen
- kostnadene ved tapt omdømme
- kostnader ved tapt salg, etc.
Jo høyere sannsynlighet for at feil vil forårsake kostbare produksjonssvikt, desto strengere er dekningsnivået du må velge.
Kodedekning vs. funksjonell dekning
| Kodedekning | Funksjonell dekning |
|---|---|
| Kodedekningen forteller deg hvor godt kildekoden har blitt brukt av testbenken din. | Funksjonell dekning måler hvor godt funksjonaliteten til designet har blitt dekket av testbenken din. |
| Bruk aldri en designspesifikasjon | Bruk designspesifikasjoner |
| Utført av utviklere | Utført av testere |
Verktøy for kodedekning
Her er en liste over viktige kodedekningsverktøy:
| Verktøyets navn | Tekniske beskrivelser |
|---|---|
| Cobertura | Det er et dekningsverktøy for åpen kildekode. Den måler testdekning ved å instrumentere en kodebase og analysere hvilke linjer med kode som kjøres og hvilke som ikke kjøres når testpakken kjører. |
| Kløver | Clover reduserer også testtiden ved kun å kjøre testene som dekker applikasjonskoden som ble endret siden forrige konstruksjon. |
| DevPartner | DevPartner gjør det mulig for utviklere å analysere Java kode for kodekvalitet og kompleksitet. |
| Emma | EMMA støtter klasse-, metode-, linje- og basisblokkdekning, aggregerte kildefil-, klasse- og metodenivåer. |
| Kalistick | Kalistick er en tredjepartsapplikasjon som analyserer kodene med forskjellige perspektiver. |
| CoView og CoAnt | Kodingsprogramvare er et kodedekningsverktøy for beregninger, mock-objektoppretting, kodetestbarhet, bane- og grendekning, etc. |
| Bullseye for C++ | BulseyeCoverage er et kodedekningsverktøy for C++ og C. |
| Sonar | Sonar er et åpent kodedekningsverktøy som hjelper deg med å administrere kodekvalitet. |
Fordeler og ulemper ved å bruke kodedekning
| Fordeler med kodedekning | Kodedekning Ulemper |
|---|---|
| Nyttig for å evaluere et kvantitativt mål på kodedekning | Selv når en bestemt funksjon ikke er implementert i design, rapporterer kodedekning fortsatt 100 % dekning. |
| Den lar deg lage ekstra testtilfeller for å øke dekningen | Det er ikke mulig å fastslå om vi testet alle mulige verdier av en funksjon ved hjelp av kodedekning |
| Den lar deg finne områdene i et program som ikke utøves av et sett med testtilfeller | Kodedekningen forteller heller ikke hvor mye og hvor godt du har dekket logikken din |
| I tilfellet når den angitte funksjonen ikke er implementert, eller ikke er inkludert i spesifikasjonen, kan ikke strukturbaserte teknikker finne det problemet. |
Sammendrag
- Kodedekning er et mål som beskriver graden av kildekoden til programmet er testet
- Det hjelper deg å måle effektiviteten av testimplementering
- Fem kodedekningsmetoder er 1.) Erklæringsdekning 2.) Tilstandsdekning 3) Bransjedekning 4) Toggle Dekning 5) FSM Dekning
- Uttalelsesdekning innebærer utførelse av alle de kjørbare setningene i kildekoden minst én gang
- Beslutningsdekning rapporterer sanne eller usanne utfall av hvert boolsk uttrykk
- I grendekningen testes hvert utfall fra en kodemodul
- Betinget vil avsløre hvordan variablene eller underuttrykkene i den betingede setningen blir evaluert
- Finite state maskindekning er absolutt den mest komplekse typen kodedekningsmetode
- For å velge en dekningsmetode, må testeren sjekke kostnadene for den potensielle straffen, tapt omdømme, tapt salg, etc.
- Kodedekning forteller deg hvor godt kildekoden har blitt brukt av testbenken din, mens funksjonell dekning måler hvor godt funksjonaliteten til designet har blitt dekket
- Cobertura, JTest, Clover, Emma, Kalistick er noen viktige kodedekningsverktøy
- Kodedekning lar deg lage ekstra testtilfeller for å øke dekningen
- Kodedekning hjelper deg ikke med å avgjøre om vi har testet alle mulige verdier for en funksjon













