Programavimas

Kaip išanalizuoti ciklinį sudėtingumą kode

Yra daug veiksnių, kurie gali prisidėti prie tipo ar metodo, susijusio su tipu, sudėtingumo jūsų programos kode. Ciklomatinis sudėtingumas yra populiari metrika, naudojama norint įvertinti jūsų programos sudėtingumą. Kitaip tariant, tai yra programinės įrangos metrika, kuri pateikia kiekybinį programos sudėtingumo matą.

Iš esmės ciklomatiškumas yra linijiškai nepriklausomų kelių, pasiekiamų per jūsų programą, matas. Jo vertė iš tikrųjų priklauso nuo sąlyginių šakų ar konstrukcijų skaičiaus jūsų kode. Taigi, ciklinis sudėtingumas bus didelis metodams, turintiems daug sąlyginių konstrukcijų (t. Y. „Switch / if / while / for / foreach“ teiginius).

MSDN teigia: "Ciklomatinis sudėtingumas matuoja tiesiškai nepriklausomų kelių skaičių taikant metodą, kurį lemia sąlyginių šakų skaičius ir sudėtingumas. Mažas ciklomatinis sudėtingumas paprastai rodo metodą, kurį lengva suprasti, išbandyti ir prižiūrėti."

Štai kaip apskaičiuojamas ciklomatinis sudėtingumas:

CC = E - N + 1

Kur,

CC žymi ciklomatinį sudėtingumą

E žymi grafiko kraštų skaičių

N žymi mazgų skaičių diagramoje

Atkreipkite dėmesį, kad mazgas reiškia loginę šaką, o kraštas - sujungtą liniją tarp mazgų. Beje, kuo mažesnė metodo ciklomatinio sudėtingumo vertė, tuo lengviau jį išbandyti ir išlaikyti, taigi geriau. Jei norite apskaičiuoti savo programos metodų, tipų ir modulių sudėtingumą, galite pasinaudoti ciklomatu.

Kadangi ciklomatinis sudėtingumas nurodo linijiškai nepriklausomus kelius, nors ir programa, tuo didesnė ciklomatinio sudėtingumo vertė, tuo daugiau bandymų atvejų jums reikės jūsų programai - jums reikalingų bandomųjų atvejų skaičius paprastai prilygtų ciklomatiniams atvejams šiuo atveju sudėtingumas. Jei ciklomatinio sudėtingumo vertė yra mažesnė (vertė, mažesnė arba lygi 10, laikoma nuostabia), daroma prielaida, kad kodas yra gerai struktūrizuotas, labai patikrinamas ir prižiūrimas.

Kaip patikrinti ciklomatinį sudėtingumą?

Naujesnės „Visual Studio“ versijos teikia pagalbą apskaičiuojant ciklomatinį sudėtingumą naudojant „Visual Studio IDE“. Galite apskaičiuoti viso sprendimo ar pasirinktų projektų kodų metriką. Kai ją paleisite, „Code Metrics Results“ lange bus rodomi kodų analizės rezultatai, suskirstyti į palaikomumo indeksą, ciklomatiškumo sudėtingumą, paveldėjimo gylį, klasės susiejimą ir kodo linijas. Šiame įraše mes išnagrinėsime ciklomatinį sudėtingumą, o vėliau pristatysiu diskusiją apie kitus dalykus.

Dabar žiūrėkite toliau pateiktą kodo fragmentą.

privatus negaliojantis „DisplayMessage“ (eilutės eilutė)

       {

Console.WriteLine (str);

       }

Kai apskaičiuojate „DisplayMessage“ metodo ciklinį sudėtingumą naudodami „Visual Studio“, tai rodo vertę kaip 1. Dabar apsvarstykite šį metodą, kuriame yra patikrinimas, ar metodas kaip argumentas perduotas parametras yra tuščias ar tuščias.

private void „DisplayTextMessage“ (eilutės eilutė)

       {

if (! string.IsNullOrEmpty (str))

Console.WriteLine (str);

       }

Jei dar kartą paleisite sprendimo kodo metriką, pastebėsite, kad „DisplayTextMessage“ metodo cikliškumas yra 2.

Kaip sumažinti ciklo sudėtingumą kode?

Nors kai kuriais atvejais sunku pritaikyti tam tikrą strategiją, kaip sumažinti ciklo sudėtingumą jūsų kode, nes sąlyginiai dariniai gali būti dėl to, kad tai būdinga jūsų problemai, galite priimti įvairias strategijas, kad pasiektumėte mažesnę ciklomatinio sudėtingumo vertę. Du būdai, kurių turėtumėte laikytis, kad sumažintumėte didelį ciklomatinį sudėtingumą, yra vieneto testai ir kodo pertvarkymas. Nors vieneto testai padės jums sumažinti riziką, turėtumėte pasinaudoti kodo pertvarkymu, kad jūsų kodas būtų ne toks sudėtingas, lengviau išbandomas ir prižiūrimas.

Programoje galite sumažinti ciklomatinį sudėtingumą, sąlyginius konstruktus pakeisdami polimorfizmu. Naudodami polimorfizmą, galite pridėti daug lankstumo prie savo kodo - jūsų kodas tampa labiau patikrinamas ir jūs galite pridėti, redaguoti ar net pašalinti sąlygas, daug nepakeisdami savo kodo. Iš esmės, kuo mažesnė ciklomatinio sudėtingumo vertė, tuo lengviau jūsų kodą lengva skaityti, išbandyti ir prižiūrėti. Kai kuriais atvejais rekomenduočiau pasinaudoti elgesio dizaino modeliais, pvz., Strategijos dizaino modeliu, kad sumažintumėte ciklinį kodo sudėtingumą.

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