Zelfstudie over codedekking: testen van vertakkingen, verklaringen en beslissingen

Wat is codedekking?

Code coverage is een maatstaf die de mate beschrijft waarin de broncode van het programma is getest. Het is een vorm van white box testing die de gebieden van het programma vindt die niet worden gebruikt door een set testcases. Het creëert ook enkele testcases om de dekking te vergroten en een kwantitatieve maatstaf voor code coverage te bepalen.

In de meeste gevallen verzamelt het codedekkingssysteem informatie over het actieve programma. Het combineert dat ook met broncode-informatie om een ​​rapport te genereren over de codedekking van de testsuite.

Waarom codedekkingstests gebruiken?

Hier volgen enkele belangrijke redenen om codedekking te gebruiken:

  • Het helpt u de efficiëntie van de testimplementatie te meten
  • Het biedt een kwantitatieve meting.
  • Het definieert de mate waarin de broncode is getest.

Methoden voor codedekking

Hieronder staan ​​de belangrijkste methoden voor codedekking

  • Verklaring dekking
  • Beslissingsdekking
  • Branchedekking
  • Toggle Dekking
  • FSM-dekking

Verklaring Dekking

Verklaring Dekking is een white box testtechniek waarbij alle uitvoerbare statements in de broncode minstens één keer worden uitgevoerd. Het wordt gebruikt voor de berekening van het aantal statements in de broncode dat is uitgevoerd. Het hoofddoel van Statement Coverage is om alle mogelijke paden, regels en statements in de broncode te dekken.

Verklaringsdekking wordt gebruikt om een ​​scenario af te leiden op basis van de structuur van de te testen code.

Verklaring Dekking

In Wit Box Testenconcentreert de tester zich op hoe de software werkt. Met andere woorden, de tester zal zich concentreren op de interne werking van de broncode met betrekking tot controlestroomgrafieken of stroomdiagrammen.

Over het algemeen zal er in elke software, als we naar de broncode kijken, een grote verscheidenheid aan elementen zijn zoals operatoren, functies, looping, exceptionele handlers, etc. Gebaseerd op de invoer van het programma, kunnen sommige van de code statements niet worden uitgevoerd. Het doel van Statement coverage is om alle mogelijke paden, lijnen en statements in de code te dekken.

Laten we dit begrijpen met een voorbeeld van hoe u de verklaringsdekking kunt berekenen.

Scenario voor het berekenen van de Statement Coverage voor bepaalde broncode. Hier nemen we twee verschillende scenario's om het percentage afschriftdekking voor elk scenario te controleren.

Broncode:

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:

Als A = 3, B = 9

Verklaring Dekking

De instructies gemarkeerd in gele kleur zijn de instructies die worden uitgevoerd volgens het scenario

Aantal uitgevoerde uitspraken = 5, Totaal aantal uitspraken = 7

Verklaringsdekking: 5/7 = 71%

Verklaring Dekking

Op dezelfde manier zullen we scenario 2 zien,

Scenario 2:

Als A = -3, B = -9

Verklaring Dekking

De instructies gemarkeerd in gele kleur zijn de instructies die worden uitgevoerd volgens het scenario.

Aantal uitgevoerde instructies = 6

Totaal aantal uitspraken = 7

Verklaring Dekking

Verklaringsdekking: 6/7 = 85%

Verklaring Dekking

Maar over het geheel genomen vallen alle uitspraken onder beide scenario's. We kunnen dus concluderen dat de algehele verklaringsdekking 100% is.

Verklaring Dekking

Wat valt er onder de Verklaringsdekking?

  1. Ongebruikte verklaringen
  2. Dode code
  3. Ongebruikte takken
  4. Ontbrekende verklaringen

Beslissingsdekkingstests

Beslissingsdekking is een white box-testtechniek die de ware of onware uitkomsten van elke booleaanse expressie van de broncode rapporteert. Het doel van decision coverage testing is om alle toegankelijke broncode te dekken en valideren door te controleren en ervoor te zorgen dat elke tak van elk mogelijk beslissingspunt ten minste één keer wordt uitgevoerd.

In dit dekkingstype kunnen expressies complex worden, waardoor het lastig wordt om 100% dekking te bereiken. Daarom worden verschillende methoden gebruikt om deze metriek te rapporteren. Deze methoden geven prioriteit aan de meest kritische combinaties. Hoewel het vergelijkbaar is met decision coverage, biedt het een grotere gevoeligheid voor control flow.

Beslissingsdekkingstests

Voorbeeld van beslissingsdekking

Beschouw de volgende code:

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

Scenario 1:

Waarde van a is 2

Beslissingsdekkingstests

De geel gemarkeerde code wordt uitgevoerd. Hier wordt de “Nee”-uitkomst van de beslissing If (a>5) aangevinkt.

Beslissingsdekking = 50%

Scenario 2:

Waarde van a is 6

Beslissingsdekkingstests

De geel gemarkeerde code wordt uitgevoerd. Hier wordt de “Ja”-uitkomst van de beslissing If (a>5) aangevinkt.

Beslissingsdekking = 50%

Testgeval Waarde van A uitgang Beslissingsdekking
1 2 2 50%
2 6 18 50%

Testen van filiaaldekking

Branchedekking is een white box-testmethode waarbij elke uitkomst van een codemodule (statement of loop) wordt getest. Het doel van branch coverage is om ervoor te zorgen dat elke beslissingsvoorwaarde van elke branch ten minste één keer wordt uitgevoerd. Het helpt om fracties van onafhankelijke codesegmenten te meten en om secties te vinden die geen branches hebben.

Als de uitkomsten bijvoorbeeld binair zijn, moet u zowel de Ware als de Valse uitkomsten testen.

De formule om de vestigingsdekking te berekenen:

Testen van filiaaldekking

Voorbeeld van filiaaldekking

Laten we, om de dekking van de filialen te leren, hetzelfde voorbeeld bekijken dat eerder werd gebruikt

Beschouw de volgende code:

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

Testen van filiaaldekking

Branch Coverage houdt ook rekening met onvoorwaardelijke vertakking

Testgeval Waarde van A uitgang Beslissingsdekking Branchedekking
1 2 2 50% 33%
2 6 18 50% 67%

Voordelen van vestigingsdekking:

Branch coverage Testing biedt de volgende voordelen:

  • Hiermee kunt u alle vertakkingen in de code valideren
  • Helpt u ervoor te zorgen dat er geen vertakte verbindingen zijn die tot afwijkingen in de werking van het programma leiden
  • De filiaaldekkingsmethode verwijdert problemen die optreden als gevolg van het testen van de dekking van verklaringen
  • Hiermee kunt u die gebieden vinden die niet door andere testmethoden zijn getest
  • Hiermee kunt u een kwantitatieve maatstaf voor codedekking vinden
  • De dekking van vertakkingen negeert vertakkingen binnen de Booleaanse expressies

Conditiedekking testen

Conditiedekking of expressiedekking is een testmethode die wordt gebruikt om de variabelen of subexpressies in de voorwaardelijke verklaring te testen en evalueren. Het doel van conditiedekking is om individuele uitkomsten voor elke logische conditie te controleren. Conditiedekking biedt een betere gevoeligheid voor de controlestroom dan beslissingsdekking. In deze dekking worden alleen expressies met logische operanden overwogen.

Als een expressie bijvoorbeeld Booleaanse bewerkingen bevat zoals AND, OR, XOR, dan geeft dit het totale aantal mogelijkheden aan.

Conditiedekking geeft geen garantie op volledige beslissingsdekking.

De formule om de conditiedekking te berekenen:

Conditiedekking testen

Voorbeeld:

Conditiedekking testen

Voor de bovenstaande uitdrukking hebben we 4 mogelijke combinaties

  • TT
  • FF
  • TF
  • FT

Beschouw de volgende invoer

X = 3

Y = 4

(X TRUE Conditiedekking is ¼ = 25%
A = 3

B = 4

(a>b) Juist

Dekking van eindige toestandsmachines

Finite state machine coverage is zeker het meest complexe type code coverage methode. Dit komt omdat het werkt op het gedrag van het ontwerp. In deze coverage methode moet je kijken naar hoeveel tijdsspecifieke toestanden worden bezocht, getransiteerd. Het controleert ook hoeveel sequenties er zijn opgenomen in een finite state machine.

Welk type codedekking u moet kiezen

Dit is zeker het moeilijkste antwoord om te geven. Om een ​​dekkingsmethode te selecteren, moet de tester controleren of de

  • de geteste code bevat enkele of meerdere onontdekte defecten
  • kosten van de mogelijke boete
  • kosten van verloren reputatie
  • kosten van verloren verkoop, enz.

Hoe groter de kans dat defecten kostbare productiefouten veroorzaken, hoe ernstiger het dekkingsniveau dat u moet kiezen.

Codedekking versus functionele dekking

Codedekking Functionele dekking
Codedekking vertelt u hoe goed de broncode door uw testbank is toegepast. Functionele dekking meet hoe goed de functionaliteit van het ontwerp door uw testbank wordt gedekt.
Gebruik nooit een ontwerpspecificatie Gebruik ontwerpspecificatie
Gemaakt door ontwikkelaars Gemaakt door testers

Hulpmiddelen voor codedekking

Hier is een lijst met belangrijke hulpmiddelen voor codedekking:

Tool Naam Beschrijving
Cobertura Het is een open source codedekkingstool. Het meet de testdekking door een codebasis te instrumenteren en te analyseren welke coderegels worden uitgevoerd en welke niet worden uitgevoerd wanneer de testsuite wordt uitgevoerd.
Klaver Clover verkort bovendien de testtijd door alleen de tests uit te voeren die betrekking hebben op de applicatiecode die sinds de vorige build is gewijzigd.
OntwikkelaarPartner DevPartner stelt ontwikkelaars in staat te analyseren Java code voor codekwaliteit en complexiteit.
Emma EMMA ondersteunt klasse-, methode-, lijn- en basisblokdekking, geaggregeerde bronbestand-, klasse- en methodeniveaus.
Kalistick Kalistick is een applicatie van derden die de codes vanuit verschillende perspectieven analyseert.
CoView en CoAnt Coding Software is een tool voor codedekking voor statistieken, het maken van nepobjecten, testbaarheid van code, dekking van paden en vertakkingen, enz.
Bullseye voor C++ BulseyeCoverage is een codedekkingstool voor C++ en C.
Viszoeker Sonar is een open codedekkingstool waarmee u de codekwaliteit kunt beheren.

Voor- en nadelen van het gebruik van codedekking

Voordelen van codedekking Nadelen van codedekking
Nuttig om een ​​kwantitatieve maatstaf voor codedekking te evalueren Zelfs als een specifieke functie niet in het ontwerp is geïmplementeerd, rapporteert de codedekking nog steeds 100% dekking.
Hiermee kunt u extra testgevallen maken om de dekking te vergroten Het is niet mogelijk om te bepalen of we alle mogelijke waarden van een feature hebben getest met behulp van codedekking
Hiermee kunt u de gebieden van een programma vinden die niet door een reeks testgevallen worden uitgeoefend Codedekking zegt ook niet hoeveel en hoe goed u uw logica hebt afgedekt
In het geval dat de gespecificeerde functie niet is geïmplementeerd of niet is opgenomen in de specificatie, kunnen op structuur gebaseerde technieken dit probleem niet vinden.

Samenvatting

  • Codedekking is een maatstaf die beschrijft in welke mate de broncode van het programma is getest
  • Het helpt u de efficiëntie van de testimplementatie te meten
  • De vijf methoden voor Codedekking zijn 1.) Verklaringsdekking 2.) Conditiedekking 3) Filiaaldekking 4) Toggle Dekking 5) FSM-dekking
  • Verklaringsdekking houdt in dat alle uitvoerbare instructies in de broncode minstens één keer worden uitgevoerd
  • Beslissingsdekking rapporteert de ware of valse uitkomsten van elke Booleaanse expressie
  • In de branchedekking wordt iedere uitkomst uit een codemodule getest
  • Voorwaardelijk laat zien hoe de variabelen of subexpressies in de voorwaardelijke verklaring worden geëvalueerd
  • Dekking van eindige toestandsmachines is zeker het meest complexe type codedekkingsmethode
  • Om een ​​dekkingsmethode te selecteren, moet de tester de kosten van de mogelijke boete, verloren reputatie, verloren verkoop, enz. controleren.
  • Codedekking vertelt u hoe goed de broncode door uw testbank is toegepast, terwijl functionele dekking meet hoe goed de functionaliteit van het ontwerp is gedekt
  • Cobertura, JTest, Clover, Emma en Kalistick zijn enkele belangrijke tools voor codedekking
  • Met Code Coverage kunt u extra testcases maken om de dekking te vergroten
  • Code Coverage helpt u niet om te bepalen of we alle mogelijke waarden van een feature hebben getest

Vat dit bericht samen met: