Padtesten en basispadtesten in software met voorbeelden

⚡ Slimme samenvatting

Basis Path Testing is een white-box-techniek die testgevallen afleidt uit de logische paden door een programma, waarbij gebruik wordt gemaakt van een controlestroomgrafiek en cyclomatische complexiteit om de minimale onafhankelijke padenset te vinden.

  • 🗺️ Kernidee: Testgevallen worden afgeleid van de codestructuur, niet van het eisenpakket.
  • 🔢 Vier stappen: Teken de controlestroomgrafiek, bereken de cyclomatische complexiteit, leid de basisset af en schrijf één test per pad.
  • 📐 Aantal testgevallen: Het aantal onafhankelijke paden is gelijk aan de cyclomatische complexiteit, wat een objectief doel oplevert.
  • 🔄 Hybride methode: Het combineert branch-testen en pad-testen om maximale dekking te bereiken met minimale tests.
  • ✅ Dekkingsgarantie: Door de basisset uit te voeren, wordt elke instructie in de module minstens één keer uitgevoerd.
  • ⚠️ Bekende limiet: Het kan geen ontbrekende vereisten vinden, omdat het alleen code test die al bestaat.

Padtesten Basis Padtesten

Wat is padtesten bij het testen van software?

Padtesten is een structurele testmethode waarbij de broncode van een programma wordt gebruikt om elk mogelijk uitvoerbaar pad te vinden. Het helpt om alle fouten in een stukje code te identificeren. Deze methode is ontworpen om alle of geselecteerde paden via een computerprogramma uit te voeren.

Elk niet-triviaal programma bevat veel mogelijke uitvoeringspaden. Het testen van al deze paden is zowel moeilijk als tijdrovend, en de meeste overlappen elkaar. Basispadtesten verminderen die redundantie door de kleinste set paden te identificeren die elke instructie en elke vertakking minstens één keer uitvoert.

Basispadtesten in software-engineering

Basispad testen in software-engineering is een Wit Box Testen methode waarbij testgevallen worden gedefinieerd op basis van stromen of logische paden die door het programma kunnen worden genomen. Het doel van basispadtesten is het definiëren van het aantal onafhankelijke paden, zodat het benodigde aantal testgevallen expliciet kan worden gedefinieerd om de testdekking te maximaliseren.

In software engineeringBasispadtesten omvatten de uitvoering van alle mogelijke blokken in een programma en bereiken een maximale paddekking met het minste aantal testgevallen. Het is een hybride methode van vertakkingstesten en padtestmethoden.

Een eenvoudig voorbeeld maakt het idee concreet.

Basispadtesten in software-engineering

Het bovenstaande stroomdiagram bevat voorwaardelijke instructies, waardoor de besturing de uitgang via meer dan één route kan bereiken. Er zijn drie onafhankelijke paden nodig om dit te realiseren:

  • Pad 1: 1,2,3,5,6, 7
  • Pad 2: 1,2,4,5,6, 7
  • Pad 3: 1, 6, 7

Hoe teken je een controlestroomgrafiek?

Elke stap van het testen van basispaden is afhankelijk van de controlestroomgrafiek, dus het is belangrijk om nauwkeurig te beschrijven hoe deze is opgebouwd.

  • Knooppunt: Een reeks instructies die altijd samen worden uitgevoerd, weergegeven als een cirkel. Een reeks instructies zonder vertakkingen valt samen tot één enkel knooppunt.
  • Edge: Een overdracht van controle van het ene knooppunt naar het volgende, weergegeven als een pijl. Alleen via de randen kan de controle zich verplaatsen.
  • Predicaatknooppunt: Een knooppunt dat een voorwaarde bevat, met twee of meer uitgaande randen. Deze bepalen de complexiteitswaarde.
  • Regio: Een gebied begrensd door randen en knooppunten. Het aantal regio's plus één is tevens gelijk aan de cyclomatische complexiteit.

Neem bijvoorbeeld een korte module met twee beslissingen:

if (a > b) {          // node 1, predicate
    max = a;          // node 2
} else {
    max = b;          // node 3
}
if (max > limit) {    // node 4, predicate
    alert();          // node 5
}
return max;           // node 6

De graaf heeft 6 knooppunten en 6 randen, wat volgens de randformule V(G) = 6 – 6 + 2 = 2 oplevert. De predicaattelling geeft hetzelfde antwoord sneller: 2 beslissingen plus 1 is gelijk aan 3 onafhankelijke paden door de twee takken samen. Gebruik de vorm die je betrouwbaar kunt berekenen en controleer het resultaat met de andere.

Twee regels die de meeste fouten voorkomen. Ten eerste een samengestelde aandoening zoals als (x > 0 && y > 0) Dit telt als twee predicaatknooppunten, niet één, omdat de kortsluiting een tweede beslissing creëert. Ten tweede draagt ​​een lus één predicaatknooppunt bij, ongeacht hoe vaak deze wordt herhaald.

Stappen voor het testen van basispaden

De basisstappen die betrokken zijn bij het testen van basispaden omvatten:

  • Teken een controlegrafiek (om verschillende programmapaden te bepalen)
  • Berekenen Cyclomatische complexiteit (statistieken om het aantal onafhankelijke paden te bepalen)
  • Zoek een basisset van paden
  • Genereer een testgevallen om elk pad te oefenen

Voordelen en beperkingen van basispadtesten

Voordelen van basispadtesten

  • Het helpt het aantal overbodige tests te verminderen
  • Het vestigt de aandacht op programmalogica
  • Het vervangt willekeurige selectie van testgevallen door een analytische basis.
  • Testgevallen waarbij de oefenbasisset elke instructie in een programma minstens één keer uitvoert

Beperkingen van basispadtesten

  • Het kan de ontbrekende code niet vinden. Een vereiste die nooit is geïmplementeerd, heeft geen pad en er wordt dus geen test voor gegenereerd. Testen op basis van het basispad moet worden gecombineerd met testen op basis van de vereisten.
  • Het aantal paden neemt snel toe. Geneste lussen en samengestelde voorwaarden verhogen de complexiteit snel, en een module met een V(G) van meer dan 20 wordt op deze manier onpraktisch om te behandelen.
  • Dekking is niet hetzelfde als correctheid. Het uitvoeren van een pad bewijst dat de code werkt, niet dat deze het juiste antwoord oplevert. Elke test heeft nog steeds een zinvolle bewering nodig.
  • Data-afhankelijke paden. Sommige paden zijn alleen bereikbaar met specifieke combinaties van invoerwaarden die moeilijk of zelfs onmogelijk te construeren zijn.

Veelgestelde vragen

Padtesten zijn erop gericht elk mogelijk pad uit te voeren, wat onpraktisch is in modules die lussen bevatten. Basispadtesten voeren alleen de onafhankelijke paden uit, een veel kleinere set die nog steeds elke instructie en vertakking dekt.

Precies de cyclomatische complexiteit van de module. Als V(G) 4 is, bestaan ​​er 4 onafhankelijke paden en zijn er 4 testgevallen nodig voor volledige dekking van de vertakkingen.

Nee. Het test alleen code die al bestaat, dus een vereiste die nooit is geïmplementeerd, levert geen pad en geen falende test op. De twee technieken vullen elkaar aan.

AI-tools genereren invoerwaarden die specifieke vertakkingen bereiken, wat het traagste handmatige onderdeel van het werk is. Ze signaleren ook onbereikbare paden die duiden op dode code.

Ja. Statische analysetools genereren al jaren controlestroomgrafieken en complexiteitscijfers, en AI-ondersteunde tools voegen daar nu suggesties voor testinvoer voor elk afzonderlijk pad aan toe.

Vat dit bericht samen met: