Cyklomatisk komplexitet i mjukvarutestning (exempel)

Vad är McCabes cyklomatiska komplexitet?

Cyklomatisk komplexitet i mjukvarutestning är ett testmått som används för att mäta komplexiteten hos ett program. Det är ett kvantitativt mått på oberoende sökvägar i källkoden för ett program. Cyklomatisk komplexitet kan beräknas genom att använda styrflödesgrafer eller med avseende på funktioner, moduler, metoder eller klasser inom ett program.

Oberoende bana definieras som en bana som har minst en kant som inte har korsat tidigare i några andra banor.

Detta mått utvecklades av Thomas J. McCabe 1976 och är baserat på en kontrollflödesrepresentation av programmet. Kontrollflödet visar ett program som en graf som består av noder och kanter.

I grafen representerar noder bearbetningsuppgifter medan kanter representerar kontrollflödet mellan noderna.

McCabes cyklomatiska komplexitet

Flödesgrafnotation för ett program

Flödesgrafnotation för ett program definierar flera noder kopplade genom kanterna. Nedan finns flödesdiagram för påståenden som if-else, While, tills och normal flödessekvens.

Flödesgrafnotation för ett program

Hur man beräknar cyklomatisk komplexitet

Matematisk representation:

Matematiskt är det uppsättning av oberoende vägar genom grafdiagrammet. Programmets kodkomplexitet kan definieras med formeln -

V(G) = E - N + 2

Var,

E – Antal kanter

N – Antal noder

V (G) = P + 1

Där P = Antal predikatnoder (nod som innehåller villkor)

Exempel -

i = 0;
n=4; //N-Number of nodes present in the graph

while (i<n-1) do
j = i + 1;

while (j<n) do

if A[i]<A[j] then
swap(A[i], A[j]);

end do;
j=j+1;

end do;

Flödesdiagram för detta program kommer att vara

Beräkna cyklomatisk komplexitet

Beräkna matematiskt,

  • V(G) = 9 – 7 + 2 = 4
  • V(G) = 3 + 1 = 4 (villkorsnoder är 1,2, 3 och XNUMX noder)
  • Grunduppsättning – En uppsättning möjliga körvägar för ett program
  • 1, 7
  • 1, 2, 6, 1, 7
  • 1, 2, 3, 4, 5, 2, 6, 1, 7
  • 1, 2, 3, 5, 2, 6, 1, 7

Egenskaper av cyklomatisk komplexitet

Följande är egenskaperna hos cyklomatisk komplexitet:

  1. V (G) är det maximala antalet oberoende vägar i grafen
  2. V (G) >=1
  3. G kommer att ha en väg om V (G) = 1
  4. Minimera komplexiteten till 10

Hur är detta mått användbart för programvarutestning?

Basis Path-testning är en av White box-tekniken och den garanterar att minst en sats körs under testning. Den kontrollerar varje linjärt oberoende väg genom programmet, som betyder antal testfall, kommer att motsvara programmets cyklomatiska komplexitet.

Detta mått är användbart på grund av egenskaperna för cyklomatisk komplexitet (M) -

  1. M kan vara antal testfall för att uppnå grentäckning (övre gräns)
  2. M kan vara antal vägar genom graferna. (nedre gräns)

Tänk på det här exemplet -

If (Condition 1)
Statement 1

Else
Statement 2

If (Condition 2)
Statement 3

Else
Statement 4

Cyklomatisk komplexitet för detta program kommer att vara 8-7+2=3.

Eftersom komplexiteten har beräknats som 3, är tre testfall nödvändiga för att fullständig vägtäckning för exemplet ovan.

Steg som ska följas:

Följande steg bör följas för beräkning av cyklomatisk komplexitet och design av testfall.

steg 1 – Konstruktion av graf med noder och kanter från koden

steg 2 – Identifiering av oberoende vägar

steg 3 – Cyklomatisk komplexitetsberäkning

steg 4 – Design av testfall

När grunduppsättningen väl är bildad, TESTFALL bör skrivas för att köra alla sökvägar.

Mer om V (G)

Cyklomatisk komplexitet kan beräknas manuellt om programmet är litet. Automatiserade verktyg måste användas om programmet är mycket komplext eftersom det innebär fler flödesdiagram. Baserat på komplexitetsnummer kan teamet dra slutsatser om de åtgärder som måste vidtas för åtgärd.

Följande tabell ger en översikt över komplexitetstalet och motsvarande betydelse för v (G):

Komplexitetsnummer Betydelse
1-10 Strukturerad och välskriven kod

Hög testbarhet

Kostnad och ansträngning är mindre

10-20 Komplex kod

Medium testbarhet

Kostnad och ansträngning är Medium

20-40 Mycket komplex kod

Låg testbarhet

Kostnaden och ansträngningen är höga

> 40 Inte alls testbar

Mycket hög kostnad och ansträngning

Verktyg för beräkning av cyklomatisk komplexitet:

Många verktyg finns tillgängliga för att bestämma applikationens komplexitet. Vissa verktyg för komplexitetsberäkning används för specifika tekniker. Komplexiteten kan hittas av antalet beslutspunkter i ett program. Beslutspunkterna är om, för, för varje, medan, gör, fånga, falluttalanden i en källkod.

Exempel på verktyg är

  • OCLint – Statisk kodanalysator för C och relaterade språk
  • Reflector Add In – Kodmått för .NET-sammansättningar
  • Gmetrik – Hitta mätvärden i Java relaterade applikationer

Användning av cyklomatisk komplexitet:

Cyklomatisk komplexitet kan visa sig vara till stor hjälp

  • Hjälper utvecklare och testare att bestämma oberoende sökvägskörningar
  • Utvecklare kan försäkra att alla vägar har testats åtminstone en gång
  • Hjälper oss att fokusera mer på de oupptäckta vägarna
  • Förbättra kodtäckningen i Mjukvaruutveckling
  • Utvärdera risken förknippad med applikationen eller programmet
  • Att använda dessa mätvärden tidigt i cykeln minskar risken för programmet

Slutsats

Cyclomatic Complexity är mjukvarumått som är användbart för strukturerad eller White Box Testning. Det används främst för att utvärdera komplexiteten hos ett program. Om beslutspunkterna är fler, är programmets komplexitet mer. Om programmet har högt komplexitetstal är sannolikheten för fel hög med ökad tid för underhåll och felsökning.