Jak analizować cykliczną złożoność w swoim kodzie

Istnieje wiele czynników, które mogą wpływać na złożoność typu lub metody odnoszącej się do typu w kodzie aplikacji. Złożoność cyklomatyczna to popularna miara używana do pomiaru złożoności programu. Innymi słowy, jest to miernik oprogramowania, który zapewnia ilościową miarę złożoności programu.

W istocie złożoność cyklomatyczna jest miarą liniowo niezależnych ścieżek dostępnych w programie. Jego wartość jest w rzeczywistości zależna od liczby warunkowych gałęzi lub konstrukcji w kodzie. Tak więc złożoność cykliczna będzie wysoka dla metod, które mają dużą liczbę konstrukcji warunkowych (tj. Instrukcje switch / if / while / for / foreach).

MSDN stwierdza: „Złożoność cyklomatyczna mierzy liczbę liniowo niezależnych ścieżek w metodzie, która jest określana przez liczbę i złożoność rozgałęzień warunkowych. Niska złożoność cykliczna zwykle wskazuje na metodę, która jest łatwa do zrozumienia, przetestowania i utrzymania”.

Oto jak obliczana jest złożoność cykliczna:

CC = E - N + 1

Gdzie,

CC oznacza cykliczną złożoność

E oznacza liczbę krawędzi na wykresie

N oznacza liczbę węzłów na wykresie

Zwróć uwagę, że węzeł reprezentuje gałąź logiczną, a krawędź reprezentuje połączoną linię między węzłami. Nawiasem mówiąc, im niższa wartość cyklicznej złożoności metody, tym łatwiej jest ją testować i utrzymywać, a więc lepiej. Możesz skorzystać ze złożoności cyklicznej, aby obliczyć złożoność metod, typów, a także modułów w swojej aplikacji.

Ponieważ złożoność cykliczna wskazuje liniowo niezależne ścieżki w programie, im większa jest wartość złożoności cyklicznej, tym większa liczba przypadków testowych będzie potrzebnych dla programu - liczba przypadków testowych, których potrzebowałbyś, byłaby zazwyczaj równoważna cyklom złożoność w tym przypadku. Jeśli wartość złożoności cyklicznej jest mniejsza (wartość mniejsza lub równa 10 jest uważana za niesamowitą), zakłada się, że kod jest dobrze zorganizowany, wysoce testowalny i możliwy do utrzymania.

Jak sprawdzić cykliczną złożoność?

Nowsze wersje programu Visual Studio zapewniają obsługę obliczania złożoności cyklicznej przy użyciu środowiska IDE programu Visual Studio. Możesz obliczyć metryki kodu dla całego rozwiązania lub wybranych projektów. Po uruchomieniu w oknie Wyniki metryk kodu zostaną wyświetlone wyniki analizy kodu uporządkowane według indeksu możliwości utrzymania, złożoności cyklomatycznej, głębokości dziedziczenia, sprzężenia klas, a także wierszy kodu. W tym poście będziemy badać złożoność cyklomatyczną, a omówię inne punkty w późniejszym poście tutaj.

Teraz zapoznaj się z fragmentem kodu podanym poniżej.

private void DisplayMessage(string str)

       {

           Console.WriteLine(str);

       }

Podczas obliczania cyklicznej złożoności metody DisplayMessage przy użyciu programu Visual Studio wartość ta jest wyświetlana jako 1. Teraz rozważ tę metodę, która zawiera sprawdzenie, aby sprawdzić, czy parametr przekazany do metody jako argument ma wartość null lub jest pusty.

private void DisplayTextMessage(string str)

       {

           if(!string.IsNullOrEmpty(str))

           Console.WriteLine(str);

       }

Jeśli ponownie uruchomisz wskaźniki kodu dla rozwiązania, można zauważyć, że cykliczna złożoność metody DisplayTextMessage wynosi 2.

Jak zredukować cykliczną złożoność w kodzie?

Chociaż w niektórych przypadkach trudno jest dostosować się do konkretnej strategii w celu zmniejszenia złożoności cyklicznej w kodzie, ponieważ konstrukcje warunkowe mogą wynikać z tego, że są one nieodłączne dla danego problemu, można zastosować różne strategie, aby osiągnąć niższą wartość złożoności cyklicznej. Dwa podejścia, które należy zastosować, aby złagodzić wysoką cykliczną złożoność, to testy jednostkowe i refaktoryzacja kodu. Podczas gdy testy jednostkowe pomogą zminimalizować ryzyko, powinieneś skorzystać z refaktoryzacji kodu, aby uczynić kod mniej złożonym, łatwiejszym do testowania i utrzymania.

Możesz zredukować cykliczną złożoność swojego programu, zastępując konstrukcje warunkowe polimorfizmem. Używając polimorfizmu, możesz dodać dużo elastyczności do swojego kodu - kod staje się bardziej testowalny i możesz dodawać, edytować, a nawet usuwać warunki bez większych zmian w kodzie. Zasadniczo, im mniejsza wartość cyklicznej złożoności, tym bardziej kod jest łatwy do odczytania, przetestowania i utrzymania. W niektórych przypadkach zalecam skorzystanie z wzorców projektowania behawioralnego, takich jak wzorzec projektowania strategii, aby zmniejszyć cykliczną złożoność kodu.