Programování

Jak analyzovat cyklomatickou složitost kódu

Existují různé faktory, které mohou přispět ke složitosti typu nebo metody týkající se typu v kódu vaší aplikace. Cyklomatická složitost je populární metrika, která se používá k měření složitosti vašeho programu. Jinými slovy, jedná se o softwarovou metriku, která poskytuje kvantitativní měřítko složitosti programu.

Cyklomatická složitost je v podstatě měřítkem lineárně nezávislých cest, které jsou dostupné prostřednictvím vašeho programu. Jeho hodnota je ve skutečnosti závislá na počtu podmíněných větví nebo konstrukcí ve vašem kódu. Cyklomatická složitost bude tedy vysoká u metod, které mají velké množství podmíněných konstruktů (tj. Příkazy switch / if / while / for / foreach).

MSDN uvádí: "Cyklomatická složitost měří počet lineárně nezávislých cest metodou, která je určena počtem a složitostí podmíněných větví. Nízká cyklomatická složitost obecně naznačuje metodu, kterou lze snadno pochopit, otestovat a udržovat."

Tady je výpočet cyklomatické složitosti:

CC = E - N + 1

Kde,

CC označuje cyklomatickou složitost

E označuje počet hran v grafu

N označuje počet uzlů v grafu

Všimněte si, že uzel představuje logickou větev a hrana představuje spojenou čáru mezi uzly. Mimochodem, čím nižší je hodnota cyklomatické složitosti metody, tím snazší je ji testovat a udržovat, tím lépe. Cyklomatickou složitost můžete využít k výpočtu složitosti metod, typů a také modulů ve vaší aplikaci.

Vzhledem k tomu, že cyklomatická složitost naznačuje linerově nezávislé cesty v programu, čím větší je hodnota cyklomatické složitosti, tím větší počet testovacích případů byste pro svůj program potřebovali - počet testovacích případů, které byste potřebovali, by byl obvykle ekvivalentní cyklomatické v tomto případě složitost. Pokud je hodnota cyklomatické složitosti menší (hodnota menší nebo rovna 10 je považována za úžasnou), předpokládá se, že kód je dobře strukturovaný, vysoce testovatelný a udržovatelný.

Jak zkontroluji cyklomatickou složitost?

Novější verze sady Visual Studio poskytují podporu pro výpočet cyklomatické složitosti pomocí IDE sady Visual Studio. Můžete vypočítat metriky kódu pro celé řešení nebo pro projekty, které jste vybrali. Když jej spustíte, v okně Výsledky metrik kódu se zobrazí výsledky analýzy kódu uspořádané do indexu údržby, cyklomatické složitosti, hloubky dědičnosti, propojení tříd a také řádků kódu. V tomto příspěvku prozkoumáme Cyklomatickou složitost a v dalším příspěvku zde představím diskusi o dalších bodech.

Nyní se podívejte na fragment kódu uvedený níže.

private void DisplayMessage (string str)

       {

Console.WriteLine (str);

       }

Když vypočítáte cyklomatickou složitost pro metodu DisplayMessage pomocí Visual Studio, zobrazí se hodnota jako 1. Nyní zvažte tuto metodu, která obsahuje kontrolu, zda parametr předaný metodě jako argument je null nebo prázdný.

private void DisplayTextMessage (string str)

       {

if (! string.IsNullOrEmpty (str))

Console.WriteLine (str);

       }

Pokud pro řešení znovu spustíte metriky kódu, zjistíte, že cyklomatická složitost pro metodu DisplayTextMessage je 2.

Jak mohu snížit cyklomatickou složitost kódu?

I když je v některých případech obtížné přijmout určitou strategii ke snížení cyklomatické složitosti ve vašem kódu, protože podmíněné konstrukce mohou být, protože jsou neodmyslitelnou součástí vašeho problému, můžete přijmout různé strategie k dosažení nižší hodnoty cyklomatické složitosti. Dva přístupy, které byste měli použít ke zmírnění vysoké cyklomatické složitosti, jsou testy jednotek a refaktorování kódu. Zatímco unit testy vám pomohou minimalizovat rizika, měli byste využít refaktoring kódu, aby byl váš kód méně složitý, snadněji se testoval a udržoval.

Cyklomatickou složitost programu můžete snížit nahrazením podmíněných konstrukcí polymorfismem. Při použití polymorfismu můžete svému kódu přidat velkou flexibilitu - váš kód se stane testovatelnějším a můžete přidávat, upravovat nebo dokonce odebírat podmínky bez velké změny v kódu. V podstatě platí, že čím menší je hodnota cyklomatické složitosti, tím více je váš kód snadno čitelný, testovatelný a udržovatelný. V některých případech bych doporučil využít vzorů chování, jako je návrhový vzor Strategie, ke snížení cyklomatické složitosti v kódu.

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