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.
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 = 9De 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 %
På samma sätt kommer vi att se scenario 2,
Scenario 2:
Om A = -3, B = -9
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
Uttalandets täckning: 6/7 = 85 %
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 %.
Vad omfattas av Statement Coverage?
- Oanvända uttalanden
- Död kod
- Oanvända grenar
- 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.
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
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
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:
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) }
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:
Exempelvis:
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