Information
NDepend pour l'analyse statique de code .NET

Pour ceux qui ne connaissent pas NDepend, il s’agit d’un outil d’analyse statique de code .NET qui permet de remonter des informations à toute une équipe de développement. NDepend aide à travailler sur la qualité, l’architecture, la structure et l’évolution de vos développements. L’outil s’intègre dans l’usine logicielle et produit des rapports configurables. Il propose aussi une interface graphique pour rendre plus accessible la masse d’information qui fait toute la complexité d’une base de code.

  

  

L’originalité mais aussi la puissance de NDepend vient de son langage de requête, CQL Code Query Language qui permet d’interroger la base de code, un peu come SQL permet d’interroger une BD relationnelle. Par exemple la requête CQL suivante retourne les méthodes publiques, qui utilisent la classe string et qui ont plus de 10 lignes de code :

SELECT METHODS WHERE IsDirectlyUsing "System.String" AND IsPublic AND NbLinesOfCode > 10

CQL permet aussi de rédiger des règles ou contraintes qui seront vérifiées à chaque build. Par exemple, la règle suivante vous avertira si le nom d’un champ non statique ne respecte pas la convention de nommage de commencer par m_.

WARN IF Count > 0 IN SELECT FIELDS WHERE NameLike "^m_" AND IsStatic

Pour en savoir plus sur les fonctionnalités offertes par l’outil, le mieux est de consulter la page sur les possibilités de l'outil.

La nouvelle version de NDepend ajoute une nouvelle fonctionnalité majeure: l’intégration des métriques concernant la couverture de code par les tests. Les informations relatives à la couverture de code sont récupérées à partir de NCover 2.X et de Visual Studio Team System 2005 or 2008.

Les métriques sont:

Il y a aussi la métrique PercentageBranchCoverage qui est définies sur les méthodes.

Cela ouvre des possibilités inédites. Typiquement, une problématique souvent rencontrée est de garantir une non-régression du haut niveau de la couverture lorsque le code évolue. CQL vous permet simplement d’éditer des règles pour qu’une classe YourNamespace.YourClass reste couverte à 100% lorsqu’elle évoluera.

WARN IF Count > 0 IN SELECT TYPES WHERE FullNameIs "YourNamespace.YourClass" AND PercentageCoverage < 100

Nous utilisons constamment NDepend sur son propre code et une idée a été de définir un attribut NDepend.CQL.FullCoveredAttribute. Lorsque cet attribut marque une classe, cela signifie qu’elle doit rester couverte à 100%. Ainsi en une seule règle nous pouvons vérifier la couverture de toutes nos classes :

WARN IF Count > 0 IN SELECT TYPES WHERE HasAttribute "NDepend.CQL.FullCoveredAttribute" AND PercentageCoverage < 100

Non seulement cela simplifie grandement la gestion de la couverture, mais c’est aussi un moyen de documenter notre code pour signifier aux futures développeurs que telle ou telle classe doit rester complètement couverte.

D’autres possibilités sont offertes. Ainsi NDepend peut aider à orienter ses tests sur les parties sensibles de votre code, celles qui viennent d’être développées et/ou refactorées. Pour ne pas perturber les statistiques, vous pouvez aussi définir des zones de codes qui ne peuvent être couvertes. Enfin, vous pouvez spécifier à la volées comment les fichiers de couvertures de code seront assemblés afin d’en savoir plus sur qui teste quoi.

Je vous invite à consulter ce screencast de 3 minutes pour vous faire une idée de l’utilisation de cette fonctionalité.

Plus de détails sont aussi disponibles sur le blog de Patrick Smacchia.

posté par Laurent Kempé le 21/04/2008 à 09:57, lu 5036 fois.
tag(s) Outils
» Démarrer une discussion