NDepend – co to takiego?

Jakiś czas temu na mojej skrzynce pojawiło się pytanie czy chcę dostać klucz do narzędzia NDepend w zamian za krótki wpis na blogu. Z braku lepszych ofert postanowiłem sprawdzić co to jest. Nazwa kiedyś obiła mi się o uszy jednak nie wiedziałem co to za narzędzie.

Czym jest NDepend

NDepend jest narzędziem do statycznej analizy kodu pisanego na platformie .NET. Tym zdaniem można by zamknąć cały opis bo sama aplikacja analizuje kod na tyle sposobów, że jest duża szansa, że pokrywa chyba wszystkie sensowne metryki i analizy.

Okno aplikacji NDepend

Program pokazuje m.in. ilość linii kodu, ilość komentarzy, złożoność cyklomatyczną, pokrycie testami. Pokazuje, które fragmenty kodu obarczone są różnymi problemami z jakością kodu, takimi jak nieużywane zmienne, złe nazwy, zbyt długie metody czy klasy itd.

Poza tym NDepend ocenia ogólną jakość kodu i wylicza potencjalny dług technologiczny dla naszego projektu.

Dodatkowo program pozwala śledzić zmiany w jakości kodu. Dzięki temu możemy mieć pewność, że nasz projekt zyskuje na jakości np. po refactoringu, albo traci na jakości po jakimś zamykaniu zadań „na szybko”.

Poza aplikacją desktopową jest też możliwość używania tego narzędzia jako dodatku do Visual Studio lub jednego z dodatków na serwerze buildów, który pozwoli ocenić czy ostatnio wrzucony do repozytorium kod jest wysokiej jakości i spełnia nasze kryteria.

Czym NDepend nie jest

NDepend w przeciwieństwie do Resharpera nie podpowiada w jaki sposób możemy albo powinniśmy poprawić nasz kod. Działa on niejako po fakcie, tzn. pozwala ocenić jakość już zbudowanego kodu.

Dlatego nie jest to narzędzie, którego się używa na bieżąco w trakcie pracy. Raczej jest to narzędzie, które uruchamiamy np. przy okazji refactoringu albo kończąc jakąś funkcjonalność. Pozwala ono ocenić czy ostateczny kod, który powstał spełnia przyjęte przez zespół standardy i nie wprowadza niepotrzebnego bałaganu.

Także do analizy i naprawiania tego co się aktualnie pisze nadal dobrze jest mieć np. Resharpera.

Pierwsze wrażenia

Ponieważ z powodu braku czasu oraz braku bardziej rozbudowanych projektów pod ręką nie miałem okazji zbyt długo bawić się z NDepend dlatego w tym tekście przedstawię tylko swoje pierwsze wrażenia. Jest to opinia z perspektywy osoby, która pierwszy raz ma do czynienia z takim narzędziem. Nie zagłębiałem się również w instrukcję bo uznałem, że będzie to dobry test intuicyjności aplikacji.

Jak to zainstalować?

Pierwsze co rzuca się w oczy to brak instalatora. Zdziwiło mnie to. Dodatkowo producent odradza umieszczania programu w folderze „Program Files” w Windowsie. A to właśnie tam lubię mieć wszystkie programy. Odpowiedź od osoby, z którą miałem kontakt po stronie producenta jest taka:

[…] this is surprising but can give freedom to users, especially when using the NDepend API

Widocznie nie jestem tym typem użytkownika, który potrzebuje takiej wolności.

Także cały proces „instalacji” sprowadza się do rozpakowania archiwum gdzieś na dysku.

„Prostota” obsługi

Jak już wspomniałem nie czytałem instrukcji przed uruchomieniem programu. Jestem przyzwyczajony do tego, że zwykle program przynajmniej przy pierwszym kontakcie wyciągnie na wierzch jakieś proste funkcje, które pozwolą mi go poznać. Tutaj wg mnie tak nie ma i to mimo obecności pewnych podpowiedzi, o których za chwilę. Tutaj człowiek jest rzucany od razu na głęboką wodę. Paradoksalnie prościej się robi kiedy się przebiłem przez początek, tzn. odkryłem jak dodać solucję, którą chcę analizować.

Tutaj warto zwrócić uwagę na jeden element dodany przez producenta. Na każdym ekranie dodał on dymek z opisem do jednego przycisku. Jest to kilka zdań o tym co dana funkcja robi. Tylko dziwnie to wygląda kiedy na ekranie widzimy 15 przycisków i opisany jest akurat jeden. A kliknięcie „Ok” nie wyświetla kolejnej podpowiedzi dla kolejnego przycisku. No ale przynajmniej „coś” już wiemy i możemy bardziej odważnie kliknąć jedną z funkcji.

Ogólnie cały interfejs posiada tak dużo przycisków, tabelek, danych i zakładek, że ciężko się odnaleźć. Na screenshocie poniżej widać, że pojawiło się okienko z opisem jednak nie jest ono regułą.

I tak np. dla ekranu z metrykami nie ma takich podpowiedzi. W dodatku kliknięcie na jakąś wartość nadal nie pozwala poznać czym ona jest.

Tak naprawdę dopiero wybranie jakiegoś pliku z naszego projektu i wyświetlenie wartości różnych metryk dla niego pozwala przejść do opisów tych metryk (takie okienko z linkami widać na drugim screenshocie).

I właśnie te linki to jest coś co zdecydowanie ułatwia poznawanie tego programu. Bo pod każdym z nich kryje się krótki opis tego z jaką wartości mamy do czynienia i skąd się ona bierze. Fajnie jakby takie coś pojawiało się w większej ilości oprogramowania, bez konieczności otwierania specjalnie ekranu pomocy.

Mnóstwo wartości

Jak widać na powyższych zrzutach ekranu NDepend pokazuje naprawdę ogrom informacji. Dlatego też wspomniałem, że nie jest to narzędzie do korzystania na co dzień w trakcie pisania kodu. Przejrzenie nawet części danych zajmie nawet doświadczonej osobie trochę czasu. Dlatego myślę, że warto od razu skonfigurować np. ogólną ocenę kodu (ta zielona litera „A” w tym przypadku), która pozwala na pierwszy rzut oka ocenić czy kod zawiera mniej niż x% długu technicznego. Również skala problemów w zależności od przewidywanej ilości roboczogodzin dla długu technicznego może być pomocna w szybkiej ocenie sytuacji.

Tak naprawdę siłę tego narzędzia widać dopiero kiedy wykonuje się którąś z kolei analizę i śledzi się zmiany w kodzie. Bo na dashboardzie dostajemy np. wykres zmiany ilości problemów, pokrycia kodu czy długu technicznego. I na tej podstawie mamy ogólny obraz postępów prac.

Ogólna ocenia

Po krótkim obcowaniu z NDepend muszę powiedzieć, że na pewno nie jest to narzędzie dla początkujących developerów. Jednak mimo wszystko mogą oni coś wyciągnąć dla siebie analizując np. takie rzeczy jak wykryte problemy czy złożoność metod. Ale doświadczony programista, który wie czego szuka i na co powinien zwracać uwagę na pewno polubi się z tym programem. Aplikacja wymaga początkowej konfiguracji i porządnego zapoznania się z funkcjami jednak odwdzięcza się masą przydatnych informacji o naszym projekcie, które pomogą stopniowo zwiększać jakość kodu.

Poza wrażeniem ociężałości i czasami brakiem podpowiedzi lub niespójnością akcji (nigdy nie jestem pewien co się stanie kiedy akurat tutaj dwukrotnie kliknę na coś) myślę, że NDepend zostanie u mnie na dysku jeszcze przez jakiś czas. Obym tylko zabrał się za jakiś projekt, żeby było co analizować…

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *