Code Coverage Tutorial: Branch, Statement, Decision, FSM

Inhoudsopgave:

Anonim

Wat is codedekking?

Codedekking is een maatstaf die beschrijft in hoeverre de broncode van het programma is getest. Het is een vorm van white box-testen waarbij de gebieden van het programma worden gevonden die niet worden uitgeoefend door een reeks testcases. Het creëert ook enkele testcases om de dekking te vergroten en een kwantitatieve maatstaf voor codedekking 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.

In deze tutorial leer je-

  • Wat is codedekking?
  • Waarom codedekking gebruiken?
  • Methoden voor codedekking
  • Verklaring dekking
  • Beslissingsdekking
  • Bijkantoordekking
  • Conditie dekking
  • Finite State Machine-dekking
  • Welk type codedekking u moet kiezen
  • Codedekking versus functionele dekking
  • Tools voor codedekking
  • Voordelen en nadelen van het gebruik van codedekking

Waarom codedekking gebruiken?

Hier zijn enkele belangrijke redenen om codedekking te gebruiken:

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

Methoden voor codedekking

Hieronder volgen de belangrijkste methoden voor codedekking

  • Verklaring dekking
  • Beslissingsdekking
  • Bijkantoordekking
  • Schakel tussen dekking
  • FSM-dekking

Verklaring dekking

Statement Coverage is een white box-testtechniek waarbij alle uitvoerbare instructies in de broncode minstens één keer worden uitgevoerd. Het wordt gebruikt voor het berekenen van het aantal verklaringen in de broncode dat is uitgevoerd. Het belangrijkste doel van Statement Coverage is om alle mogelijke paden, lijnen en statements in de broncode te dekken.

De dekking van de verklaring wordt gebruikt om een ​​scenario af te leiden op basis van de structuur van de code die wordt getest.

Bij White Box Testing concentreert 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.

Als we naar de broncode kijken, zal er in het algemeen in alle software een grote verscheidenheid aan elementen zijn, zoals operators, functies, looping, uitzonderlijke handlers, enz. Op basis van de invoer in het programma kunnen sommige codeverklaringen niet worden uitgevoerd . Het doel van Statement-dekking is om alle mogelijke paden, lijnen en verklaringen in de code te dekken.

Laten we dit begrijpen aan de hand van een voorbeeld, hoe u de dekking van overzichten kunt berekenen.

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

Broncode:

Prints (int a, int b) {------------ Printsum is een functieint resultaat = a + b;If (resultaat> 0)Afdrukken ("Positief", resultaat)AndersAfdrukken ("negatief", resultaat)} ----------- Einde van de broncode

Scenario 1:

Als A = 3, B = 9

De verklaringen die in gele kleur zijn gemarkeerd, zijn degene die volgens het scenario worden uitgevoerd

Aantal uitgevoerde verklaringen = 5, Totaal aantal verklaringen = 7

Afschriftdekking: 5/7 = 71%

Evenzo zullen we scenario 2 zien,

Scenario 2:

Als A = -3, B = -9

De verklaringen die in gele kleur zijn gemarkeerd, zijn degene die volgens het scenario worden uitgevoerd.

Aantal uitgevoerde instructies = 6

Totaal aantal afschriften = 7

Afschriftdekking: 6/7 = 85%

Maar over het algemeen, als u ziet, worden alle uitspraken gedekt door 2 e scenario's die worden overwogen. We kunnen dus concluderen dat de totale dekking van de verklaringen 100% is.

Wat valt er onder de dekking van de verklaring?

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

Beslissingsdekking

Decision Coverage is een white box-testtechniek die de ware of valse uitkomsten van elke booleaanse uitdrukking van de broncode rapporteert. Het doel van het testen van de beslissingsdekking is om alle toegankelijke broncode te dekken en te valideren door te controleren en ervoor te zorgen dat elke tak van elk mogelijk beslissingspunt minstens één keer wordt uitgevoerd.

In deze dekking kunnen uitdrukkingen soms ingewikkeld worden. Daarom is het erg moeilijk om een ​​dekking van 100% te bereiken. Daarom zijn er veel verschillende methoden om deze statistiek te rapporteren. Al deze methoden zijn gericht op het dekken van de belangrijkste combinaties. Het lijkt sterk op beslissingsdekking, maar het biedt een betere gevoeligheid om de stroom te beheersen.

Voorbeeld van beslissingsdekking

Beschouw de volgende code:

Demo (int a) {Als (a> 5)a = a * 3Afdrukken (a)​

Scenario 1:

Waarde van a is 2

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

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

Beslissingsdekking = 50%

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

Bijkantoordekking

Branch Coverage is een white box-testmethode waarbij elke uitkomst van een codemodule (statement of loop) wordt getest. Het doel van filiaaldekking is ervoor te zorgen dat elke beslissingsvoorwaarde van elk filiaal minstens één keer wordt uitgevoerd. Het helpt om breuken van onafhankelijke codesegmenten te meten en om secties te ontdekken die geen vertakkingen hebben.

Als de uitkomsten bijvoorbeeld binair zijn, moet u zowel de Waar als de Onwaar uitkomsten testen.

De formule om de filiaaldekking te berekenen:

Voorbeeld van filiaaldekking

Laten we, om meer te weten te komen over de dekking van filialen, hetzelfde voorbeeld bekijken dat eerder is gebruikt

Beschouw de volgende code

Demo (int a) {Als (a> 5)a = a * 3Afdrukken (a)​

Branch Coverage houdt ook rekening met onvoorwaardelijke branche

Testgeval Waarde van A Uitvoer Beslissingsdekking Bijkantoordekking
1 2 2 50% 33%
2 6 18 50% 67%

Voordelen van filiaaldekking:

Vestigingsdekking Testen biedt de volgende voordelen:

  • Hiermee kunt u alle vertakkingen in de code valideren
  • Helpt u ervoor te zorgen dat vertakkingen niet leiden tot enige abnormaliteit van de werking van het programma
  • De filiaaldekkingsmethode verwijdert problemen die optreden als gevolg van het testen van de dekking van de verklaring
  • Hiermee kunt u die gebieden vinden die niet met andere testmethoden zijn getest
  • Hiermee kunt u een kwantitatieve maatstaf voor codedekking vinden
  • Branch-dekking negeert branches binnen de Booleaanse expressies

Conditie dekking

Condition Coverage of Expression Coverage is een testmethode die wordt gebruikt om de variabelen of subuitdrukkingen in de voorwaardelijke instructie te testen en te evalueren. Het doel van conditiedekking is om de individuele uitkomsten voor elke logische conditie te controleren. Conditiedekking biedt een betere gevoeligheid voor de controlestroom dan beslissingsdekking. In deze dekking wordt alleen rekening gehouden met uitdrukkingen met logische operanden.

Als een uitdrukking bijvoorbeeld Booleaanse bewerkingen heeft, zoals AND, OR, XOR, die het totaal aantal mogelijkheden aangeeft.

Conditiedekking geeft geen garantie over volledige beslissingsdekking.

De formule om de conditiedekking te berekenen:

Voorbeeld:

Voor de bovenstaande uitdrukking hebben we 4 mogelijke combinaties

  • TT
  • FF
  • TF
  • FT

Beschouw de volgende input

X = 3

Y = 4

(x

WAAR

Conditiedekking is ¼ = 25%

A = 3

B = 4

(a> b)

ONWAAR

Finite State Machine-dekking

Finite state machine-dekking is zeker het meest complexe type codedekkingsmethode. Dit komt doordat het werkt op het gedrag van het ontwerp. Bij deze dekkingsmethode moet u kijken hoeveel tijdspecifieke staten worden bezocht, doorgevoerd. Het controleert ook hoeveel reeksen er in een eindige-toestandsmachine zijn opgenomen.

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 te testen code heeft enkele of meerdere onontdekte defecten
  • kosten van de mogelijke boete
  • kosten van verloren reputatie
  • kosten van gederfde verkoop, etc.

Hoe groter de kans dat defecten kostbare productiestoringen veroorzaken, des te groter het dekkingsniveau dat u moet kiezen.

Codedekking versus functionele dekking

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

Tools voor codedekking

Hier is een lijst met belangrijke tools voor codedekking:

Toolnaam Omschrijving
Cobertura Het is een open source code-dekkingstool. Het meet de testdekking door een codebasis te instrumenteren en te analyseren welke regels code worden uitgevoerd en welke niet worden uitgevoerd wanneer de testsuite wordt uitgevoerd.
Klaver Clover verkort ook de testtijd door alleen de tests uit te voeren die betrekking hebben op de applicatiecode die is gewijzigd sinds de vorige build.
DevPartner DevPartner stelt ontwikkelaars in staat om Java-code te analyseren op 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 Coderingssoftware is een codedekkingstool voor metrische gegevens, het maken van nepobjecten, codetestbaarheid, pad- en filiaaldekking, enz.
Bullseye voor C ++ BulseyeCoverage is een tool voor codedekking voor C ++ en C.
Sonar Sonar is een tool voor open codedekking waarmee u de codekwaliteit kunt beheren.

Voordelen van het gebruik van codedekking

  • Handig om een ​​kwantitatieve maatstaf voor codedekking te evalueren
  • Hiermee kunt u extra testcases maken om de dekking te vergroten
  • Hiermee kunt u de gebieden van een programma vinden die niet worden uitgeoefend door een reeks testcases

Nadelen van het gebruik van codedekking

  • Zelfs als een specifieke functie niet in het ontwerp is geïmplementeerd, rapporteert codedekking nog steeds 100% dekking.
  • Het is niet mogelijk om te bepalen of we alle mogelijke waarden van een feature hebben getest met behulp van codedekking
  • Codedekking vertelt ook niet hoeveel en hoe goed u uw logica hebt afgedekt
  • In het geval dat de opgegeven functie niet is geïmplementeerd, of niet is opgenomen in de specificatie, kunnen op structuur gebaseerde technieken dat probleem niet vinden.

Overzicht

  • Codedekking is een maatstaf die beschrijft in hoeverre de broncode van het programma is getest
  • Het helpt u om de efficiëntie van testimplementatie te meten
  • Vijf methoden voor codedekking zijn 1.) Dekking van verklaringen 2.) Dekking van voorwaarden 3) Dekking van filialen 4) Dekking omschakelen 5) Dekking van FSM
  • Dekking van verklaringen houdt in dat alle uitvoerbare verklaringen in de broncode minstens één keer worden uitgevoerd
  • Beslissingsdekking rapporteert de ware of valse uitkomsten van elke Booleaanse uitdrukking
  • In de branchedekking wordt elke uitkomst van een codemodule getest
  • Voorwaardelijk zal onthullen hoe de variabelen of subexpressies in de voorwaardelijke instructie worden geëvalueerd
  • Finite state machine-dekking is zeker het meest complexe type codedekkingsmethode
  • Om een ​​dekkingsmethode te selecteren, moet de tester de kosten van de mogelijke boete, reputatieverlies, verloren verkoop enz. Controleren.
  • Codedekking vertelt u hoe goed de broncode is uitgeoefend door uw testbank, terwijl functionele dekking meet hoe goed de functionaliteit van het ontwerp is gedekt
  • Cobertura, JTest, Clover, Emma, ​​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 functie hebben getest