Cyklomatisk kompleksitet i softwaretestning (eksempel)
Hvad er McCabes cyklomatiske kompleksitet?
Cyklomatisk kompleksitet i softwaretestning er en testmetrik, der bruges til at mรฅle kompleksiteten af โโet softwareprogram. Det er et kvantitativt mรฅl for uafhรฆngige stier i kildekoden til et softwareprogram. Cyklomatisk kompleksitet kan beregnes ved at bruge kontrolflowgrafer eller med hensyn til funktioner, moduler, metoder eller klasser i et softwareprogram.
Uafhรฆngig sti er defineret som en sti, der har mindst รฉn kant, som ikke er blevet krydset fรธr i nogen andre stier.
Denne metrik blev udviklet af Thomas J. McCabe i 1976, og den er baseret pรฅ en kontrolflow-reprรฆsentation af programmet. Kontrolflow viser et program som en graf, der bestรฅr af noder og kanter.
I grafen reprรฆsenterer noder behandlingsopgaver, mens kanter reprรฆsenterer kontrolflow mellem noderne.
Flowgrafnotation for et program
Flow Graph-notation for et program definerer flere noder forbundet gennem kanterne. Nedenfor er flowdiagrammer for udsagn som if-else, While, indtil og normal sekvens af flow.
Sรฅdan beregnes cyklomatisk kompleksitet
Matematisk fremstilling:
Matematisk er det et sรฆt af uafhรฆngige stier gennem grafdiagrammet. Programmets kodekompleksitet kan defineres ved hjรฆlp af formlen -
V(G) = E - N + 2
Hvor,
E โ Antal kanter
N โ Antal noder
V (G) = P + 1
Hvor P = Antal prรฆdikatknuder (node, der indeholder betingelse)
Eksempel -
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;
Flow graf for dette program vil vรฆre
Beregning matematisk,
- V(G) = 9 โ 7 + 2 = 4
- V(G) = 3 + 1 = 4 (Betingelsesknudepunkter er 1,2 og 3 knudepunkter)
- Basissรฆt โ Et sรฆt mulige udfรธrelsesstier for et 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
Egenskaber af cyklomatisk kompleksitet
Fรธlgende er egenskaberne ved cyklomatisk kompleksitet:
- V (G) er det maksimale antal uafhรฆngige stier i grafen
- V(G) >=1
- G vil have รฉn vej, hvis V (G) = 1
- Minimer kompleksiteten til 10
Hvordan er denne metrik nyttig til softwaretest?
Basis Path-test er en af โโWhite box-teknikken, og den garanterer at udfรธre mindst รฉn sรฆtning under testning. Den kontrollerer hver lineรฆrt uafhรฆngig sti gennem programmet, som betyder antal testcases, vil svare til programmets cyklomatiske kompleksitet.
Denne metrik er nyttig pรฅ grund af egenskaber af cyklomatisk kompleksitet (M) -
- M kan vรฆre antallet af testcases for at opnรฅ grendรฆkning (Upper Bound)
- M kan vรฆre antallet af stier gennem graferne. (Nedre grรฆnse)
Overvej dette eksempel -
If (Condition 1) Statement 1 Else Statement 2 If (Condition 2) Statement 3 Else Statement 4
Cyklomatisk kompleksitet for dette program vil vรฆre 8-7+2=3.
Da kompleksiteten er beregnet til 3, er tre testcases nรธdvendige for at fuldfรธre stidรฆkningen for ovenstรฅende eksempel.
Trin, der skal fรธlges:
Fรธlgende trin skal fรธlges for beregning af cyklomatisk kompleksitet og design af testcases.
Trin 1 โ Konstruktion af graf med noder og kanter fra koden
Trin 2 โ Identifikation af selvstรฆndige veje
Trin 3 โ Beregning af cyklomatisk kompleksitet
Trin 4 โ Design af testcases
Nรฅr det grundlรฆggende sรฆt er dannet, TESTCASES skal skrives for at udfรธre alle stierne.
Mere om V (G)
Cyklomatisk kompleksitet kan beregnes manuelt, hvis programmet er lille. Automatiserede vรฆrktรธjer skal bruges, hvis programmet er meget komplekst, da dette involverer flere flowgrafer. Baseret pรฅ kompleksitetstal kan teamet konkludere om de handlinger, der skal tages for at mรฅle.
Fรธlgende tabel giver et overblik over kompleksitetstallet og den tilsvarende betydning af v (G):
| Kompleksitetsnummer | Betydning |
|---|---|
| 1-10 | Struktureret og velskrevet kode
Hรธj testbarhed Omkostninger og indsats er mindre |
| 10-20 | Kompleks kode
Middel testbarhed Omkostninger og indsats er medium |
| 20-40 | Meget kompleks kode
Lav testbarhed Omkostninger og indsats er hรธje |
| > 40 | Slet ikke testbar
Meget hรธje omkostninger og indsats |
Vรฆrktรธjer til beregning af cyklomatisk kompleksitet:
Mange vรฆrktรธjer er tilgรฆngelige til at bestemme kompleksiteten af โโapplikationen. Nogle kompleksitetsberegningsvรฆrktรธjer bruges til specifikke teknologier. Kompleksiteten kan findes ved antallet af beslutningspunkter i et program. Beslutningspunkterne er hvis, for, for-each, while, do, catch, case-udsagn i en kildekode.
Eksempler pรฅ vรฆrktรธjer er
- OCLint โ Statisk kodeanalysator til C og relaterede sprog
- Reflector Add In โ Kodemetrikker for .NET-samlinger
- Gmetrics โ Find metrics i Java relaterede applikationer
Anvendelser af cyklomatisk kompleksitet:
Cyklomatisk kompleksitet kan vise sig at vรฆre meget nyttig i forhold til
- Hjรฆlper udviklere og testere med at bestemme uafhรฆngige stiudfรธrelser
- Udviklere kan forsikre, at alle stierne er blevet testet mindst รฉn gang
- Hjรฆlper os med at fokusere mere pรฅ de afdรฆkkede veje
- Forbedre kodedรฆkning i Software Engineering
- Vurder risikoen forbundet med applikationen eller programmet
- Brug af disse mรฅlinger tidligt i cyklussen reducerer stรธrre risiko for programmet
Konklusion
Cyklomatisk kompleksitet er software-metrik, der er nyttig til struktureret eller Hvid Box Test. Det bruges hovedsageligt til at evaluere kompleksiteten af โโet program. Hvis beslutningspunkterne er flere, sรฅ er kompleksiteten af โโprogrammet mere. Hvis programmet har et hรธjt kompleksitetstal, er sandsynligheden for fejl hรธj med รธget tid til vedligeholdelse og fejlfinding.


.png)
.png)