Ciekawe metryki cz. 3: Złożoność cyklomatyczna

Ciekawe metryki cz. 3: Złożoność cyklomatyczna
Choć złożoność odnosi się do kodu źródłowego, to jest ważnym elementem testowania. Podkreśla to obecność tej metryki w źródłach i materiałach ISTQB®.

Złożoność cyklomatyczna (ang. cyclomatic complexity), inaczej „liczba McCabe'a”, to metryka oprogramowania opracowana przez Thomasa J. McCabe'a w 1976 i używana do pomiaru stopnia skomplikowania programu. 
Podstawą do wyliczeń jest liczba dróg w schemacie blokowym danego programu, co oznacza wprost liczbę punktów decyzyjnych w tym programie. Opisuje to artykuł McCabe’a z zasobów IEEE. 

Wzór na obliczanie złożoności to: 

v(G) = E – N + 2P

Gdzie:

  • E to liczna krawędzi/połączeń w grafie, 
  • N to liczba węzłów grafu,
  • P to liczba rozłącznych części grafu (np. wywoływany graf lub podprocedura).

Dla grafów reprezentujących proste programy lub metody P =1. 

Przykład:

Przykładowa funkcja, w której punkt wyjścia jest połączony z powrotem do punktu wejścia. Ten wykres ma 9 krawędzi, 8 węzłów i 1 połączony komponent, co również daje złożoność cyklomatyczną przy użyciu alternatywnego sformułowania (9 - 8 + 2*1 = 3):

ciekawe-metryki-zlozonosc-cyklomatyczna-1.png

Korzyści:

Zakłada się, że czym mniejsza złożoność cyklomatyczna, tym lepszy kod. Do największych zalet takiego podejścia należą:

  • zmniejszenie sprzęgania (ang. coupling) kodu. Im wyższa liczba cyklomatycznej złożoności, tym bardziej powiązany jest kod. Kod wysoce sprzężony jest trudny do zmiany,
  • łatwość zrozumienia kodu wzrasta wraz ze spadkiem złożoności. Przy wyższej wartości złożoności programista musi radzić sobie z większą liczbą ścieżek w kodzie, co często może prowadzić do błędów,
  • łatwość testowania. Jeśli metoda ma złożoność cyklomatyczną 10, oznacza to, że istnieje 10 niezależnych ścieżek w tejże metodzie. Oznacza to również, że do przetestowania wszystkich (różnych) ścieżek w kodzie potrzeba co najmniej 10 przypadków testowych. Im mniejsza liczba, tym łatwiej jest przetestować kod.

Wartości złożoności cyklomatycznej v(G) interpretowane są w następujący sposób:

  • od 1 do 10 – kod dość prosty, stwarzający nieznaczne ryzyko,
  • od 11 do 20 – kod złożony, powodujący ryzyko na średnim poziomie,
  • od 21 do 50 – kod bardzo złożony, związany z wysokim ryzykiem,
  • powyżej 50 – kod niestabilny, grożący bardzo wysokim poziomem ryzyka.

Część badań pokazuje korelację między złożonością cyklomatyczną a częstością występowania defektów w funkcji lub metodzie. Największa złożoność zwykle skutkuje największą liczbą defektów. Również korelacja między złożonością cyklomatyczną a rozmiarem programu (zazwyczaj mierzona w wierszach kodu) została praktycznie udowodniona. Międzynarodowe normy bezpieczeństwa, takie jak ISO 26262, wymuszają niską złożoność kodu.

Źródła:
https://en.wikipedia.org/wiki/Cyclomatic_complexity

To powinno Cię zainteresować