Code Dekkingstool: Testen van verklaringen, vertakkingen en beslissingen
โก Slimme samenvatting
Code Dekking is een white-box-meting die aangeeft in hoeverre de broncode is getest door een testsuite.ping Teams sporen ongeteste statements, vertakkingen, voorwaarden en paden op waar verborgen defecten zich kunnen bevinden.

Wat is Code Dekking?
Code dekking is een maatstaf die beschrijft in hoeverre de broncode van een programma is getest. Het is een vorm van witte doos testen Dit hulpmiddel identificeert de delen van een programma die niet door een reeks testgevallen worden getest. Het helpt ook bij het creรซren van extra testgevallen om de dekking te vergroten en om een โโkwantitatieve maatstaf voor codedekking te bepalen.
In de meeste gevallen verzamelt een code coverage-systeem informatie over het draaiende programma. Vervolgens combineert het die informatie met informatie over de broncode om een โโrapport te genereren over de code coverage van de testsuite.
Waarom gebruiken Code Dekkingstesten?
Hier volgen enkele belangrijke redenen om codedekking te gebruiken:
- Het helpt je de efficiรซntie van de testimplementatie te meten.
- Het biedt een kwantitatieve meting van de testresultaten.
- Het definieert de mate waarin de broncode is getest.
Code Dekkingsmethoden
De volgende methoden worden gebruikt voor code coverage:
- Verklaring Dekking
- Beslissingsdekking
- Branchedekking
- Toggle Dekking
- FSM-dekking
Verklaring 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 om het aantal uitgevoerde instructies in de broncode te berekenen. Het belangrijkste doel van statement coverage is om alle mogelijke paden, regels en instructies in de broncode te dekken.
Statement coverage wordt gebruikt om scenario's af te leiden op basis van de structuur van de te testen code.
Bij white-box testen concentreert de tester zich op de werking van de software. Met andere woorden, de tester richt zich op de interne werking van de broncode, met name op controlestroomdiagrammen of stroomschema's.
Over het algemeen zul je in de broncode van software een grote verscheidenheid aan elementen aantreffen, zoals operators, functies, enz.ping, uitzonderingshandlers, enzovoort. Afhankelijk van de invoer van het programma worden sommige code-instructies mogelijk niet uitgevoerd. Het doel van statement coverage is om alle mogelijke paden, regels en instructies in de code te dekken.
Laten we dit verduidelijken aan de hand van een voorbeeld van hoe je de statement coverage berekent. We nemen twee verschillende scenario's om het percentage statement coverage voor elk scenario te controleren.
Bron 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: Als A = 3, B = 9
De in het geel gemarkeerde instructies zijn de instructies die volgens het scenario worden uitgevoerd. Aantal uitgevoerde instructies = 5, totaal aantal instructies = 7, dus de dekkingsgraad van de instructies = 5/7 = 71%.
Scenario 2: Als A = -3, B = -9
De in het geel gemarkeerde instructies zijn de instructies die volgens het scenario worden uitgevoerd. Aantal uitgevoerde instructies = 6, totaal aantal instructies = 7, dus de dekkingsgraad van de instructies = 6/7 = 85%.
Maar over het algemeen, zoals je ziet, worden alle verklaringen door beide scenario's gedekt. โโWe kunnen dus concluderen dat de algehele dekking van de verklaringen 100% is.
Wat valt er onder de Verklaringsdekking?
- Ongebruikte verklaringen
- Dood Code
- Ongebruikte takken
- Ontbrekende verklaringen
Beslissingsdekkingstests
Beslissingsdekking Beslissingsdekkingstesten zijn een white-box-testtechniek die de ware of onware uitkomsten van elke booleaanse expressie in de broncode rapporteert. Het doel van beslissingsdekkingstesten is om alle toegankelijke broncode te dekken en te valideren door te controleren of elke tak van elk mogelijk beslissingspunt minstens รฉรฉn keer wordt uitgevoerd.
Bij dit type code coverage kunnen expressies complex worden, waardoor het lastig is om 100% coverage te bereiken. Daarom worden verschillende methoden gebruikt om deze metriek te rapporteren. Deze methoden geven prioriteit aan de meest kritieke combinaties. Hoewel het vergelijkbaar is met branch coverage, biedt het een grotere gevoeligheid voor controlestromen.
Voorbeeld van beslissingsdekking
Beschouw de volgende code:
Demo(int a) { If (a > 5) a = a * 3 Print (a) }
Scenario 1: De waarde van a is 2. De uitkomst van de beslissing is "Nee". Als (a>5) is aangevinkt, is de dekkingsgraad van de beslissing 50%.
Scenario 2: De waarde van a is 6. De uitkomst van de beslissing is "Ja" als (a>5) is aangevinkt, dus de beslissingsdekking is 50%.
| Testgeval | Waarde van A | uitgang | Beslissingsdekking |
|---|---|---|---|
| 1 | 2 | 2 | 50% |
| 2 | 6 | 18 | 50% |
Testen van filiaaldekking
Branchedekking Branch coverage is een white-box testmethode waarbij elke uitkomst van een codemodule (instructie of lus) wordt getest. Het doel van branch coverage is ervoor te zorgen dat elke beslissingsvoorwaarde van elke vertakking minstens รฉรฉn keer wordt uitgevoerd. Het helpt bij het meten van het percentage onafhankelijke codesegmenten en het vinden van secties zonder vertakkingen.
Als de uitkomsten bijvoorbeeld binair zijn, moet u zowel de Ware als de Valse uitkomsten testen.
De formule om de vestigingsdekking te berekenen:
Voorbeeld van filiaaldekking
Om meer te leren over branch coverage, neem hetzelfde voorbeeld als eerder. Branch coverage houdt ook rekening met de onvoorwaardelijke vertakking.
| Testgeval | Waarde van A | uitgang | Beslissingsdekking | Branchedekking |
|---|---|---|---|---|
| 1 | 2 | 2 | 50% | 33% |
| 2 | 6 | 18 | 50% | 67% |
Voordelen van vestigingsdekking:
- Hiermee kunt u alle vertakkingen in de code valideren.
- Hiermee kunt u ervoor zorgen dat geen enkele vertakking leidt tot afwijkingen in de werking van het programma.
- Lost problemen op die ontstaan โโdoor het testen van de dekking van verklaringen.
- Hiermee kunt u gebieden vinden die niet door andere testmethoden worden onderzocht.
- Hiermee kunt u een kwantitatieve maatstaf voor code coverage vinden.
- Branch coverage negeert vertakkingen binnen booleaanse expressies.
Conditiedekking testen
ConditiedekkingCondition coverage, ofwel expressiedekking, is een testmethode die wordt gebruikt om de variabelen of subexpressies in een voorwaardelijke instructie te testen en te evalueren. Het doel van condition coverage is om de individuele uitkomsten voor elke logische voorwaarde te controleren. Condition coverage is gevoeliger voor de controlestroom dan beslissingsdekking. Bij deze vorm van dekking worden alleen expressies met logische operanden in overweging genomen.
Als een expressie bijvoorbeeld booleaanse bewerkingen zoals AND, OR of XOR bevat, geeft dat het totale aantal mogelijkheden aan. Condition coverage garandeert geen volledige decision coverage.
De formule om de conditiedekking te berekenen:
Voor een expressie met twee operanden zijn er vier mogelijke combinaties: TT, FF, TF en FT. Beschouw de invoer X=3, Y=4 (x b) ONWAAR, wat een conditiedekking van 1/4 = 25% oplevert.
Dekking van eindige toestandsmachines
De dekkingsmethode voor eindige toestandsmachines is ongetwijfeld de meest complexe code coverage-methode. Dit komt doordat deze methode zich richt op het gedrag van het ontwerp. Bij deze methode moet je kijken hoe vaak specifieke toestanden worden bezocht of doorlopen. Ook wordt gecontroleerd hoeveel sequenties er in een eindige toestandsmachine voorkomen.
Welk type Code Verzekering om uit te kiezen
Dit is zonder twijfel het moeilijkste antwoord om te geven. Om een โโdekkingsmethode te kiezen, moet de tester controleren of:
- De te testen code bevat een of meerdere onontdekte defecten.
- kosten van de mogelijke boete,
- kosten van reputatieschade,
- kosten van gemiste verkopen, enzovoort.
Hoe groter de kans dat defecten kostbare productiefouten veroorzaken, hoe ernstiger het dekkingsniveau dat u moet kiezen.
Code Dekking versus functionele dekking
| Code Dekking | Functionele dekking |
|---|---|
| Geeft aan hoe goed de broncode door uw testomgeving is getest. | Geeft aan in hoeverre de functionaliteit van het ontwerp door uw testopstelling is gedekt. |
| Gebruikt nooit een ontwerp specificatie. | Maakt gebruik van een ontwerpspecificatie. |
| Gemaakt door ontwikkelaars. | Uitgevoerd door testers. |
Code Dekkingsinstrumenten
Hieronder vindt u een lijst met belangrijke tools voor code coverage:
| Tool Naam | Beschrijving |
|---|---|
| Cobertura | Een open source tool voor code coverage. Het meet de testdekking door een codebase te instrumenteren en te analyseren welke regels code wel en welke niet worden uitgevoerd wanneer de testsuite draait. |
| Klaver | Klaver (OpenCloverDit verkort ook de testtijd doordat alleen de tests worden uitgevoerd 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 dekking op het niveau van klassen, methoden, regels en basisblokken, geaggregeerd op het niveau van bronbestanden, klassen en methoden. |
| Kalistick | Kalistick is een applicatie van derden die de code vanuit verschillende perspectieven analyseert. |
| CoView en CoAnt | Een tool voor code coverage waarmee je statistieken kunt verzamelen, mock-objecten kunt maken, code kunt testen, pad- en branch coverage kunt meten en meer. |
| Bullseye voor C++ | BullseyeCoverage is een code coverage-tool voor C++ en C. |
| Viszoeker | Sonar is een open source tool voor code coverage waarmee je de codekwaliteit kunt beheren. |
Voor- en nadelen van gebruik Code Dekking
| Voordelen | Nadelen |
|---|---|
| Handig om een โโkwantitatieve maatstaf voor codedekking te evalueren. | Zelfs als een specifieke functionaliteit niet in het ontwerp is geรฏmplementeerd, geeft de code coverage nog steeds 100% dekking aan. |
| Hiermee kunt u extra testgevallen aanmaken om de testdekking te vergroten. | Het is niet mogelijk om met behulp van code coverage vast te stellen of alle mogelijke waarden van een feature zijn getest. |
| Hiermee kunt u de delen van een programma vinden die niet door een reeks testgevallen worden getest. | Code De dekking geeft niet aan hoeveel en hoe goed je je redenering hebt onderbouwd. |






