Designpredikat

Designpredikat är en metod som uppfanns av Thomas McCabe, för att kvantifiera komplexiteten i integrationen av två mjukvaruenheter. Var och en av de fyra typerna av designpredikat har en tillhörande integrationskomplexitetsklassificering. För kodbitar som tillämpar mer än ett designpredikat kan integrationskomplexitetsklassificeringar kombineras.

Summan av integrationskomplexiteten för en kodenhet plus en är det maximala antalet testfall som krävs för att utöva integrationen fullt ut. Även om en testingenjör vanligtvis kan minska detta genom att täcka så många tidigare upptäckta designpredikat som möjligt med varje nytt test. Vissa kombinationer av designpredikat kan också vara logiskt omöjliga.

Typer av samtal

Ovillkorligt samtal

Enhet A anropar alltid enhet B. Denna har en integrationskomplexitet på 0. Till exempel:

enhetA::funktionA() { enhetB->funktionB(); }

Villkorligt samtal

Enhet A kan anropa enhet B eller inte. Denna integration har en komplexitet på 1 och behöver två tester: en som anropar B och en som inte gör det.

unitA::functionA() { if (villkor) unitB->functionB(); }

Ömsesidigt exklusivt villkorligt samtal

Det här är som ett programmeringsspråks switch-sats . Enhet A anropar exakt en av flera möjliga enheter. Integrationskomplexiteten är n - 1, där n är antalet möjliga enheter att anropa.

unitA::functionA() { switch (condition) { fall 1: unitB->functionB(); ha sönder; fall 2: enhetC->funktionC(); ha sönder; ... standard: enhetN->funktionN(); ha sönder; } }

Iterativt samtal

I ett iterativt samtal anropar enhet A enhet B minst en gång, men kanske fler. Denna integration har en komplexitet på 1. Den kräver också två test: ett som anropar enhet B en gång och ett test som anropar det mer än en gång.

unitA::functionA() { do { unitB->functionB(); } while (villkor); }

Kombinera samtal

Varje särskild integration kan kombinera flera typer av samtal. Till exempel kan enhet A anropa enhet B eller inte; och om den gör det kan den kalla den en eller flera gånger. Denna integration kombinerar ett villkorligt anrop, med dess integrationskomplexitet på 1, och ett iterativt anrop, med dess integrationskomplexitet på 1. Den kombinerade integrationskomplexiteten är totalt 2.

unitA::functionA() { if (someNumber > 0) { for ( i = 0 ; i < someNumber ; i++ ) { unitB->functionB(); } } }

Antal tester

Eftersom antalet nödvändiga tester är den totala integrationskomplexiteten plus en, skulle denna integration kräva 3 tester. I ett, där ett antal inte är större än 0, anropas inte enhet B. I en annan, där someNumber är 1, anropas enhet B en gång. Och i finalen, someNumber är större än 1, enhet B anropas mer än en gång.

Se även