Metriky kódu – cyklomaticická složitost
Při práci s metrikami kódu se zdá, že jedna z nejméně srozumitelných položek je cyklomaticická složitost. V podstatě s cyklomatickou složitostí jsou vyšší čísla špatná a nižší čísla jsou dobrá. Cyklomatickou složitost můžete použít k získání představu o tom, jak těžké může být jakýkoli daný kód testovat, udržovat nebo řešit potíže, a také indikaci, jak pravděpodobné bude, že kód bude produkovat chyby. Na vysoké úrovni určíme hodnotu cyklomatické složitosti tím, že spočítáme počet rozhodnutí provedených ve zdrojovém kódu. V tomto článku začnete jednoduchým příkladem cyklomatické složitosti, abyste pochopili koncept rychle, a pak se podívejte na některé další informace o skutečném využití a navrhovaných omezeních. Nakonec je tu část citací, která se dají použít k hlubšímu prozkoumání tohoto tématu.
Příklad
Cyklomatická složitost je definována jako měření "množství rozhodovací logiky ve funkci zdrojového kódu" NIST235. Jednoduše řečeno, čím více rozhodnutí je třeba provést v kódu, tím složitější je.
Pojďme se na to podívat v akci. Vytvořte novou konzolovou aplikaci a okamžitě vypočítejte metriky kódu tím, že přejdete na Analyzovat > Vypočítat metriky kódu pro řešení.
Všimněte si, že cyklomatická složitost je 2 (nejnižší možná hodnota). Pokud přidáte nekomuteční kód, všimněte si, že složitost se nezmění:
Pokud přidáte rozhodnutí, hodnota cyklomatické složitosti vzroste o jednu jednotku.
Když změníte příkaz if na příkaz switch se čtyřmi rozhodnutími, která se mají provést, přejde z původních dvou na šest:
Pojďme se podívat na (hypotetický) větší základ kódu.
Všimněte si, že většina položek při procházení podrobností do třídy Products_Related má hodnotu jedné, ale několik z nich má složitost pěti. Samotný rozdíl nemusí být velký, ale vzhledem k tomu, že většina ostatních členů má jeden ve stejné třídě, měli byste se rozhodně podívat blíže na tyto dvě položky a podívat se, co je v nich. Můžete se podívat podrobněji, když kliknete pravým tlačítkem myši na položku a zvolíte Přejít na zdrojový kód z místní nabídky. Podívejte se podrobněji na Product.set(Product)
:
Vzhledem ke všem podmínkovým výrazům if můžete pochopit, proč je cyklomatická složitost na hodnotě pět. V tomto okamžiku se můžete rozhodnout, že je tento výsledek přijatelnou úrovní složitosti, nebo můžete refaktorovat, abyste snížili složitost.
Kouzelné číslo
Stejně jako u mnoha metrik v tomto odvětví neexistuje žádný přesný limit cyklomatické složitosti, který by vyhovoval všem organizacím. NIST235 ale znamená, že limit 10 je dobrým výchozím bodem:
"Přesné číslo, které se má použít jako limit, je však poněkud problematické. Původní limit 10, jak navrhuje McCabe, má významné podpůrné důkazy, ale limity tak vysoké, jak je 15, byly úspěšně použity i. Limity nad 10 by měly být vyhrazeny pro projekty, které mají oproti typickým projektům několik provozních výhod, například zkušený personál, formální návrh, moderní programovací jazyk, strukturované programování, názorné postupy kódu a komplexní testovací plán. Jinými slovy, organizace může vybrat omezení složitosti větší než 10, ale jenom v případě, že si je jistá, co dělá, a je ochotná věnovat další testovací úsilí vyžadované složitějšími moduly." NIST235
Cykloamatická složitost a čísla řádků
Podívat se pouze na počet řádků kódu je v nejlepším případě jen velmi obecný indikátor kvality kódu. Existuje určitá základní pravda, že čím více řádků kódu ve funkci, tím pravděpodobnější je, že se jedná o chyby. Pokud ale zkombinujete cyklomatickou složitost s řádky kódu, máte mnohem jasnější představu o potenciálních chybách.
Jak je popsáno v centru SATC (Software Assurance Technology Center) v NASA:
SATC zjistil, že nejúčinnější vyhodnocení je kombinace velikosti a cyklomatické složitosti. Moduly s vysokou složitostí i velkou velikostí mají tendenci mít nejnižší spolehlivost. Moduly s nízkou velikostí a vysokou složitostí jsou také rizikem spolehlivosti, protože mají tendenci být velmi terse kód, který je obtížné změnit nebo upravit." SATC
Analýza kódu
Analýza kódu zahrnuje kategorii pravidel udržovatelnosti. Další informace naleznete v tématu pravidla udržovatelnosti. Pokud používáte starší verzi analýzy kódu, sada pravidel Extended Design Guideline obsahuje oblast udržovatelnosti:
Uvnitř oblasti udržovatelnosti je pravidlo pro složitost:
Toto pravidlo vydá upozornění, když cyklomatická složitost dosáhne 25, takže vám pomůže vyhnout se nadměrné složitosti. Další informace o pravidle najdete v tématu CA1502
Dát všechno dohromady
Dolní řádek spočívá v tom, že vysoké číslo složitosti znamená větší pravděpodobnost chyb se zvýšenou dobou údržby a odstraňování potíží. Podívejte se podrobněji na všechny funkce, které mají vysokou složitost, a rozhodněte se, jestli by se měly refaktorovat, aby byly méně složité.
Citace
MCCABE5
McCabe, T. a A. Watson (1994), Software Complexity (CrossTalk: The Journal of Defense Software Engineering).
NIST235
Watson, A. H., & McCabe, T. J. (1996). Strukturované testování: Metodika testování využívající metriku cyklomatické složitosti (zvláštní publikace NIST 500-235). Citováno 14. května 2011, z Web McCabe Software: http://www.mccabe.com/pdf/mccabe-nist235r.pdf
SATC
Rosenberg, L., Hammer, T., Shaw, J. (1998). Softwarové metriky a spolehlivost (Proceedings of IEEE International Symposium on Software Reliability Engineering). Citováno 14. května 2011, z Penn State University webové stránky: https://citeseerx.ist.psu.edu/pdf/31e3f5732a7af3aecd364b6cc2a85d9495b5c159