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

Philippe Sentenac est Consultant SharePoint à Wygwam en région Parisienne. Il intervient essentiellement sur des missions liées à SharePoint (2007 et 2010 ) mais aussi autour du Web 2.0. Plus généralement, il s'intéresse à l'ASP.Net (MVC) , à Silverlight, et à tout ce qui est orienté Web en rapport avec les nouvelles technologies, qu'il pratique depuis 2006. Féru de développement, il est passionné par les problématiques de méthodologies et d'industrialisation du développement.

Les 10 derniers blogs postés

- Merci par Blog de Jérémy Jeanson le 10-01-2019, 20:47

- Office 365: Script PowerShell pour auditer l’usage des Office Groups de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 11:02

- Office 365: Script PowerShell pour auditer l’usage de Microsoft Teams de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 10:39

- Office 365: Script PowerShell pour auditer l’usage de OneDrive for Business de votre tenant par Blog Technique de Romelard Fabrice le 04-25-2019, 15:13

- Office 365: Script PowerShell pour auditer l’usage de SharePoint Online de votre tenant par Blog Technique de Romelard Fabrice le 02-27-2019, 13:39

- Office 365: Script PowerShell pour auditer l’usage d’Exchange Online de votre tenant par Blog Technique de Romelard Fabrice le 02-25-2019, 15:07

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Stream Portal par Blog Technique de Romelard Fabrice le 02-21-2019, 17:56

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Video Portal par Blog Technique de Romelard Fabrice le 02-18-2019, 18:56

- Office 365: Script PowerShell pour extraire les Audit Log basés sur des filtres fournis par Blog Technique de Romelard Fabrice le 01-28-2019, 16:13

- SharePoint Online: Script PowerShell pour désactiver l’Option IRM des sites SPO non autorisés par Blog Technique de Romelard Fabrice le 12-14-2018, 13:01