mercredi 7 octobre 2009 01:21
tja
Introduction : A la découverte de NDepend
Lorsqu’on fait du développement au quotidien avec le Framework.NET, il y a des outils dont on ne peut pas se passer. Depuis peu dans ma boîte à outils je dispose d’une nouvelle aide. Il s’agit de NDepend dont le créateur est le MVP Patrick Smacchia. Vous trouverez une mine d’information sur son blog (en anglais) ainsi que sur le site de NDepend (en anglais également). Je ne sais pas si vous êtes beaucoup à utiliser cette application car je ne vois pas beaucoup de posts passer à son sujet mais je trouve qu’elle mérite quand même un peu d’attention compte tenu des ses fonctionnalités très intéressantes. Je tiens à signaler que je ne suis pas expert dans l’utilisation de NDepend, mais n’hésitez pas à fouiller sur son site web où vous trouverez les informations détaillées. Le but de ce post est plutôt de présenter NDepend à ceux qui ne le connaissent pas encore et d’introduire quelques fonctionnalités intéressantes de mon point de vue.
Vous-vous certainement demandez :
Qu’est-ce qu’on peut faire avec NDepend ?
La réponse est : beaucoup ! Personnellement il me sert lors du refactoring et dans la maintenance du code de mes applications. NDepend donne une vue plus abstraite sur le code qu’on écrit et permet de se rendre compte et de mieux viser les parties du code qui peuvent poser éventuellement problème ou qui tout simplement nécessitent une réécriture. NDepend me permet d’avoir un regard sur :
- La qualité du code
- L’organisation et la structure du code
- Les statistiques concernant le code
Je ne vais pas énumérer la liste complète de fonctionnalités mais celles qui m’ont intéressé sont :
- La métrique du code. Vous disposez de 82 métriques du code à différents niveaux : application, assembly, espace de noms, type, méthode et les champs. Vous pouvez savoir tout simplement calculer les lignes de code, le nombre des classes, des espaces de noms, méthodes, etc., ou avoir des informations concernant la qualité du code comme par exemple le pourcentage de commentaires.
- Gestion de la complexité et des dépendances. Plus le code grossi, plus il est difficile d’y voir plus clair et de mesurer l’impact et les interactions des classes et évènements entre eux. L’analyse de dépendances peut prendre beaucoup de temps avant de réécrire une portion de code. NDepend vous montre instantanément les dépendances et les impacts que le refactoring d’une classe peut induire.
- Les statistiques concernant la qualité et la complexité du code.
- Intégration avec Visual Studio 2005/2008.
- Intégration avec les processus de builds.
NDepend dans la pratique (VisualNDepend)
Comme je le répète depuis le début de ce post, les nombreux exemples et les cas d’utilisation se trouvent sur le site de NDepend mais à titre d’introduction nous allons en explorer quelques unes. A titre d’exemple j’ai pris l’assembly de Rhino.Mocks 3.6 pour faire une analyse rapide.
Pour cela il suffit d’ouvrir NDepend et de sélectionner dans le menu l’option « Select .NET Assemblies ». Ensuite dans la fenêtre qui s’ouvre vous sélectionnez l’assembly « Rhino.Mocks.dll ». NDepend effectue une analyse rapide et vous affiche un écran de résultats ainsi qu’une page de rapport plus détaillée :
Ecran de résultats ressemble à ceci :

Et le rapport généré à ceci (une partie) :

Nous avons un aperçu rapide sur les assemblies impliquées :

En noir sont affichés les classes de l’application et en bleu les classes du Framework. Ce qui est intéressant ce que dans les classes du Framework uniquement les classes utilisées sont présentes. Dans l’image ci-dessous nous voyons que Rhino.Mocks utilise uniquement les classes HttpContext et TraceContext de System.Web.
Nous avons également une vue de détails. Les informations les plus importantes sont y consignées :

Vous y voyez le nombre de méthodes, de types utilisés, etc. Une petite remarque concerne les lignes de commentaires et de code. Vous devez disposer du fichier .PDB accompagnant votre assembly pour avoir accès à ces statistiques. Pour comprendre les éléments utilisés lors de l’analyse Patrick Smacchia a écrit un post là-dessus :

Une autre vue intéressante est le graphe de dépendances :

Il est complément cliquable et vous pouvez naviguer dans les dépendances internes de ces namespaces.
Une fonctionnalité intéressante qui permet de peaufiner l’analyse du code et la possibilité d’exécuter les requêtes CQL (Code Language Query) qui ressemblent syntaxiquement au SQL et qui permettent d’interroger le code afin d’y extraire les informations intéressantes.
Cette requête permet par exemple de savoir quelles méthodes utilisent les objets de HttpContext :

Remarquez le support d'une sorte d’intellisense lors de l’écriture de la requête.
Le résultat s’affiche :

Vous pouvez construire des requêtes bien plus complexes qui interrogent tout type d’informations.
Conclusion
NDepend est un outil qui offre des fonctionnalités très intéressantes. Bien que vous trouverez une mine d’information à son sujet sur le site de NDepend je vais lui consacrer quelques posts mais sous l’angle du refactoring et des cas réels d’utilisation.
A bientôt pour les prochaines series.
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :