Code Täckningsverktyg: Utlåtande-, gren- och beslutstestning

⚡ Smart sammanfattning

Code täckning är ett white-box-mått som rapporterar i vilken grad källkoden har använts av en testsvit, helping team lokaliserar otestade uttalanden, grenar, villkor och sökvägar som dolda defekter kan uppta.

  • 🎯 Definition: Code täckning kvantifierar hur mycket av källkoden dina tester faktiskt exekverar.
  • 📊 Metoder: Det finns fem metoder – uttalande, beslut, gren, villkor och täckning av finita tillståndsmaskiner.
  • 🧩 Uttalande vs. gren: Utdragstäckning kontrollerar linjer, medan filialtäckning kontrollerar varje beslutsresultat.
  • ⚖️ Code vs Funktionell: Code kod för tillämpade täckningsåtgärder; funktionella täckningsåtgärder som omfattas av krav.
  • 🛠️ Verktyg: Cobertura, OpenClover, EMMA och Sonar automatiserar mätningen av täckning.
  • 🤖 AI-hjälp: AI-verktyg genererar tester och avslöjar automatiskt otestade, högriskiga täckningsgap.

Code Handledning för täckning

Vad är Code Rapportering?

Code täckning är ett mått som beskriver i vilken grad källkoden för ett program har testats. Det är en form av vit box testning vilket hittar de områden i ett program som inte används av en uppsättning testfall. Det hjälper också till att skapa ytterligare testfall för att öka täckningen och för att bestämma ett kvantitativt mått på kodens täckning.

I de flesta fall samlar ett kodatäckningssystem in information om det program som körs. Det kombinerar sedan den informationen med källkodsinformation för att generera en rapport om testsvitens kodatäckning.

Varför använda Code Täckningstestning?

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

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

Code Täckningsmetoder

Följande är de viktigaste metoderna för kodtäckning:

  • 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 körs minst en gång. Den används för att beräkna antalet satser i källkoden som har körts. Huvudsyftet med satstäckning är att täcka alla möjliga sökvägar, rader och satser i källkoden.

Uttryckstäckning används för att härleda scenarier baserat på strukturen i den testade koden.

Utlåtande täckning

Vid white box-testning koncentrerar sig testaren på hur programvaran fungerar. Med andra ord koncentrerar sig testaren på källkodens interna funktion gällande kontrollflödesdiagram eller flödesscheman.

Generellt sett, i all programvara, om man tittar på källkoden, finns det en mängd olika element som operatorer, funktioner, ...ping, undantagshanterare och så vidare. Baserat på indata till programmet kan det hända att vissa kodsatser inte körs. Målet med kodtäckning är att täcka alla möjliga sökvägar, rader och satser i koden.

Låt oss förstå detta med ett exempel på hur man beräknar täckningsgraden för kontoutdrag. Här tar vi två olika scenarier för att kontrollera procentandelen av kontoutdragstäckningen för varje scenario.

Källa 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: Om A = 3, B = 9

Scenario 1 för uttalandetäckning

De gulmarkerade satserna är de som exekveras enligt scenariot. Antal exekverade satser = 5, Totalt antal satser = 7, så satstäckning = 5/7 = 71 %.

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

Scenario 2 för uttalandetäckning

De gulmarkerade satserna är de som exekveras enligt scenariot. Antal exekverade satser = 6, Totalt antal satser = 7, så satstäckning = 6/7 = 85 %.

Men överlag, om du ser det, täcks alla påståenden av båda scenarierna. Så vi kan dra slutsatsen att den totala täckningen av påståenden är 100 %.

Vad omfattas av Statement Coverage?

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

Beslutstäckningstestning

Beslutstäckning är en white box-testteknik som rapporterar sanna eller falska resultat för varje booleskt uttryck i källkoden. Målet med beslutstäckningstestning ä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 svårt 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 grentäckning ger det större känslighet för kontrollflödet.

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. Beslutet blir "nej" om (a>5) är markerat, så beslutstäckning = 50 %.

Scenario 2: Värdet på a är 6. Beslutsresultatet är "Ja". Om (a>5) är markerat, så är beslutstäckningen = 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 (sats eller loop) testas. Syftet med branch coverage är att säkerställa att varje beslutsvillkor från varje branch exekveras minst en gång. Det hjälper till att mäta andelar av oberoende kodsegment och hitta sektioner som inte har några brancher.

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:

Formel för filialtäckning

Exempel på filialtäckning

För att lära dig om filialens täckning, betrakta samma exempel som användes tidigare. Filialens täckning kommer även att beakta den ovillkorliga filialen.

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:

  • Låter dig validera alla grenar i koden.
  • Hjälper dig att säkerställa att ingen förgrening leder till något avvikande i programmets drift.
  • Tar bort problem som uppstår på grund av testning av utdragstäckning.
  • Låter dig hitta områden som inte testas med andra testmetoder.
  • Låter dig hitta ett kvantitativt mått på kodens täckning.
  • Grentäckning ignorerar grenar inom booleska uttryck.

Tillståndstäckningstestning

Tillståndstäckning, eller uttryckstäckning, är en testmetod som används för att testa och utvärdera variablerna eller deluttrycken i en villkorlig sats. Målet med villkorstäckning är att kontrollera individuella utfall för varje logiskt villkor. Villkorstäckning ger bättre känslighet för kontrollflödet än beslutstäckning. I denna täckning beaktas endast uttryck med logiska operander.

Om ett uttryck till exempel har booleska operationer som AND, OR eller XOR, indikerar det de totala möjligheterna. Villkorstäckning garanterar inte fullständig beslutstäckning.

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

Formel för tillståndstäckning

För ett uttryck med två operander finns det fyra möjliga kombinationer: TT, FF, TF och FT. Betrakta indata X=3, Y=4 (x b) FALSKT, vilket ger en villkorstäckning på 1/4 = 25 %.

Täckning för ändlig tillståndsmaskin

Täckning av en ändlig tillståndsmaskin är utan tvekan den mest komplexa typen av kodatäckningsmetod. Detta beror på att den påverkar designens beteende. I denna täckningsmetod måste man titta på hur många gånger specifika tillstånd besöks eller passeras. Den kontrollerar också hur många sekvenser som ingår i en ändlig tillståndsmaskin.

Vilken typ av Code Tä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 om:

  • kod som testas har en eller flera oupptäckta defekter,
  • kostnaden för den potentiella straffavgiften,
  • kostnaden för förlorat rykte,
  • kostnaden för förlorad försäljning och så vidare.

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

Code Täckning kontra funktionell täckning

Code Rapportering Funktionell täckning
Visar hur väl källkoden har använts av din testbänk. Mäter hur väl designens funktionalitet har täckts av din testbänk.
Använder aldrig en designspecifikation. Använder en designspecifikation.
Gjord av utvecklare. Gjord av testare.

Code Täckningsverktyg

Här är en lista över viktiga verktyg för kodtäckning:

Verktygets namn BESKRIVNING
Cobertura Ett verktyg för öppen källkodstäckning. Det mäter testtäckning genom att instrumentera en kodbas och analysera vilka kodrader som körs och vilka som inte gör det när testsviten körs.
Clover Klöver (OpenClover) minskar också testtiden genom att bara köra de tester som täcker den applikationskod som modifierats sedan den föregående 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-, linje- och grundläggande blocktäckning, aggregerad på källfils-, klass- och metodnivå.
Kalistick Kalistick är en tredjepartsapplikation som analyserar kod från olika perspektiv.
CoView och CoAnt Ett verktyg för kodtäckning för mätvärden, skapande av simulerade objekt, kodtestbarhet, täckning av sökvägar och grenar med mera.
Bullseye för C++ BullseyeCoverage är ett verktyg för kodtäckning 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 Code Rapportering

Fördelar Nackdelar
Användbart för att utvärdera ett kvantitativt mått på koddäckning. Även när en specifik funktion inte är implementerad i designen, rapporterar koddäckningen fortfarande 100 % täckning.
Låter dig skapa extra testfall för att öka täckningen. Det är inte möjligt att avgöra om alla möjliga värden för en funktion testades med hjälp av kodtäckning.
Låter dig hitta de områden i ett program som inte utförs av en uppsättning testfall. Code Täckningen säger inte hur mycket och hur väl du har täckt din logik.

Vanliga frågor

Många team siktar på 70 till 80 % som ett praktiskt mål. Att nå 100 % är sällan kostnadseffektivt. Fokusera på att täcka kritisk högrisklogik snarare än att jaga en enda siffra över hela kodbasen.

Nej. Fullständig täckning bevisar att varje rad kördes, inte att varje inmatning, värde eller krav validerades. Logiska fel och saknade funktioner kan fortfarande passera oupptäckta, så täckning kompletterar snarare än ersätter en bra testdesign.

Code täckning mäter hur mycket källkod som körs under testning. Testtäckning är bredare, trachur väl tester hanterar krav, funktioner och risker. Code Täckning är en input till den övergripande testtäckningen.

Nej. Du kan uppnå 100 % täckning av uttalanden utan att testa grenar, till exempel en saknad else-sökväg. Grentäckningen (beslutstäckningen) är starkare eftersom den omfattar uttalanden och utövar alla utfall.

AI analyserar källkod och befintliga tester för att identifiera otestade, högriskiga vägar, och föreslår eller genererar sedan nya fall. Maskininlärning prioriterar också vilka tester som ska köras, vilket förkortar feedbacken samtidigt som den hållerping hög täckning.

Ja. AI-verktyg som Diffblue Cover skannar kod och skriver autonomt enhetstester för otäckt logik. De riktar in sig på riskfyllda grenar och villkor, vilket ökar täckningen med betydligt mindre manuell ansträngning.

OpenClover mäter täckning av uttalanden, grenar och metoder och samlar in över 20 mätvärden. Cobertura, EMMA, och JaCoCo finns andra allmänt använda gratisalternativ för Java projekt.

Modifierad villkors-/beslutstäckning kräver att varje villkor i ett beslut oberoende påverkar resultatet. Den är striktare än branschtäckning och är obligatorisk för säkerhetskritisk programvara, såsom flygelektronik, enligt DO-178C-standarden.

Sammanfatta detta inlägg med: