what is cyclomatic complexity learn with an example
Syklomatisk kompleksitet er et veldig vanlig buzz-ord i utviklingssamfunnet. Denne teknikken brukes hovedsakelig for å bestemme kompleksiteten til et stykke kode eller funksjonalitet.
Teknikken ble utviklet av MaCabe og hjelper til med å identifisere de tre spørsmålene nedenfor for programmene / funksjonene
hvordan lage ny java-fil i formørkelse
- Kan funksjonen / programmet testes?
- Forstås innslaget / programmet av alle?
- Er funksjonen / programmet pålitelig nok?
Som kvalitetssikring kan vi bruke denne teknikken til å identifisere 'nivået' av testingen. Det er en praksis at hvis resultatet av syklomatisk kompleksitet er mer eller større, anser vi den funksjonaliteten for å være av kompleks natur, og derfor konkluderer vi som en tester; at kodebiten / funksjonaliteten krever grundig testing.
På den annen side, hvis resultatet av den syklomatiske kompleksiteten er et mindre tall, konkluderer vi som QA at funksjonaliteten er av mindre kompleksitet og bestemmer omfanget deretter.
La meg gå trinn for trinn: først forstå hvordan det beregnes, og så vil vi gå videre til å forstå hvordan testnivået bestemmes.
Hva du vil lære:
- Hvordan beregne syklomatisk kompleksitet?
- Syklomatisk kompleksitetsformel
- Syklomatisk kompleksitetseksempel
- Hvordan kan testere bruke det?
- Nå kommer snarveien-
- Anbefalt lesing
Hvordan beregne syklomatisk kompleksitet?
Beregningen av CC dreier seg om to konsepter
- Noder
- Kanter
Uttalelser i et program er representert som noder, og kontrollveier fra en uttalelse til en annen er representert av kanter.
Syklomatisk kompleksitetsformel
Formelen for beregning av CC er som:
CC = E ~ N + 2
Hvor:
E = Antall kanter
N = Antall noder.
(Det er en snarvei for å beregne den, men ikke nå ... senere ...)
Syklomatisk kompleksitetseksempel
La oss ta eksemplet nedenfor for å forstå det.
Vurder nedenstående kontrollflytskjema:
Jeg har plassert NETT prikker for å identifisere nodene og BLÅ linjer for å identifisere kantene:
Så her i dette eksemplet:
Antall noder (røde prikker) = 14
Antall kanter (blå linjer) = 15
Så den syklomatiske kompleksiteten = N ~ E + 2 = (14-15) +2 = 3
Hvordan kan testere bruke det?
I den virkelige verden kan testere sitte sammen med utviklere for å utlede kontrollflytgrafen for en gitt kode. Og når vi først har grafen, kan vi utlede kompleksiteten ved hjelp av denne formelen. Men historien for testere slutter ikke her: - Hovedpoenget her er - hva er bruken av dette tallet for testteamet?
Vel, testere kan benytte seg av dette tallet for å bestemme nivået på testingen.
hvordan du starter et java-prosjekt
I praksis er det to nivåer av testing:
- Lengdetesting
- Breddetesting
Vurder matrisen nedenfor for forskjellige funksjoner i en hvilken som helst modul: -
Lengdetesting er en måte vi prøver å dekke hele omfanget ved å velge viktige testtilfeller for hver funksjon. For eksempel , i dette tilfellet, antar at jeg velger å antyde med lengdetesten, så kan jeg velge -
- Underfunksjon 1.1 og Underfunksjon 1.3 for Funksjon 1
- Underfunksjon 2.2 fra Feature 2
- Underfunksjon 3.3 fra funksjon 3
- Underfunksjon 4.2 og underfunksjon 4.3 fra funksjon 4
- Underfunksjon 5.3 fra funksjon 5
Så her berører jeg hele funksjonen uten å gå inn i uttømmende detaljer om underfunksjoner.
Nå hvis resultatet av CC er et større tall, velger jeg å gå med Breddetesting, jeg vil faktisk teste hver eneste funksjon sammen med hver underfunksjon.
Så basert på ditt nåværende prosjektkrav, miljøpålitelighet, kan testere samarbeide med utviklingsteamet og lage en standard for identifisering av testnivået og omfanget. For eksempel -
- Hvis CC<=15 – Basic sanity test
- Hvis CC er mellom 16 og 30 - Lengdetesting
- Hvis CC er mellom 31 og 50 - Breddetesting
- Hvis CC> 50 - Det er en kaotisk funksjonalitet og trenger ytterligere nedbrytning
Nå kommer snarveien-
Bare tell antallet lukkede regioner og legg 1 til det.
I vårt eksempel ovenfor - antall lukkede regioner = 2 (fylt i gult), så CC = 2 + 1 = 3
hvordan åpne en json-fil
I det virkelige arbeidet er det veldig vanskelig å konkludere med resultatet når vi gir uttalelser som -
- “… .. Denne funksjonaliteten er veldig vanskelig å implementere”
Hva mener du med vanskelig? Er det komplisert, komplisert eller kaotisk?
Hvordan konkluderte du med at dette er vanskelig?
- “... dette skal være tilgjengelig på slutten av dagen”
Hva er slutten på dagen? Slutten av dagen er klokka 19.00, sannsynligvis er min klokka 18.00?
- '... Jeg må utføre detaljerte tester for dette'
Hva er detaljert testing? Det er ingen testteknikk kalt “Detaljert testing”
- “... koden skal være av god kvalitet før vi distribuerer den til QA”
Hvordan måler du god kvalitet?
I stedet, hvis jeg omformulerer uttalelsene som -
Den syklomatiske kompleksiteten for kodebiten beregnes som 75 og i henhold til våre standarder; denne funksjonaliteten er av kaos. Derfor anbefaler vi ytterligere å dekomponere den.
Over
- “… .. Denne funksjonaliteten er veldig vanskelig å implementere”
Funksjonaliteten vil bli distribuert i QA-miljø kl. 17.00 CST.
Over
- '.... Dette skal være tilgjengelig innen slutten av dagen'
Siden den syklomatiske kompleksiteten er beregnet som 48, vil vi i henhold til vår standard gjøre systemtesting sammen med integrasjon og regresjonstesting for funksjonen.
Over
- '.... Jeg må utføre detaljerte tester for dette'
I henhold til Sonar er CC nå 102. Vi har standardisert å ha CC til 10. Vi vil distribuere koden når vi forbedrer koden for å gjøre CC mindre enn 10.
Over
- '... koden skal være av god kvalitet før vi distribuerer den til QA'
Hva er forskjellen mellom de to utsagnene?
Vel, forskjellen her er målingen. Jeg har støttet hver av uttalelsene mine med passende målinger som vil hjelpe mine interessenter til å vite nøyaktig hva jeg vil si.
På samme måte kan du bruke syklomatisk kompleksitet i programvaretesting for å bestemme det nøyaktige målet på testinnsatsen, og du kan bruke den til å ikke bare identifisere omfanget av testingen, men også hvilke typer testing du trenger å gjøre.
Anbefalt lesing
- Hva er komponenttesting eller modultesting (Lær med eksempler)
- Hva er sammenligningstesting (Lær med eksempler)
- Programvaretesting Karrierepakke eBok
- Hva er System Integration Testing (SIT): Lær med eksempler
- Beste verktøy for testing av programvare 2021 (QA Test Automation Tools)
- Testing Primer eBook Download
- 5 viktige diagrammer som testere trenger å lære å bruke
- TestRail Review Tutorial: Lær End-to-End Test Case Management