Programmering

Hvordan analysere den syklomatiske kompleksiteten i koden din

Det er forskjellige faktorer som kan bidra til kompleksiteten til en type eller en metode som gjelder en type i programmets kode. Syklomatisk kompleksitet er en populær beregning som brukes til å måle programmets kompleksitet. Med andre ord, det er en programvare beregning som gir et kvantitativt mål på kompleksiteten i et program.

I hovedsak er syklomatisk kompleksitet et mål på de lineært uavhengige banene som er tilgjengelige gjennom programmet ditt. Verdien avhenger faktisk av antall betingede grener eller konstruksjoner i koden din. Så syklomatisk kompleksitet vil være høy for metoder som har et stort antall betingede konstruksjoner (dvs. bytte / if / while / for / foreach uttalelser).

MSDN sier: "Syklomatisk kompleksitet måler antall lineært uavhengige baner gjennom metoden, som bestemmes av antall og kompleksitet av betingede grener. En lav syklomatisk kompleksitet indikerer generelt en metode som er lett å forstå, teste og vedlikeholde."

Slik beregnes syklomatisk kompleksitet:

CC = E - N + 1

Hvor,

CC betegner syklomatisk kompleksitet

E angir antall kanter i grafen

N betegner antall noder i grafen

Merk at en node representerer den logiske grenen, og en kant representerer den tilkoblede linjen mellom nodene. Forresten, jo lavere verdi av cyklomatisk kompleksitet av en metode, jo lettere er det å teste og vedlikeholde, derav jo bedre. Du kan dra nytte av syklomatisk kompleksitet for å beregne kompleksiteten av metoder, typer og også moduler i applikasjonen din.

Siden syklomatisk kompleksitet indikerer de uavhengige banene gjennom programmet, jo mer verdien av syklomatisk kompleksitet, jo mer antall testtilfeller vil du trenge for programmet ditt - antall testtilfeller du trenger vil typisk være ekvivalent med det syklomatiske kompleksitet i dette tilfellet. Hvis verdien av syklomatisk kompleksitet er mindre (en verdi mindre enn eller lik 10 anses som fantastisk), antas koden å være godt strukturert, meget testbar og vedlikeholdbar.

Hvordan sjekker jeg syklomatisk kompleksitet?

De nyere versjonene av Visual Studio gir støtte for å beregne syklomatisk kompleksitet ved hjelp av Visual Studio IDE. Du kan beregne kodemetrikker for hele løsningen eller for prosjektene du har valgt. Når du kjører den, viser vinduet Kodemetrikresultater deg kodeanalyseresultatene organisert i Vedlikeholdsindeks, Syklomatisk kompleksitet, Arvedybde, Klassekobling og også Kodelinjene. I dette innlegget vil vi utforske Cyclomatic Complexity, og jeg vil presentere en diskusjon om de andre punktene i et senere innlegg her.

Se nå kodebiten gitt nedenfor.

privat ugyldig DisplayMessage (strengstr)

       {

Console.WriteLine (str);

       }

Når du beregner den syklomatiske kompleksiteten for DisplayMessage-metoden ved hjelp av Visual Studio, viser den verdien som 1. Vurder nå denne metoden som inneholder en sjekk for å se om parameteren som sendes til metoden som argument er null eller tom.

privat ugyldig DisplayTextMessage (strengstr)

       {

if (! string.IsNullOrEmpty (str))

Console.WriteLine (str);

       }

Hvis du kjører kodemetrikker for løsningen igjen, vil du se at den syklomatiske kompleksiteten for DisplayTextMessage-metoden er 2.

Hvordan reduserer jeg syklomatisk kompleksitet i koden?

Selv om det i noen tilfeller er vanskelig å ta i bruk en bestemt strategi for å redusere den syklomatiske kompleksiteten i koden din, siden de betingede konstruksjonene kan være fordi den er iboende for problemet ditt, kan du vedta forskjellige strategier for å oppnå en lavere syklomatisk kompleksitetsverdi. De to tilnærmingene du bør følge for å redusere høy syklomatisk kompleksitet, er gjennom enhetstester og kodereformering. Selv om enhetstester vil hjelpe deg med å minimere risikoen, bør du utnytte kodereformering for å gjøre koden mindre kompleks, lettere å teste og vedlikeholde.

Du kan redusere den syklomatiske kompleksiteten i programmet ditt ved å erstatte de betingede konstruksjonene med polymorfisme. Når du bruker polymorfisme, kan du legge til mye fleksibilitet i koden din - koden din blir mer testbar, og du kan legge til, redigere eller til og med fjerne forhold uten mye endring i koden din. I hovedsak, jo mindre verdien av syklomatisk kompleksitet, jo mer er koden din enkel å lese, teste og vedlikeholde. I noen tilfeller vil jeg anbefale at du benytter deg av atferdsmønstrene som strategidesignmønsteret for å redusere den syklomatiske kompleksiteten i koden din.