CQLinq : Nouveautés de NDepend v4.1

NDepend est un outil d’analyse de code .NET que j’avais déjà présenté lors d’un précédent billet. Aujourd’hui, je ne vais donc pas vous présenter à nouveau ce produit mais plutôt vous parler d’une de ses nouveautés : CQLinq.

Comme son nom l’indique, cette nouvelle fonctionnalité vous permet d’exécuter des requêtes Linq au sein de votre code. Pour effectuer mes tests, j’ai récupérer le projet open source Json.NET. Une fois téléchargé, je l’extraie dans un dossier puis crée un nouveau projet sur NDepend et charge le Newtonsoft.Json.dll de la version 4.0. Je lance l’analyse puis après quelques instants, le rapport s’affiche à l’écran :

Ndepend4_1

Passons maintenant à la partie qui nous intéresse : CQLinq.

Je retourne donc sur NDepend et ouvre la fenêtre d’exécution des requêtes (Queries and Rules Edit) tout en ayant l’onglet Metrics ouvert :

NDepend4_2

J’écris la requête suivante :

warnif count > 0 from t in JustMyCode.Types where 
   t.NbLinesOfCode > 500 ||
   t.NbILInstructions > 3000
   orderby t.NbLinesOfCode descending
select new { t, t.NbLinesOfCode, t.NbILInstructions,
                t.Methods, t.Fields }

Celle-ci permet de retrouver les types qui contiennent plus de 500 lignes de code. A peine écrite, j’ai déjà 2 résultats (JsonTextReader et JsonSerializerInternalReader) :

NDepend4_3

NDepend4_4

Voici quelques exemples de requête :

// Retrouver les méthodes qui ont plus de 10 variables
warnif count > 0 from t in JustMyCode.Methods where 
   t.NbVariables > 10
   orderby t.NbLinesOfCode descending
select new { t, t.NbLinesOfCode }
// Retrouver les champs qui pourraient être privés
warnif count > 0 from t in JustMyCode.Fields where 
   t.CouldBePrivate
select new { t, t.FullName}
// Retrouver les champs qui devraient être préfixés d'un 'm_'
warnif count > 0 from f in Application.Fields where 
  !f.NameLike (@"^m_") && 
  !f.IsStatic && 
  !f.IsLiteral && 
  !f.IsGeneratedByCompiler  && 
  !f.IsSpecialName && 
  !f.IsEventDelegateObject
select new { f, f.SizeOfInst } 

Vous pouvez retrouver d’autres exemples de requêtes CQL sur le site de NDepend à cette adresse.

J’avais déjà eu une très bonne impression sur NDepend lors de sa version précédente mais je dois dire qu’avec l’inclusion de CQLinq, je reste plus que conquis par cet outil permettant de maintenir et améliorer aisément la qualité de son code. De plus, la documentation reste très complète et il vous faudra un bout de temps avant de pouvoir le maîtriser complètement mais le jeu en vaut vraiment la peine.

Je tiens à conclure ce billet en remerciant Patrick Smacchia de m’avoir offert la possibilité de tester NDepend v4.1.

Pour marque-pages : permalien.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>