Programiranje

Kako analizirati ciklomatično zapletenost vaše kode

Obstajajo različni dejavniki, ki lahko prispevajo k zapletenosti tipa ali metode, ki se nanaša na tip v kodi vaše aplikacije. Ciklomatična kompleksnost je priljubljena metrika, ki se uporablja za merjenje zahtevnosti vašega programa. Z drugimi besedami, to je programska metrika, ki zagotavlja količinsko merilo zapletenosti programa.

V bistvu je ciklomatična kompleksnost merilo linearno neodvisnih poti, ki so na voljo v vašem programu. Njegova vrednost je dejansko odvisna od števila pogojnih vej ali konstruktov v vaši kodi. Torej bo ciklomatska zapletenost visoka pri metodah, ki imajo veliko pogojnih konstrukcij (tj. Stavki switch / if / while / for / foreach).

MSDN navaja: "Ciklomatična kompleksnost meri število linearno neodvisnih poti skozi metodo, ki je določena s številom in zahtevnostjo pogojnih vej. Nizka ciklomatična kompleksnost na splošno kaže na metodo, ki jo je enostavno razumeti, preizkusiti in vzdrževati."

Evo, kako se izračuna ciklomatska zapletenost:

CC = E - N + 1

Kje,

CC označuje ciklomatično zapletenost

E označuje število robov na grafu

N pomeni število vozlišč na grafu

Upoštevajte, da vozlišče predstavlja logično vejo, rob pa povezano črto med vozlišči. Mimogrede, nižja kot je vrednost ciklomatske zapletenosti metode, lažje je testiranje in vzdrževanje, zato bolje. Ciklomatično zapletenost lahko izkoristite za izračun kompleksnosti metod, vrst in tudi modulov v vaši aplikaciji.

Ker ciklomatična zapletenost kaže na linijsko neodvisne poti skozi program, bolj kolikor je vrednost ciklomatične zapletenosti, tem večje število testnih primerov bi potrebovali za svoj program - število testnih primerov, ki bi jih potrebovali, bi bilo običajno enako ciklomatičnim v tem primeru zapletenost. Če je vrednost ciklomatske zapletenosti manjša (vrednost, manjša ali enaka 10, se šteje za čudovito), se šteje, da je koda dobro strukturirana, zelo preverljiva in vzdržna.

Kako preverim ciklomatično zahtevnost?

Novejše različice Visual Studio nudijo podporo za izračun ciklomatične zapletenosti s pomočjo Visual Studio IDE. Metrike kode lahko izračunate za celotno rešitev ali za izbrane projekte. Ko ga zaženete, se v oknu Rezultati meritev kode prikažejo rezultati analize kode, organizirani v indeks vzdrževalnosti, ciklomatsko zapletenost, globino dedovanja, sklop razredov in tudi vrstice kode. V tem prispevku bomo raziskovali ciklomatsko zapletenost, razpravo o drugih točkah pa bom predstavil v kasnejšem prispevku tukaj.

Zdaj glejte spodnji delček kode.

private void DisplayMessage (niz str)

       {

Console.WriteLine (str);

       }

Ko izračunate ciklomatično zapletenost metode DisplayMessage z uporabo Visual Studio, prikaže vrednost kot 1. Zdaj upoštevajte to metodo, ki vsebuje preverjanje, ali je parameter, poslan metodi kot argument, ničen ali prazen.

private void DisplayTextMessage (niz str)

       {

if (! string.IsNullOrEmpty (str))

Console.WriteLine (str);

       }

Če za rešitev znova zaženete Metrike kode, boste opazili, da je ciklomatična zapletenost metode DisplayTextMessage 2.

Kako lahko zmanjšam ciklomatično zapletenost kode?

Čeprav je v nekaterih primerih težko sprejeti določeno strategijo za zmanjšanje ciklomatične zapletenosti vaše kode, saj so pogojni konstrukti morda zato, ker je neločljiv za vaš problem, lahko sprejmete različne strategije za doseganje nižje vrednosti ciklomatične kompleksnosti. Dva pristopa, ki bi ju morali upoštevati za ublažitev velike ciklomatične zapletenosti, sta preskus enot in preoblikovanje kode. Medtem ko vam bodo enotni testi pomagali zmanjšati tveganje, bi morali izkoristiti predelavo kode, da bo vaša koda manj zapletena, lažja za preskušanje in vzdrževanje.

Ciklomatično zapletenost programa lahko zmanjšate tako, da pogojne konstrukte zamenjate s polimorfizmom. Z uporabo polimorfizma lahko kodi dodate veliko prilagodljivosti - koda postane bolj preizkusljiva in lahko dodate, uredite ali celo odstranite pogoje brez večje spremembe kode. V bistvu je manjša vrednost ciklomatske zapletenosti, več je vaše kode enostavno brati, preizkušati in vzdrževati. V nekaterih primerih vam priporočam, da izkoristite vzorce vedenjskega načrtovanja, na primer vzorec načrtovanja strategije, da zmanjšate ciklomatično zapletenost kode.

$config[zx-auto] not found$config[zx-overlay] not found