Dawid Cieszyński

.NET/PHP Software Developer

Niedawno dostałem do przetestowania najnowszą wersję narzędzia NDepend.

Make your .NET Code Beautiful with NDepend

NDepend jest narzędziem Visual Studiodo zarządzania skomplikowanym kodem .NET umożliwiającym osiągnięcie wysokiej jakości kodu. Dzięki NDepend możemy określić jakość oprogramowania przy pomocy metryk kodu, wizualizacji powiązań na wykresach lub "mapach drzew" (treemaps) oraz standardowych i niestandardowych reguł (np. wskazujących zbyt rozbudowane klasy).

Po zainstalowaniu dodatku, wystarczy utworzyć nowy projekt (menu NDepend->NDepend Project->New project) i już możemy analizować nasz kod. W prawym dolnym rogu pojawia się małe kółko z informacją o stanie kodu, możemy podejrzeć co należało by poprawić, ewentualnie zignorować wybrane reguły.

Rules ExplorerW najnowszej wersji została dodana możliwość tworzenia reguł w języku CQLinq (w poprzednich wersjach był to język CQL zbliżony do SQL). Wszystkie reguły standardowe również zostały przekształcone do CQLinq, dzięki czemu łatwiej jest napisać coś własnego na przykładach. Dodatkowo mnóstwo informacji znajdziemy na stronie producenta.

Sam edytor reguł ma wszystko co potrzeba: podpowiadanie składni intellisense, podpowiedzi o poszczególnych dostępnych obiektach.

Przykładowa reguła - ostrzeżenie o singletonach:

//<Name>Avoid the Singleton pattern</Name>
warnif count > 0
from t in Application.Types
where !t.IsStatic && !t.IsAbstract && (t.IsClass || t.IsStructure)

// All ctors of a singleton are private
where t.Constructors.Where(ctor => !ctor.IsPrivate).Count() == 0

// A singleton contains one static field of its parent type, to reference the unique instance
let staticFieldInstances = t.StaticFields.WithFieldType(t)
where staticFieldInstances.Count() == 1
select new { t, staticFieldInstance = staticFieldInstances.First() }

// The Singleton pattern consists in syntactically enforcing that a class 
// has just one unique instance.
// At first glance, this pattern looks appealing and it is widely used.
// However, we discourage you from using singleton classes because experience
// shows that singletons often result in less testable and less maintainable code.
// More details available in these discussions:
//  http://codebetter.com/patricksmacchia/2011/05/04/back-to-basics-usage-of-static-members/
//  http://adamschepis.com/blog/2011/05/02/im-adam-and-im-a-recovering-singleton-addict/

Każda reguła oprócz tego, że ma opis poszczególnych fragmentów, to jeszcze na końcu znajdziemy dokładne wyjaśnienie czemu ta reguła jest ważna wraz z odnośnikami do artykułów szerzej opisującymi problem.

Narzędzie warte uwagi, zwłaszcza przy większych projektach tworzonych przez zespół ludzi. To co tutaj poruszyłem to tylko wierzchołek tego co potrafi to narzędzie, najlepiej samemu je przetestować na własnych aplikacjach.