Programovanie

Ako analyzovať cyklomatickú zložitosť kódu

Existuje niekoľko faktorov, ktoré môžu prispieť k zložitosti typu alebo metódy týkajúcej sa typu v kóde vašej aplikácie. Cyklomatická zložitosť je populárna metrika, ktorá sa používa na meranie zložitosti vášho programu. Inými slovami, ide o softvérovú metriku, ktorá poskytuje kvantitatívne meranie zložitosti programu.

Cyklomatická zložitosť je v podstate mierou lineárne nezávislých dráh, ktoré sú dostupné vo vašom programe. Jeho hodnota v skutočnosti závisí od počtu podmienených vetiev alebo konštruktov v kóde. Cyklomatická zložitosť bude teda vysoká pre metódy, ktoré majú veľké množstvo podmienených konštruktov (tj. Príkazy switch / if / while / for / foreach).

MSDN uvádza: "Cyklomatická zložitosť meria počet lineárne nezávislých dráh metódou, ktorá je určená počtom a zložitosťou podmienených vetiev. Nízka cyklomatická zložitosť všeobecne naznačuje metódu, ktorá je ľahko pochopiteľná, testovateľná a udržiavateľná."

Cyklomatická zložitosť sa počíta takto:

CC = E - N + 1

Kde,

CC označuje cyklomatickú zložitosť

E označuje počet hrán v grafe

N označuje počet uzlov v grafe

Uzol predstavuje logickú vetvu a hrana predstavuje spojenú čiaru medzi uzlami. Mimochodom, čím je hodnota cyklomatickej zložitosti metódy nižšia, tým je ľahšie ju testovať a udržiavať, a tým lepšie. Cyklomatickú zložitosť môžete využiť na výpočet zložitosti metód, typov a tiež modulov vo vašej aplikácii.

Pretože cyklomatická zložitosť naznačuje lineárne nezávislé cesty programu, čím viac má cyklomatická zložitosť hodnotu, tým väčší počet testovacích prípadov, ktoré by ste pre svoj program potrebovali - počet testovacích prípadov, ktoré by ste potrebovali, by bol obvykle ekvivalentný cyklomatickej zložitosti. zložitosť v tomto prípade. Ak je hodnota cyklomatickej zložitosti menšia (hodnota menšia alebo rovná sa 10 sa považuje za úžasnú), predpokladá sa, že je kód dobre štruktúrovaný, vysoko testovateľný a udržiavateľný.

Ako skontrolujem cyklomatickú zložitosť?

Novšie verzie Visual Studio poskytujú podporu pre výpočet cyklomatickej zložitosti pomocou IDE Visual Studio. Môžete vypočítať metriky kódu pre celé riešenie alebo pre projekty, ktoré ste vybrali. Po jeho spustení sa v okne Výsledky metriky kódu zobrazia výsledky analýzy kódu usporiadané do indexu údržby, cyklomatickej zložitosti, hĺbky dedičnosti, spojenia tried a tiež riadkov kódu. V tomto príspevku sa budeme venovať cyklomatickej zložitosti a v ďalšom príspevku tu predstavím diskusiu o ďalších bodoch.

Teraz si pozrite fragment kódu uvedený nižšie.

private void DisplayMessage (string str)

       {

Console.WriteLine (str);

       }

Keď vypočítate cyklomatickú zložitosť pre metódu DisplayMessage pomocou programu Visual Studio, zobrazí sa hodnota ako 1. Teraz zvážte túto metódu, ktorá obsahuje kontrolu, či je parameter odovzdaný metóde ako argument nulový alebo prázdny.

private void DisplayTextMessage (string str)

       {

if (! string.IsNullOrEmpty (str))

Console.WriteLine (str);

       }

Ak pre riešenie spustíte metriky kódu znova, všimli by ste si, že cyklomatická zložitosť pre metódu DisplayTextMessage je 2.

Ako môžem znížiť cyklomatickú zložitosť kódu?

Aj keď je v niektorých prípadoch ťažké prijať konkrétnu stratégiu na zníženie cyklomatickej zložitosti kódu, pretože podmienené konštrukcie môžu byť tvorené vlastnými problémami, môžete prijať rôzne stratégie na dosiahnutie nižšej hodnoty cyklomatickej zložitosti. Dva prístupy, ktoré by ste mali dodržiavať pri znižovaní vysokej cyklomatickej zložitosti, sú jednotkové testy a refaktoring kódu. Aj keď vám jednotkové testy pomôžu minimalizovať riziká, mali by ste využiť refaktoring kódu, aby bol váš kód menej zložitý, ľahšie testovateľný a udržiavateľný.

Cyklomatickú zložitosť vášho programu môžete znížiť nahradením podmienených konštruktov polymorfizmom. Pri použití polymorfizmu môžete svojmu kódu pridať veľkú flexibilitu - váš kód sa stane viac testovateľným a môžete doň pridať, upraviť alebo dokonca odstrániť podmienky bez veľkej zmeny v kóde. V zásade platí, že čím je hodnota cyklomatickej zložitosti nižšia, tým viac je váš kód ľahko čitateľný, testovateľný a udržiavateľný. V niektorých prípadoch by som vám odporučil využiť návrhové vzory správania, ako je návrhový vzor stratégie, na zníženie cyklomatickej zložitosti vášho kódu.

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