Handledning för kodtäckning: Branch, Statement & Decision Testing

Vad är kodtäckning?

Kodtäckning är ett mått som beskriver graden av vilken källkoden till programmet har testats. Det är en form av white box-testning som hittar de områden i programmet som inte utövas av en uppsättning testfall. Det skapar också några testfall för att öka täckningen och bestämma ett kvantitativt mått på kodtäckning.

I de flesta fall samlar kodtäckningssystemet information om det pågående programmet. Den kombinerar också det med källkodsinformation för att generera en rapport om testsvitens kodtäckning.

Varför använda kodtäckningstestning?

Här är några främsta anledningar till att använda kodtäckning:

  • Det hjälper dig att mäta effektiviteten i testimplementeringen
  • Den erbjuder en kvantitativ mätning.
  • Den definierar i vilken grad källkoden har testats.

Metoder för kodtäckning

Följande är viktiga kodtäckningsmetoder

  • Utlåtande täckning
  • Beslutstäckning
  • Filialtäckning
  • Toggle Täckning
  • FSM täckning

Utlåtande täckning

Utlåtande täckning är en white box-testteknik där alla körbara satser i källkoden exekveras minst en gång. Den används för att beräkna antalet satser i källkoden som har exekveras. Huvudsyftet med Statement Coverage är att täcka alla möjliga sökvägar, rader och uttalanden i källkoden.

Uttalandetäckning används för att härleda scenario baserat på strukturen för koden som testas.

Utlåtande täckning

In White Box Testning, koncentrerar testaren på hur programvaran fungerar. Med andra ord kommer testaren att koncentrera sig på den interna bearbetningen av källkoden när det gäller kontrollflödesgrafer eller flödesscheman.

Generellt i vilken programvara som helst, om vi tittar på källkoden, kommer det att finnas en mängd olika element som operatörer, funktioner, looping, exceptionella hanterare, etc. Baserat på indata till programmet kanske vissa av kodsatserna inte körs . Målet med Statement-täckning är att täcka alla möjliga sökvägar, rader och uttalanden i koden.

Låt oss förstå detta med ett exempel, hur man beräknar utsagotäckning.

Scenario för att beräkna Statement Coverage för given källkod. Här tar vi två olika scenarier för att kontrollera procentandelen av uttalandets täckning för varje scenario.

Källkod:

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:

Om A = 3, B = 9

Utlåtande täckning

De uttalanden som är markerade med gul färg är de som exekveras enligt scenariot

Antal körda satser = 5, Totalt antal satser = 7

Uttalandets täckning: 5/7 = 71 %

Utlåtande täckning

På samma sätt kommer vi att se scenario 2,

Scenario 2:

Om A = -3, B = -9

Utlåtande täckning

De uttalanden som är markerade med gul färg är de som exekveras enligt scenariot.

Antal körda satser = 6

Totalt antal påståenden = 7

Utlåtande täckning

Uttalandets täckning: 6/7 = 85 %

Utlåtande täckning

Men totalt sett, om du ser, omfattas alla påståenden av båda scenarierna. Så vi kan dra slutsatsen att den övergripande täckningen är 100 %.

Utlåtande täckning

Vad omfattas av Statement Coverage?

  1. Oanvända uttalanden
  2. Död kod
  3. Oanvända grenar
  4. Saknade uttalanden

Beslutstäckningstestning

Beslutstäckning är en white box-testteknik som rapporterar de sanna eller falska resultaten av varje booleskt uttryck av källkoden. Målet med testning av beslutstäckning är att täcka och validera all tillgänglig källkod genom att kontrollera och säkerställa att varje gren av varje möjlig beslutspunkt exekveras minst en gång.

I denna täckningstyp kan uttryck bli komplexa, vilket gör det utmanande att uppnå 100 % täckning. Det är därför olika metoder används för att rapportera detta mått. Dessa metoder prioriterar de mest kritiska kombinationerna. Även om det liknar beslutstäckning, ger det större känslighet för kontrollflöde.

Beslutstäckningstestning

Exempel på beslutstäckning

Tänk på följande kod-

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

Scenario 1:

Värdet på a är 2

Beslutstäckningstestning

Den gulmarkerade koden kommer att exekveras. Här är "Nej"-resultatet av beslutet If (a>5) markerat.

Beslutstäckning = 50 %

Scenario 2:

Värdet på a är 6

Beslutstäckningstestning

Den gulmarkerade koden kommer att exekveras. Här är "Ja"-resultatet av beslutet If (a>5) markerat.

Beslutstäckning = 50 %

Testfall Värdet på A Produktion Beslutstäckning
1 2 2 50%
2 6 18 50%

Provning av grentäckning

Filialtäckning är en white box-testmetod där varje resultat från en kodmodul (påstående eller loop) testas. Syftet med filialtäckning är att säkerställa att varje beslutsvillkor från varje filial verkställs minst en gång. Det hjälper till att mäta bråkdelar av oberoende kodsegment och att ta reda på sektioner som saknar grenar.

Till exempel, om utfallen är binära, måste du testa både Sanna och Falska utfall.

Formeln för att beräkna filialtäckning:

Provning av grentäckning

Exempel på filialtäckning

För att lära oss grentäckning, låt oss överväga samma exempel som användes tidigare

Tänk på följande kod-

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

Provning av grentäckning

Filialtäckning kommer också att överväga ovillkorlig filial

Testfall Värdet på A Produktion Beslutstäckning Filialtäckning
1 2 2 50% 33%
2 6 18 50% 67%

Fördelar med filialtäckning:

Branschtäckning Testning erbjuder följande fördelar:

  • Låter dig validera alla grenar i koden
  • Hjälper dig att säkerställa att inga förgrenade leder till någon avvikelse i programmets funktion
  • Filialtäckningsmetoden tar bort problem som inträffar på grund av testning av uttalandetäckning
  • Låter dig hitta de områden som inte testas med andra testmetoder
  • Det låter dig hitta ett kvantitativt mått på kodtäckning
  • Grentäckning ignorerar grenar inuti de booleska uttrycken

Tillståndstäckningstestning

Tillståndstäckning eller uttryckstäckning är en testmetod som används för att testa och utvärdera variablerna eller underuttrycken i det villkorliga uttalandet. Målet med tillståndstäckning är att kontrollera individuella utfall för varje logiskt tillstånd. Tillståndstäckning ger bättre känslighet för kontrollflödet än beslutstäckning. I denna bevakning beaktas endast uttryck med logiska operander.

Till exempel, om ett uttryck har booleska operationer som AND, OR, XOR, vilket indikerar totala möjligheter.

Villkorstäckning ger ingen garanti om full beslutstäckning.

Formeln för att beräkna tillståndstäckning:

Tillståndstäckningstestning

Exempelvis:

Tillståndstäckningstestning

För uttrycket ovan har vi 4 möjliga kombinationer

  • TT
  • FF
  • TF
  • FT

Tänk på följande input

X = 3

Y = 4

(x SANN Skicktäckningen är ¼ = 25 %
A = 3

B = 4

(a>b) FALSK

Täckning för ändlig tillståndsmaskin

Finita state-maskintäckning är förvisso den mest komplexa typen av kodtäckningsmetod. Detta beror på att det fungerar på designens beteende. I den här täckningsmetoden måste du leta efter hur många tidsspecifika stater som besöks, transiteras. Den kontrollerar också hur många sekvenser som ingår i en finita tillståndsmaskin.

Vilken typ av kodtäckning att välja

Detta är definitivt det svåraste svaret att ge. För att välja en täckningsmetod måste testaren kontrollera att

  • kod som testas har enstaka eller flera oupptäckta defekter
  • kostnaden för den potentiella straffavgiften
  • kostnaden för förlorat rykte
  • kostnad för förlorad försäljning etc.

Ju högre sannolikhet är att defekter kommer att orsaka kostsamma produktionsfel, desto allvarligare täckningsnivå måste du välja.

Kodtäckning kontra funktionell täckning

Kodtäckning Funktionell täckning
Kodtäckning berättar hur väl källkoden har utövats av din testbänk. Funktionell täckning mäter hur väl designens funktionalitet har täckts av din testbänk.
Använd aldrig en designspecifikation Använd designspecifikation
Gjort av utvecklare Gjort av testare

Verktyg för kodtäckning

Här är en lista över viktiga kodtäckningsverktyg:

Verktygets namn Description
Cobertura Det är ett verktyg för täckning av öppen källkod. Den mäter testtäckning genom att instrumentera en kodbas och analysera vilka kodrader som körs och vilka som inte exekveras när testsviten körs.
Clover Clover minskar också testtiden genom att endast köra de tester som täcker applikationskoden som har ändrats sedan föregående konstruktion.
DevPartner DevPartner gör det möjligt för utvecklare att analysera Java kod för kodkvalitet och komplexitet.
emma EMMA stöder klass-, metod-, linje- och basblocktäckning, aggregerad källfil, klass och metodnivåer.
Kalistick Kalistick är en tredjepartsapplikation som analyserar koderna med olika perspektiv.
CoView och CoAnt Coding Software är ett kodtäckningsverktyg för mätvärden, skenobjektskapande, kodtestbarhet, ban- och grentäckning, etc.
Bullseye för C++ BulseyeCoverage är ett kodtäckningsverktyg för C++ och C.
Ekolod Sonar är ett verktyg för öppen kodtäckning som hjälper dig att hantera kodkvalitet.

Fördelar och nackdelar med att använda kodtäckning

Fördelar med kodtäckning Kodtäckning Nackdelar
Till hjälp för att utvärdera ett kvantitativt mått på kodtäckning Även när någon specifik funktion inte är implementerad i designen, rapporterar kodtäckning fortfarande 100 % täckning.
Det låter dig skapa extra testfall för att öka täckningen Det är inte möjligt att avgöra om vi testat alla möjliga värden på en funktion med hjälp av kodtäckning
Det låter dig hitta de områden i ett program som inte utövas av en uppsättning testfall Kodtäckning säger inte heller hur mycket och hur väl du har täckt din logik
I fallet när den angivna funktionen inte har implementerats eller inte ingår i specifikationen, kan strukturbaserade tekniker inte hitta det problemet.

Sammanfattning

  • Kodtäckning är ett mått som beskriver graden av vilken källkoden till programmet har testats
  • Det hjälper dig att mäta effektiviteten i testimplementeringen
  • Fem kodtäckningsmetoder är 1.) Utlåtandetäckning 2.) Tillståndstäckning 3) Filialtäckning 4) Toggle Täckning 5) FSM Täckning
  • Uttalandetäckning involverar exekvering av alla körbara uttalanden i källkoden minst en gång
  • Beslutstäckning rapporterar sanna eller falska utfall för varje booleskt uttryck
  • I grentäckningen testas varje utfall från en kodmodul
  • Villkorlig kommer att avslöja hur variablerna eller underuttrycken i det villkorliga uttalandet utvärderas
  • Finita state-maskintäckning är förvisso den mest komplexa typen av kodtäckningsmetod
  • För att välja en täckningsmetod måste testaren kontrollera kostnaden för den potentiella straffavgiften, förlorat rykte, förlorad försäljning, etc.
  • Kodtäckning talar om hur väl källkoden har utövats av din testbänk medan funktionell täckning mäter hur väl designens funktionalitet har täckts
  • Cobertura, JTest, Clover, Emma, ​​Kalistick är några viktiga kodtäckningsverktyg
  • Code Coverage låter dig skapa extra testfall för att öka täckningen
  • Kodtäckning hjälper dig inte att avgöra om vi testade alla möjliga värden för en funktion