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.

  • ๐ŸŽฏ Definitie: Code Testdekking geeft aan hoeveel van de broncode je tests daadwerkelijk uitvoeren.
  • ๐Ÿ“Š Methoden: Er bestaan โ€‹โ€‹vijf methoden: statement coverage, decision coverage, branch coverage, condition coverage en finite state machine coverage.
  • ๐Ÿงฉ Verklaring versus vertakking: De dekking van de verklaring controleert de regels, terwijl de dekking van de vestiging alle mogelijke uitkomsten van beslissingen controleert.
  • โ€‹ Code versus functioneel: Code Dekkingsmaatregelen die in de code zijn toegepast; functionele dekkingsmaatregelen die aan de vereisten voldoen.
  • ๏ธ Tools: Cobertura, OpenCloverEMMA en Sonar automatiseren de meting van de dekking.
  • ๐Ÿค– AI-assistentie: AI-tools genereren automatisch tests en brengen ongeteste, risicovolle dekkingshiaten aan het licht.

Code Dekkingshandleiding

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.

Verklaring Dekking

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

Dekkingsscenario 1 van de verklaring

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

Dekkingsscenario 2 van de verklaring

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?

  1. Ongebruikte verklaringen
  2. Dood Code
  3. Ongebruikte takken
  4. 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.

Beslissingsdekkingstests

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:

Formule voor takdekking

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:

Formule voor conditiedekking

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.

Veelgestelde vragen

Veel teams streven naar 70 tot 80% als een haalbaar doel. Het bereiken van 100% is zelden kosteneffectief. Richt je op het afdekken van kritieke, risicovolle logica in plaats van รฉรฉn enkel getal na te streven voor de gehele codebase.

Nee. Volledige testdekking bewijst dat elke regel code is uitgevoerd, niet dat elke invoer, waarde of vereiste is gevalideerd. Logische fouten en ontbrekende functionaliteiten kunnen nog steeds onopgemerkt blijven, dus testdekking is een aanvulling op, en geen vervanging van, een goed testontwerp.

Code Testdekking meet hoeveel broncode er tijdens het testen wordt uitgevoerd. Testdekking is een breder begrip. tracKing beoordeelt hoe goed tests voldoen aan de eisen, kenmerken en risico's. Code Dekking is รฉรฉn factor in de totale testdekking.

Nee. Je kunt 100% statement coverage bereiken terwijl je vertakkingen ongetest laat, zoals een ontbrekend else-pad. Branch coverage (beslissingsdekking) is sterker omdat het statement coverage omvat en elke mogelijke uitkomst test.

AI analyseert broncode en bestaande tests om ongeteste, risicovolle paden te identificeren en suggereert of genereert vervolgens nieuwe testgevallen. Machine learning geeft ook prioriteit aan welke tests moeten worden uitgevoerd, waardoor de feedbacktijd wordt verkort en de kwaliteit behouden blijft.ping Hoge dekking.

Ja. AI-tools zoals Diffblue Cover scannen code en schrijven autonoom unit tests voor niet-gedekte logica. Ze richten zich op risicovolle vertakkingen en voorwaarden, waardoor de testdekking met veel minder handmatige inspanning wordt verhoogd.

OpenClover Het meet de dekking van statements, branches en methoden en verzamelt meer dan 20 statistieken. Cobertura, EMMA, en JaCoCo zijn andere veelgebruikte gratis opties voor Java projecten.

Bij een aangepaste dekking van voorwaarden/beslissingen moet elke voorwaarde in een beslissing onafhankelijk van elkaar van invloed zijn op de uitkomst. Deze norm is strenger dan de dekking van afzonderlijke takken en is verplicht voor veiligheidskritische software, zoals avionica, volgens de DO-178C-standaard.

Vat dit bericht samen met: