Wat is Takdekking (branch coverage)?

Dekkingscriterium voor whiteboxtesten dat vereist dat zowel de ware als de onware tak van elke beslissing (zoals een if-statement) in een programma minstens één keer wordt uitgevoerd. Het wordt ook beslissingsdekking (decision coverage) of C1 genoemd, en is sterker dan statementdekking (C0), die vereist dat elk statement minstens één keer wordt uitgevoerd.

Japanse benaming: 分岐網羅

“Takdekking (branch coverage)” komt voor in 2 oefenvragen uit 1 onderwerpen, bijv. Softwareontwikkeling en projectmanagement.

Vakgebied: Softwareontwikkeling en projectmanagement

Verschil met statementdekking

Statementdekking (C0) is bereikt zodra elk statement minstens één keer is uitgevoerd. Bij if (a) { S1; } zonder else voert één testgeval met a waar S1 uit en bereikt zo statementdekking, maar de tak waarin a onwaar is en de uitvoering gewoon doorgaat, wordt nooit uitgevoerd. Takdekking (C1) vereist ook die onware kant, waardoor fouten zoals ontbrekende verwerking die nodig is als a onwaar is gemakkelijker worden gevonden. Wie takdekking bereikt, bereikt ook statementdekking.

Verband met conditiedekking en samengestelde voorwaarden

Bestaat een beslissing uit meerdere voorwaarden, zoals bij „A en B”, dan vereist conditiedekking dat elke afzonderlijke voorwaarde zowel waar als onwaar wordt. De twee testgevallen (A = waar, B = onwaar) en (A = onwaar, B = waar) bereiken conditiedekking, maar de beslissing is in beide onwaar, dus takdekking is niet bereikt. Daarom worden criteria gebruikt zoals beslissings-/conditiedekking, die aan beide voldoet, en MC/DC (modified condition/decision coverage), dat controleert of elke voorwaarde zelfstandig de uitkomst van de beslissing beïnvloedt. MC/DC is vereist op het hoogste veiligheidsniveau van DO-178C, de norm voor software in luchtvaartuigen, en wordt ook sterk aanbevolen bij ASIL D in ISO 26262, de norm voor functionele veiligheid van wegvoertuigen.

Dekkingscijfers lezen

Dekking wordt uitgedrukt als het aantal uitgevoerde takken ÷ het totale aantal takken en kan worden gemeten met functies van compilers of testtools. Zelfs 100% dekking vindt geen verwerking die wel in de specificatie staat maar nooit is geïmplementeerd, en geen fouten waarvan het resultaat van de waarden afhangt. Dekking moet worden gebruikt als hulpmiddel om de delen te vinden die tests niet hebben doorlopen, in combinatie met blackboxtesten. Hetzelfde idee wordt bij hardwareverificatie gebruikt als codedekking van RTL.

Nu oefenen: vragen over Takdekking (branch coverage)

De waarheidswaarden van a, b en c kunnen onafhankelijk van elkaar worden gekozen. Hoeveel testgevallen zijn er voor de code „if (a) { S1; } if (b) { S2; } if (c) { S3; }” minimaal nodig om takdekking te bereiken (de uitkomsten waar en onwaar van elke beslissing elk minstens één keer uitvoeren)?

  1. A1
  2. B2
  3. C8
Antwoord en toelichting tonen

Antwoord: B. 2

Elk van de drie beslissingen moet in beide richtingen worden genomen, waar en onwaar. Met de twee testgevallen (a, b en c allemaal waar) en (allemaal onwaar) worden de uitkomsten waar en onwaar van elke beslissing elk één keer uitgevoerd, dus het minimum is 2. Eén testgeval (allemaal waar) voert alle statements S1 tot S3 uit en bereikt zo statementdekking, maar de onware takken (de paden die niets doen en doorgaan) worden niet uitgevoerd. 8 is het aantal van alle 2³ = 8 combinaties van waar en onwaar.

Veelgestelde vragen

Wat betekenen C0 en C1?

Het zijn afkortingen voor dekkingscriteria: C0 is statementdekking (elk statement minstens één keer uitgevoerd) en C1 is takdekking (zowel de ware als de onware kant van elke tak minstens één keer uitgevoerd). Wie C1 bereikt, bereikt ook C0.

Moet 100% takdekking het doel zijn?

Voor veiligheidsgerelateerde software kunnen normen of bedrijfsregels doelen vastleggen voor takdekking of MC/DC. Anders is het belangrijker om bij elke niet-uitgevoerde tak na te gaan of die echt overbodig is of dat er tests ontbreken, dan vast te houden aan 100%. Code die alleen in abnormale situaties wordt uitgevoerd, moet worden getest, bijvoorbeeld met foutinjectie.

“Takdekking (branch coverage)” in de toelichting

Vragen met “Takdekking (branch coverage)” (2)

  1. De waarheidswaarden van a, b en c kunnen onafhankelijk van elkaar worden gekozen. Hoeveel testgevallen zijn er voor de code „if (a) { S1; } if (b) { S2; } if (c) { S3; }” minimaal nodig om takdekking te bereiken (de uitkomsten waar en onwaar van elke beslissing elk minstens één keer uitvoeren)?
  2. Voor de beslissing „A en B” (A en B zijn voorwaarden waarvan de waarheidswaarden onafhankelijk kunnen worden gekozen) zijn twee testgevallen uitgevoerd: (A = waar, B = onwaar) en (A = onwaar, B = waar). Welke uitspraak over de dekkingscriteria is juist?

Verwante termen

Kortsluitevaluatie (short-circuit evaluation) Agile ontwikkeling (agile development) Blackboxtesten (black-box testing) CI/CD (continuous integration en continuous delivery) Earned value management (EVM) Equivalentiepartitionering (equivalence partitioning) Grenswaardenanalyse (boundary value analysis) Kritiekepadmethode (CPM) Scrum SLA (service level agreement)

Naar de woordenlijst