Mccabeova cyklomatická složitost: Výpočet pomocí průtokového grafu (příklad)

Obsah:

Anonim

Abychom pochopili cyklomatickou složitost, nejprve pochopíme -

Co je softwarová metrika?

Měření není nic jiného než kvantitativní indikace velikosti / dimenze / kapacity atributu produktu / procesu. Softwarová metrika je definována jako kvantitativní měřítko atributu, který má softwarový systém s ohledem na náklady, kvalitu, velikost a plán.

Příklad-

Opatření - počet chybMetriky - počet nalezených chyb na osobu

V tomto výukovém programu se naučíte

  • Co je softwarová metrika?
  • Co je cyklomatická složitost?
  • Zápis vývojového diagramu pro program:
  • Jak vypočítat cyklomatickou složitost
  • Vlastnosti cyklomatické složitosti:
  • Jak je tato metrika užitečná pro testování softwaru?
  • Více informací o V (G):
  • Nástroje pro výpočet cyklomatické složitosti:
  • Použití cyklomatické složitosti:

Cyklomatická složitost v testování softwaru

Cyklomatická složitost v testování softwaru je metrika testování používaná k měření složitosti softwarového programu. Jedná se o kvantitativní měřítko nezávislých cest ve zdrojovém kódu softwarového programu. Cyklomatickou složitost lze vypočítat pomocí grafů řídicího toku nebo s ohledem na funkce, moduly, metody nebo třídy v rámci softwarového programu.

Nezávislá cesta je definována jako cesta, která má alespoň jednu hranu, která dosud nebyla překročena v žádné jiné cestě.

Tuto metriku vytvořil Thomas J. McCabe v roce 1976 a je založena na reprezentaci řídicího toku programu. Řídicí tok zobrazuje program jako graf, který se skládá z uzlů a hran.

V grafu představují uzly úlohy zpracování, zatímco hrany představují tok řízení mezi uzly.

Zápis vývojového diagramu pro program:

Zápis vývojového diagramu pro program definuje několik uzlů spojených přes hrany. Níže jsou vývojová schémata pro příkazy jako if-else, While, until a normální posloupnost toku.

Jak vypočítat cyklomatickou složitost

Matematické znázornění:

Matematicky je to sada nezávislých cest skrz grafový diagram. Složitost kódu programu lze definovat pomocí vzorce -

V (G) = E - N + 2

Kde,

E - Počet hran

N - počet uzlů

V (G) = P + 1

Kde P = počet predikátových uzlů (uzel, který obsahuje podmínku)

Příklad -

i = 0;n = 4; // N-počet uzlů v grafuwhile (i 

Vývojový graf pro tento program bude

Matematické výpočty

  • V (G) = 9 - 7 + 2 = 4
  • V (G) = 3 + 1 = 4 (uzly podmínky jsou 1,2 a 3 uzly)
  • Sada základů - Sada možných cest spuštění programu
  • 1, 7
  • 1, 2, 6, 1, 7
  • 1, 2, 3, 4, 5, 2, 6, 1, 7
  • 1, 2, 3, 5, 2, 6, 1, 7

Vlastnosti cyklomatické složitosti:

Vlastnosti cyklomatické složitosti jsou následující:

  1. V (G) je maximální počet nezávislých cest v grafu
  2. V (G)> = 1
  3. G bude mít jednu cestu, pokud V (G) = 1
  4. Minimalizujte složitost na 10

Jak je tato metrika užitečná pro testování softwaru?

Testování Basis Path je jednou z technik White boxu a zaručuje testování alespoň jednoho příkazu během testování. Kontroluje každou lineárně nezávislou cestu programem, což znamená, že počet testovacích případů bude ekvivalentní cyklomatické složitosti programu.

Tato metrika je užitečná kvůli vlastnostem cyklomatické složitosti (M) -

  1. M může být počet testovacích případů k dosažení pokrytí větví (horní hranice)
  2. M může být počet cest grafy. (Dolní mez)

Zvažte tento příklad -

Pokud (podmínka 1)Prohlášení 1JinýProhlášení 2Pokud (podmínka 2)Prohlášení 3JinýProhlášení 4

Cyklomatická složitost pro tento program bude 8-7 + 2 = 3.

Protože složitost byla vypočtena jako 3, jsou pro úplné pokrytí cesty pro výše uvedený příklad nutné tři testovací případy.

Kroky, které je třeba dodržovat:

Následující kroky by měly být dodrženy pro výpočet cyklomatické složitosti a návrh testovacích případů.

Krok 1 - Konstrukce grafu s uzly a hranami z kódu

Krok 2 - Identifikace nezávislých cest

Krok 3 - Výpočet cyklomatické složitosti

Krok 4 - Návrh testovacích případů

Jakmile je vytvořena základní sada, měly by být zapsány TESTOVACÍ PŘÍPADY k provedení všech cest.

Více informací o V (G):

Cyklomatickou složitost lze vypočítat ručně, pokud je program malý. Pokud je program velmi složitý, je třeba použít automatizované nástroje, protože to zahrnuje více vývojových grafů. Na základě počtu složitosti může tým dospět k závěru o opatřeních, která je třeba přijmout pro opatření.

Následující tabulka poskytuje přehled o počtu složitosti a odpovídajícím významu v (G):

Složitost číslo Význam
1-10 Strukturovaný a dobře napsaný kód, vysoká testovatelnost, náklady a úsilí jsou nižší
10-20 Testovatelnost středního komplexního kódu Náklady a úsilí jsou střední
20-40 Velmi složitý kód Nízká testovatelnost Náklady a úsilí jsou vysoké
> 40 Vůbec ne testovatelné Velmi vysoké náklady a úsilí

Nástroje pro výpočet cyklomatické složitosti:

K určení složitosti aplikace je k dispozici mnoho nástrojů. Některé nástroje pro výpočet složitosti se používají pro konkrétní technologie. Složitost lze najít podle počtu rozhodovacích bodů v programu. Rozhodovacími body jsou příkazy if, for, for-each, while, do, catch, case ve zdrojovém kódu.

Příklady nástrojů jsou

  • OCLint - analyzátor statického kódu pro jazyk C a související jazyky
  • Reflector Add In - metriky kódu pro sestavení .NET
  • GMetrics - Najděte metriky v aplikacích souvisejících s Javou

Použití cyklomatické složitosti:

Cyklomatická složitost se může ukázat jako velmi užitečná

  • Pomáhá vývojářům a testerům určit nezávislé spuštění cesty
  • Vývojáři mohou zajistit, že všechny cesty byly testovány alespoň jednou
  • Pomáhá nám více se soustředit na nekryté cesty
  • Zlepšete pokrytí kódu v softwarovém inženýrství
  • Vyhodnoťte riziko spojené s aplikací nebo programem
  • Používání těchto metrik na začátku cyklu snižuje větší riziko programu

Závěr:

Cyklomatická složitost je softwarová metrika užitečná pro strukturované nebo White Box testování. Používá se hlavně k vyhodnocení složitosti programu. Pokud je rozhodovacích bodů více, pak je složitost programu větší. Pokud má program vysoké číslo složitosti, pak je pravděpodobnost chyby vysoká se zvýšenou dobou údržby a odstraňování problémů.