Vad är kodtäckning?
Kodtäckning är ett mått som beskriver i vilken grad källkoden för programmet har testats. Det är en form av vitlåda-testning som finner att områdena i programmet 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äckningen.
I de flesta fall samlar kodtäckningssystemet information om det pågående programmet. Den kombinerar också den med källkodsinformation för att generera en rapport om testsvitens kodtäckning.
I den här handledningen lär du dig-
- Vad är kodtäckning?
- Varför använda kodtäckning?
- Metoder för kodtäckning
- Uttalande täckning
- Beslutstäckning
- Filialtäckning
- Skyddstäckning
- Ändlig maskintäckning
- Vilken typ av kodtäckning du ska välja
- Kodtäckning kontra funktionell täckning
- Verktyg för kodtäckning
- Fördelar och nackdelar med att använda kodtäckning
Varför använda kodtäckning?
Här är några främsta skäl för att använda kodtäckning:
- Det hjälper dig att mäta effektiviteten i testimplementeringen
- Det 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
- Uttalande täckning
- Beslutstäckning
- Filialtäckning
- Växla täckning
- FSM-täckning
Uttalande täckning
Statement Coverage är en testningsteknik för vitlåda där alla körbara uttalanden i källkoden körs minst en gång. Den används för beräkning av antalet uttalanden i källkoden som har utförts. Huvudsyftet med Statement Coverage är att täcka alla möjliga banor, rader och uttalanden i källkoden.
Uttalningstäckning används för att härleda scenario baserat på strukturen för koden som testas.
I White Box Testing koncentrerar testaren sig på hur programvaran fungerar. Med andra ord kommer testaren att koncentrera sig på det interna arbetet med källkoden beträffande kontrollflödesdiagram eller flödesscheman.
Generellt i någon programvara, 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å inmatningen till programmet kanske vissa kodsatser inte körs . Målet med uttalandets täckning är att täcka alla möjliga vägar, linjer och uttalanden i koden.
Låt oss förstå detta med ett exempel, hur man beräknar uttalandetäckning.
Scenario för att beräkna uttalandetäckning för given källkod. Här tar vi två olika scenarier för att kontrollera procentsatsen för uttalande för varje scenario.
Källkod:
Utskrifter (int a, int b) {------------ Printsum är en funktionint-resultat = a + b;Om (resultat> 0)Skriv ut ("Positivt", resultat)AnnanSkriv ut ("Negativt", resultat)} ----------- Slut på källkoden
Scenario 1:
Om A = 3, B = 9
Uttalanden markerade i gul färg är de som utförs enligt scenariot
Antal utförda uttalanden = 5, Totalt antal uttalanden = 7
Uttalningstäckning: 5/7 = 71%
På samma sätt ser vi scenario 2,
Scenario 2:
Om A = -3 är B = -9
Uttalanden markerade i gul färg är de som utförs enligt scenariot.
Antal utförda uttalanden = 6
Totalt antal uttalanden = 7
Uttalningstäckning: 6/7 = 85%
Men totalt sett täcks alla uttalanden av det andra scenariot. Så vi kan dra slutsatsen att den totala uttalandetäckningen är 100%.
Vad täcks av uttalandetäckningen?
- Oanvända uttalanden
- Död kod
- Oanvända grenar
- Saknade uttalanden
Beslutstäckning
Beslutstäckning är en testningsteknik för vita rutor som rapporterar de verkliga eller falska resultaten för varje booleskt uttryck av källkoden. Målet med beslutstäckningstestning är att täcka och validera all tillgänglig källkod genom att kontrollera och se till att varje gren av varje möjlig beslutspunkt körs minst en gång.
I denna täckning kan uttryck ibland bli komplicerade. Därför är det mycket svårt att uppnå 100% täckning. Det är därför det finns många olika metoder för att rapportera detta mått. Alla dessa metoder fokuserar på att täcka de viktigaste kombinationerna. Det liknar väldigt mycket beslutstäckning, men det ger bättre känslighet för kontrollflödet.
Exempel på beslutstäckning
Tänk på följande kod-
Demo (int a) {Om (a> 5)a = a * 3Skriv ut (a)}
Scenario 1:
Värdet på a är 2
Koden markerad med gult kommer att köras. Här är "Nej" resultatet av beslutet Om (a> 5) är markerat.
Beslutstäckning = 50%
Scenario 2:
Värdet på a är 6
Koden markerad med gult kommer att köras. Här är "Ja" resultatet av beslutet Om (a> 5) är markerat.
Beslutstäckning = 50%
Testfall | Värdet av A | Produktion | Beslutstäckning |
1 | 2 | 2 | 50% |
2 | 6 | 18 | 50% |
Filialtäckning
Branch Coverage är en testlåda för vitlåda där varje resultat från en kodmodul (uttalande eller slinga) testas. Syftet med filialtäckningen är att säkerställa att varje beslutsvillkor från varje filial utförs minst en gång. Det hjälper till att mäta bråkdelar av oberoende kodsegment och ta reda på sektioner utan grenar.
Om till exempel resultaten är binära måste du testa både sanna och falska resultat.
Formeln för att beräkna filialtäckning:
Exempel på filialtäckning
För att lära oss filialtäckning, låt oss överväga samma exempel som användes tidigare
Tänk på följande kod
Demo (int a) {Om (a> 5)a = a * 3Skriv ut (a)}
Filialtäckning kommer också att betraktas som villkorslös gren
Testfall | Värdet av A | Produktion | Beslutstäckning | Filialtäckning |
1 | 2 | 2 | 50% | 33% |
2 | 6 | 18 | 50% | 67% |
Fördelar med filialtäckning:
Filialtäckning Testning erbjuder följande fördelar:
- Låter dig validera - alla filialer i koden
- Hjälper dig att säkerställa att ingen grenad leder till någon abnormitet i programmets drift
- Branch täckningsmetod tar bort problem som uppstår på grund av testning av uttalande tä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
- Filialtäckning ignorerar grenar inuti de booleska uttrycken
Skyddstäckning
Villkorstäckning eller uttrycktäckning är en testmetod som används för att testa och utvärdera variablerna eller deluttrycken i det villkorliga uttalandet. Målet med tillståndstäckningen är att kontrollera individuella resultat för varje logiskt tillstånd. Villkorstäckning ger bättre känslighet för kontrollflödet än beslutstäckning. I denna täckning 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 för full beslutstäckning.
Formeln för att beräkna villkorstäckning:
Exempel:
För ovanstående uttryck har vi fyra möjliga kombinationer
- TT
- FF
- TF
- MED
Tänk på följande ingång
X = 3 Y = 4 |
(x |
SANN |
Villkorstäckning är ¼ = 25% |
A = 3 B = 4 |
(a> b) |
FALSK |
Ändlig maskintäckning
Finite state maskintäckning är verkligen den mest komplexa typen av kodtäckningsmetod. Detta beror på att det fungerar på designens beteende. I denna täckningsmetod måste du leta efter hur många tidsspecifika tillstånd som besöks, transiteras. Det kontrollerar också hur många sekvenser som ingår i en maskin med ändligt tillstånd.
Vilken typ av kodtäckning du ska välja
Detta är verkligen 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 det potentiella straffet
- kostnad för förlorat rykte
- kostnad för förlorad försäljning etc.
Ju högre sannolikhet 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 visar hur väl källkoden har använts 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 |
Gjord av utvecklare | Gjord av testare |
Verktyg för kodtäckning
Här är en lista över viktiga verktyg för kodtäckning:
Verktygets namn | Beskrivning |
Cobertura | Det är ett verktyg för öppen källkodstäckning. Den mäter testtäckningen genom att instrumentera en kodbas och analysera vilka kodrader som körs och vilka som inte körs när testpaketet körs. |
Klöver | Clover minskar också testng-tiden genom att bara köra testerna som täcker applikationskoden som ändrades sedan den tidigare versionen. |
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-, rad- och basblocktäckning, aggregerad källfil, klass- och metodnivåer. |
Kalistick | Kalistick är en tredjepartsapplikation som analyserar koder med olika perspektiv. |
CoView och CoAnt | Coding Software är ett kodtäckningsverktyg för mätvärden, skapande av föremål, kodtestbarhet, sökvägs- 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 med att använda kodtäckning
- Hjälpsamt att utvärdera ett kvantitativt mått på kodtäckning
- Det låter dig skapa extra testfall för att öka täckningen
- Det låter dig hitta de områden i ett program som inte utövas av en uppsättning testfall
Nackdelar med att använda kodtäckning
- Även när någon specifik funktion inte implementeras i designen rapporterar kodtäckning fortfarande 100% täckning.
- Det är inte möjligt att avgöra om vi testade alla möjliga värden för en funktion med hjälp av kodtäckning
- Kodtäckning säger inte heller hur mycket och hur bra du har täckt din logik
- Om 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 i vilken grad källkoden för programmet har testats
- Det hjälper dig att mäta effektiviteten i testimplementeringen
- Fem kodtäckningsmetoder är 1.) Uttalande av täckning 2.) Tillståndstäckning 3) Grenöverföring 4) Växla täckning 5) FSM-täckning
- Uttalningstäckning innefattar körning av alla körbara uttalanden i källkoden minst en gång
- Beslutstäckning rapporterar de sanna eller falska resultaten för varje booleskt uttryck
- I filialens täckning testas varje resultat från en kodmodul
- Villkorligt visar hur variablerna eller underuttrycken i det villkorliga uttalandet utvärderas
- Finite state maskintäckning är verkligen den mest komplexa typen av kodtäckningsmetod
- För att välja en täckningsmetod måste testaren kontrollera kostnaden för den potentiella straffen, förlorat rykte, förlorad försäljning etc.
- Kodtäckning berättar hur väl källkoden har utövats av din testbänk medan Funktionell täckning mäter hur väl funktionaliteten i designen har täckts
- Cobertura, JTest, Clover, Emma, Kalistick är några viktiga verktyg för kodtäckning
- Kodtäckning 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