POZOR! Článek jsem napsal před více jak rokem, a tudíž už nemusí reflektovat můj nynější názor nebo může být zastaralý.
Cyklomatická komplexita, neboli podmínková složitost je metrika indikující složitost zdrojového kódu.
Video (4:45)
Jedná se o jednu z hlavním metrik, díky které lze posoudit jeho kvalitu.
Udává počet různých cest skrze zdrojový kód. K čemu je to dobré? Díky tomu lze blíže odpovědět na 3 otázky:
- Je kód dobře testovatelný?
- Je kód snadno čitelný?
- Je kód dostatečně spolehlivý?
Pomáhá nám to také určit počet testů, které bychom měli na kódu provádět.
Jak se počítá?
Dle vzorce:
M = E – N + 2P
M = cyklomatická komplexita
E = hran v grafu
N = uzlů v grafu
P = připojených komponent - ukončení
Grafem se myslí CFG (control flow graph). Ten může vypadat následovně:
Zjednodušené lze ale říct, že:
cyklomatická komplexita = počet rozhodnutí + 1
Jako rozhodnutí lze považovat:
?
&&
||
or
and
xor
case
catch
elseif
for
foreach
if
while
Příklady
Příklad 1
function index() {
}
Cyklomatická komplexita je: 1, a to z důvodu, že existuje jediná cesta, kterou lze kódem projít. Žádný rozhodovací faktor zde není.
Příklad 2
function index($a, $b) {
if ($a == $b) {
$value = 1;
} else {
$value = 2;
}
return $value;
}
Cyklomatická komplexita je: 2, a to z důvodu, že existují 2 cesty, kterými lze kódem projít. Je zde 1 rozhodovací faktor.
Příklad 3
function index($a, $b) {
if ($a == $b && $a > 1) {
$value = 1;
} else {
$value = 2;
}
return $value;
}
Cyklomatická komplexita je: 3, a to z důvodu, že existují 3 cesty, kterými lze kódem projít. Jsou zde 2 rozhodovací faktory.
Příklad 4
function index($a, $b) {
$value = 1;
for ($i=$a;$i<$b;$i++) {
$value++;
}
return $value;
}
Cyklomatická komplexita je: 2, a to z důvodu, že je zde 1 rozhodovací faktor. Napříč grafem jsou dvě cesty, kterými lze projít a to je možno vidět na grafu zobrazeném výše, který reprezentuje právě tuto funkci.
Znáte někoho, komu by článek mohl pomoct? Zasdílejte mu ho :)