Syklomatisk kompleksitet i programvaretesting (eksempel)
Hva er McCabes syklomatiske kompleksitet?
Syklomatisk kompleksitet i programvaretesting er en testmรฅling som brukes for รฅ mรฅle kompleksiteten til et program. Det er et kvantitativt mรฅl pรฅ uavhengige stier i kildekoden til et program. Syklomatisk kompleksitet kan beregnes ved รฅ bruke kontrollflytgrafer eller med hensyn til funksjoner, moduler, metoder eller klasser i et programvareprogram.
Uavhengig bane er definert som en bane som har minst รฉn kant som ikke har blitt krysset fรธr i noen andre baner.
Denne metrikken ble utviklet av Thomas J. McCabe i 1976, og den er basert pรฅ en kontrollflytrepresentasjon av programmet. Kontrollflyt viser et program som en graf som bestรฅr av noder og kanter.
I grafen representerer noder behandlingsoppgaver mens kanter representerer kontrollflyt mellom nodene.
Flytgrafnotasjon for et program
Flow Graph-notasjon for et program definerer flere noder koblet gjennom kantene. Nedenfor er flytdiagrammer for utsagn som if-else, While, until og normal sekvens av flyt.
Hvordan beregne syklomatisk kompleksitet
Matematisk representasjon:
Matematisk sett er det satt av uavhengige baner gjennom grafdiagrammet. Kodekompleksiteten til programmet kan defineres ved hjelp av formelen -
V(G) = E - N + 2
Hvor,
E โ Antall kanter
N โ Antall noder
V (G) = P + 1
Hvor P = Antall predikatnoder (node โโsom inneholder 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;
Flytdiagram for dette programmet vil vรฆre
Beregning matematisk,
- V(G) = 9 โ 7 + 2 = 4
- V(G) = 3 + 1 = 4 (Tilstandsnoder er 1,2 og 3 noder)
- Basissett โ Et sett med mulig utfรธrelsesbane 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
Egenskaper for syklomatisk kompleksitet
Fรธlgende er egenskapene til syklomatisk kompleksitet:
- V (G) er det maksimale antallet uavhengige baner i grafen
- V (G) >=1
- G vil ha รฉn bane hvis V (G) = 1
- Minimer kompleksiteten til 10
Hvordan er denne beregningen nyttig for programvaretesting?
Basis Path-testing er en White Box-teknikk, og den garanterer รฅ utfรธre minst รฉn setning under testing. Den sjekker hver lineรฆrt uavhengig bane gjennom programmet, som betyr antall testtilfeller, vil tilsvare den syklomatiske kompleksiteten til programmet.
Denne beregningen er nyttig pรฅ grunn av egenskapene til syklomatisk kompleksitet (M) -
- M kan vรฆre antall testtilfeller for รฅ oppnรฅ grendekning (รธvre grense)
- M kan vรฆre antall baner gjennom grafene. (nedre grense)
Tenk pรฅ dette eksemplet -
If (Condition 1) Statement 1 Else Statement 2 If (Condition 2) Statement 3 Else Statement 4
Syklomatisk kompleksitet for dette programmet vil vรฆre 8-7+2=3.
Siden kompleksiteten har beregnet som 3, er tre testtilfeller nรธdvendige for รฅ fullfรธre banedekningen for eksemplet ovenfor.
Fremgangsmรฅte som skal fรธlges:
Fรธlgende trinn bรธr fรธlges for beregning av syklomatisk kompleksitet og design av testtilfeller.
Trinn 1 โ Konstruksjon av graf med noder og kanter fra koden
Trinn 2 โ Identifisering av uavhengige veier
Trinn 3 โ Beregning av syklomatisk kompleksitet
Trinn 4 โ Design av testcaser
Nรฅr det grunnleggende settet er dannet, TESTKASSER skal skrives for รฅ utfรธre alle banene.
Mer om V (G)
Syklomatisk kompleksitet kan beregnes manuelt hvis programmet er lite. Automatiserte verktรธy mรฅ brukes hvis programmet er veldig komplekst da dette innebรฆrer flere flytgrafer. Basert pรฅ kompleksitetstall kan teamet konkludere om handlingene som mรฅ tas for รฅ mรฅle.
Fรธlgende tabell gir en oversikt over kompleksitetstallet og den tilsvarende betydningen av v (G):
| kompleksitetsnummer | Betydning |
|---|---|
| 1-10 | Strukturert og velskrevet kode
Hรธy testbarhet Kostnad og innsats er mindre |
| 10-20 | Kompleks kode
Middels testbarhet Kostnad og innsats er middels |
| 20-40 | Veldig kompleks kode
Lav testbarhet Kostnader og innsats er hรธye |
| > 40 | Ikke testbar i det hele tatt
Svรฆrt hรธye kostnader og innsats |
Verktรธy for beregning av syklomatisk kompleksitet:
Mange verktรธy er tilgjengelige for รฅ bestemme kompleksiteten til applikasjonen. Noen kompleksitetsberegningsverktรธy brukes for spesifikke teknologier. Kompleksiteten kan bli funnet ved antall beslutningspunkter i et program. Beslutningspunktene er if, for, for-each, while, do, catch, saksuttalelser i en kildekode.
Eksempler pรฅ verktรธy er
- OCLint โ Statisk kodeanalysator for C og relaterte sprรฅk
- Reflector Add In โ Kodeberegninger for .NET-sammenstillinger
- Gmetrikk โ Finn beregninger i Java relaterte applikasjoner
Bruk av syklomatisk kompleksitet:
Syklomatisk kompleksitet kan vise seg รฅ vรฆre svรฆrt nyttig i
- Hjelper utviklere og testere med รฅ bestemme uavhengige banekjรธringer
- Utviklere kan forsikre at alle banene har blitt testet minst รฉn gang
- Hjelper oss รฅ fokusere mer pรฅ de avdekkede stiene
- Forbedre kodedekningen i Engineering programvare
- Vurder risikoen forbundet med applikasjonen eller programmet
- Bruk av disse beregningene tidlig i syklusen reduserer mer risiko for programmet
Konklusjon
Cyclomatic Complexity er programvaremetrikk som er nyttig for strukturert eller Hvit Box Testing. Det brukes hovedsakelig til รฅ evaluere kompleksiteten til et program. Hvis beslutningspunktene er flere, er kompleksiteten til programmet mer. Hvis programmet har hรธy kompleksitet, er sannsynligheten for feil hรธy med รธkt tid for vedlikehold og feilsรธking.



