NDepend – narzędzie do analizy kodu

Tworząc oprogramowanie bardzo trudno ustrzec się przed stworzeniem aplikacji niezgodnej z zasadami sztuki. Przez zasady sztuki rozumiem tutaj tworzenie zbyt długich funkcji, tworzenie bardzo zagmatwanego kodu (np. składającego się z kilkunastu if-ów jeden w drugim) czy niekomentowanie metod i funkcji. Nie pilnując jakości kodu możemy bardzo łatwo doprowadzić do sytuacji, w której utrzymanie kodu będzie co najmniej bardzo pracochłonne. Dlatego wiele większych firm wprowadza zasady tworzenia kodu. Co takie zasady zawierają? Najczęściej metodologię nazewnictwa, maksymalną ilość linii kodu w jednej metodzie/funkcji czy maksymalną złożoność cyklomatyczną. Tutaj rodzi się pytanie, jak pilnować takich zasad? Przecież nikt przy normalnych zmysłach nie będzie liczył linii kodu w funkcjach i nikt normalny nie będzie liczył procentowej zawartości komentarzy w źródłach. Z pomocą przychodzą narzędzia do statycznej analizy kodu.

Jednym z takich narzędzi jest NDepend – aplikacja, która pozwala wygenerować 82 różne metryki kodu. Z ciekawszych, standardowo dostępnych mamy: Ilość lini kodu w metodach, ilość linii komentarzy, procent komentarzy, pokrycie kodu testami – dostępne dla aplikacji, biblioteki (assembly), namespace-u, typów. Za pomocą kilku kliknięć myszy wszystkie te metryki dostajemy w przyjaznej formie.

Do czego mogą się przydać takie metryki kodu? Przede wszystkim pozwalają szybko wykryć te części kodu, które należało by zmienić tak aby kod był łatwiejszy w utrzymaniu. Kod zagmatwany i niezbyt czytelny powoduje, że wprowadzanie modyfikacji po jakimś czasie staje się trudne i żmudne dla autora, nie mówiąc już o współpracownikach, którzy muszą wprowadzić zmiany.

Wielką siłą NDepend-a jest jednak CQL czyli Code Query Language. Język podobny do SQL-a, który pozwala nam budować własne metryki zgodnie z własnymi potrzebami. Dla przykładu:

SELECT METHODS  WHERE NbLinesOfCode >  30  AND IsPublic  AND CyclomaticComplexity >  15  AND  PercentageComment <  10

Wypisze wszystkie publiczne metody o ilości linii kodu > 30 zawierające mniej niż 10% komentarzy i o złożoności cyklomatycznej > 15. Czyż nie jest to proste?

Kolejną wielką zaletą NDepend-a jest możliwość pracy z linii komend co pozwala użyć go w praktycznie każdym poważnym narzędziu do automatycznego buildowania aplikacji czy serwerze CI (continious integration). Dzięki temu możemy przeprowadzać analizę przy każdej kompilacji kodu i sukcesywnie zbierać je co pozwoli na szybsze reagowanie w sytuacji gdy kod aplikacji schodzi na złą drogę.

W następnym odcinku o NDepend zobaczymy jak skonfigurować narzędzie i jak wygenerować raport no i zobaczymy co zawiera standardowy raport.