SharePoint 2007 : SharePointOfView et NDepend

Pour ceux qui ne le saurait pas, nous (Gat, Seb, Adrien, Julien et Moi) avons mis à disposition une sorte de mini Framework pour simplifier le développement sur SharePoint et l'avons mis à disposition sur Codeplex sous le nom de projet SharePointOfView. Grosso modo, on en est plutôt content car :

  • Fabrice en parle dans ses articles (merci au passage)
  • Renaud visite notre site, nous signale des bugs et veut mettre la main à la patte (cf dernier checkin :)
  • Seb se découvre un gout pour le cinéma (presque) dans ces posts :)

Bref que du bonheur.

Mais histoire de me plomber le moral, je me suis demandé ce qui se passerait si je lancai NDepend (l'outil de Patrick Smacchia) sur SharePointOfView... C'est parti.

On commence par la base :

Voilà une petite réprésentation du contenu des deux DLL de SharePointOfView.

VisualNDependView

et quelques Infos supplémentaires

Application Metrics

Assemblies Dependencies Diagram

  • Number of IL instructions: 2891
  • Number of lines of code: 478
  • Number of lines of comment: 310
  • Percentage comment: 39%
  • Number of assemblies: 2
  • Number of classes: 20
  • Number of types: 27
  • Number of abstract classes: 2
  • ...
  • Percentage of public types: 59.26%
  • Percentage of public methods: 62.79%

ComponentDependenciesDiagram

Sympa ! Ca fait plaisir de voir du code commenté pour une fois :)

Mais la requête suivante me fait moins plaisir :(

// <Name>Quick summary of methods to refactor</Name>

WARN IF Count > 0 IN SELECT TOP 10 METHODS /*OUT OF "YourGeneratedCode" */ WHERE 

                                          
// Metrics' definitions
     (  NbLinesOfCode > 30 OR              // http://www.ndepend.com/Metrics.aspx#NbLinesOfCode
        NbILInstructions > 200 OR          // http://www.ndepend.com/Metrics.aspx#NbILInstructions
        CyclomaticComplexity > 20 OR       // http://www.ndepend.com/Metrics.aspx#CC
        ILCyclomaticComplexity > 50 OR     // http://www.ndepend.com/Metrics.aspx#ILCC
        ILNestingDepth > 4 OR              // http://www.ndepend.com/Metrics.aspx#ILNestingDepth
        NbParameters > 5 OR                // http://www.ndepend.com/Metrics.aspx#NbParameters
        NbVariables > 8 OR                 // http://www.ndepend.com/Metrics.aspx#NbVariables
        NbOverloads > 6 )                  // http://www.ndepend.com/Metrics.aspx#NbOverloads
     AND 

    
// Here are some ways to avoid taking account of generated methods.
     !( NameIs "InitializeComponent()" OR
       
// NDepend.CQL.GeneratedAttribute is defined in the redistributable assembly $NDependInstallDir$\Lib\NDepend.CQL.dll
        // You can define your own attribute to mark "Generated".
        HasAttribute "OPTIONAL:NDepend.CQL.GeneratedAttribute") 

Résultat (épuré):

  • SovDeleteItems :SharePointOfView.ExtensionMethods.List.SovDeleteItems(SPList,Boolean,Dictionary<String,String>)
  • SovAddItems : SharePointOfView.ExtensionMethods.List.SovAddItems(SPList,Int32,Dictionary<String,String>,Boolean)
  • SovDeleteUploadedFiles : SharePointOfView.ExtensionMethods.FeatureReceiverProperties.SovDeleteUploadedFiles(SPFeatureReceiverProperties)
  • RenderWebPart(HtmlTextWriter) : SharePointOfView.WebControls.XslTransformWebPart.RenderWebPart(HtmlTextWriter)
  • FeatureActivated : SharePointOfView.EventReceivers.WebConfigFeatureReceiver.FeatureActivated(SPFeatureReceiverProperties)

Les trois premières méthodes ayant été codées par moi... Damned !

SovDeleteUploadedFiles et FeatureActivated sont aussi les methodes listées par les requêtes suivantes :

// <Name>Methods too big (NbLinesOfCode)</Name>
WARN IF Count > 0 IN SELECT TOP 10 METHODS WHERE NbLinesOfCode > 30 ORDER BY NbLinesOfCode DESC
// METHODS WHERE NbLinesOfCode > 30 are extremely complex and
// should be split in smaller methods
// (except if they are automatically generated by a tool).
// See the definition of the NbLinesOfCode metric here http://www.ndepend.com/Metrics.aspx#NbLinesOfCode

// <Name>Methods too big (NbILInstructions)</Name>
WARN IF Count > 0 IN SELECT TOP 10 METHODS WHERE NbILInstructions > 200 ORDER BY NbILInstructions DESC
// METHODS WHERE NbILInstructions > 200 are extremely complex and
// should be split in smaller methods
// (except if they are automatically generated by a tool).
// See the definition of the NbILInstructions metric here http://www.ndepend.com/Metrics.aspx#NbILInstructions

// <Name>Methods too complex (ILNestingDepth)</Name>
WARN IF Count > 0 IN SELECT TOP 10 METHODS WHERE ILNestingDepth > 4 ORDER BY ILNestingDepth DESC
// METHODS WHERE ILNestingDepth > 4 are hard to understand and maintain.
// METHODS WHERE ILNestingDepth > 8 is higher than 8 are extremely complex and should be split in smaller methods
// (except if they are automatically generated by a tool).
// See the definition of the NbILInstructions metric here http://www.NDepend.com/Metrics.aspx#ILNestingDepth

Bref, vous l'aurez compris, l' outil de Patrick  m'a permis de me relancer dans l'évolution de notre petit "bébé" en continuant à l'améliorer et à l'optimizer.

Bien sur, cet outil ne se limite qu'à ce genre de requêtes voire même de rapport, on peut aller bien plus loin.

Je vous encourage vivement à aller visiter le site et les démos pour vous donner une idée plus complète.

<Philippe/>

Publié jeudi 17 juillet 2008 12:00 par phil
Classé sous , , ,
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 :

Commentaires

# re: SharePoint 2007 : SharePointOfView et NDepend @ vendredi 18 juillet 2008 10:39

Je veux pas, je METS la main a la pate

d'ou le Checkin

Vilain codeur vas :)

En tout cas un joli projet qui monte, qui monte

themit

About phil

Leader Technique SharePoint chez Winwise, je m'occupe de missions d'expertise autour de WSS 3.0 et MOSS 2007, tout en me tenant au courant de ce qui se fait autour de Asp.net, Silverlight et des technologies Web by Microsoft en général.

Les 10 derniers blogs postés

- SQL Server 2008 : Un livre en cours de préparation ! par SQL Server vu par Christian Robert le il y a 8 heures et 53 minutes

- IIS7 : à quel pool d'application correspond le processus w3wp.exe par Atteint de JavaScriptite Aiguë [Cyril Durand] le il y a 9 heures et 50 minutes

- PDC 2008 - J-14 ! par Nix's Blog le il y a 11 heures et 35 minutes

- [Silverlight] La version finale de Silverlight 2 sera disponible en téléchargement demain ! par Thomas Lebrun le il y a 13 heures et 28 minutes

- SharePoint 2007 : Professional Developers Conference 2008 par Philippe Sentenac [MVP SharePoint] le il y a 19 heures et 21 minutes

- [Silverlight] En attendant Silverlight 2 RTW par Blog Technique d'Audrey PETIT le 10-11-2008, 21:55

- Le nouveau Gojira, c’est pour lundi… par CoqBlog le 10-11-2008, 01:18

- SharePoint : nouvel article sur la mise en place des Scopes dans MOSS Searchs par Blog Technique de Romelard Fabrice le 10-10-2008, 17:52

- Hello CS par Le Blog de julz le 10-10-2008, 12:26

- MSDN/TechNet/Microsoft Days Tour 2008 à Lille les 13 et 14 Octobre ! par RedoBlog - The .NET Gentleman !!! le 10-10-2008, 09:35