Sono ormai diversi mesi che faccio un uso costante di un tool per applicazioni .NET da un prezzo abbastanza contenuto, NDepend, creato da un Microsoft MVP su C#, Patrick Smacchia.
Serve per misurare lo stato di salute del proprio codice, operazione tutt’altro che semplice ma fattibile se si misurano scientificamente alcuni parametri significativi.
Questo programma analizza il codice e suggerisce possibili azioni di miglioramento, sia come complessità computazionale, sia come performance.
Riporto innanzitutto la pagina del sito di NDepend dove sono riassunte le caratteristiche principali.
Come si potrà vedere, tante sono le funzionalità messe in campo e rese disponibili agli sviluppatori.
Ecco una (parziale) lista:
• CQL (Code Query Language) Queries & Constraints
• Quality & Metrics
• Dependencies Layering & Refactoring
• Code Snapshot Comparison
• Code Coverage
• State & Mutability
• Dead Code
• Optimal Encapsulation
• Naming Convention
• Object model
• Build Process Health
• Code Impacted
Con il Code Query Language (CQL) si possono impartire interessanti query del tipo:
• SELECT TOP 10 METHODS ORDER BY NbLinesOfCode DESC
• SELECT METHODS WHERE NbLinesOfCode > 10
• SELECT METHODS WHERE IsDirectlyUsing ?System.String?
• SELECT METHODS WHERE NbLinesOfCode > 10 AND PercentageComments < 30
• SELECT METHODS WHERE NbVariables > 10
Non c’è bisogno di spiegare queste “Select”; parlano già da sole, ed ovviamente non c’è nemmeno bisogno di scriversele a mano, dato che fa tutto il programma, basta chiedergli quello a cui si è interessati.
E ce ne sono una quantità smisurata, che nemmeno in mesi di utilizzo si riuscirà a provarle tutte.
Installazione
Una volta scaricato e scompresso il pacchetto, si ha una cartella di circa 17 MB, così composta come in figura:
Lanciando il file “VisualNDepend.exe” si ottiene questa schermata:
Da qua, come si vede, si possono intraprendere diverse strade. Si può aprire un progetto esistente (Open: Project – si crea un file xml per un progetto di tipo NDepend);
crearne direttamente uno nuovo (Create: Project – opzione che forse verrà poco utilizzata, dato che anche qua si crea un progetto di tipo NDepend in formato xml);
analizzare una serie di dll esistenti (Analyze: a set of .NET assemblies) e
paragonare due versioni differenti di una stessa sorgente di codice (Compare: 2 versions of a code base).
Si può anche, e lo consiglio senz’altro, installare gli add-in per Visual Studio (2005 e 2008) e per Reflector, il famoso disassemblatore di Lutz Roeder.
La schermata di sotto compare quando nel pc – come nel mio caso – tali add-in sono già installati, e quindi chiede se si vogliono re-installare o disinstallare.
L’integrazione in Visual Studio porta diverse interessanti possibilità, come si vede dalla figura:
L’opzione che probabilmente verrà più utilizzata è quella di caricare le dll dei propri progetti.
A questo punto il tool inizia una fase di analisi (abbastanza rapida) che riporterà tutta una lunga serie di statistiche utilissime, compresi eventuali problemi che può aver trovato nel codice.
Quello che mostrerà l’applicazione è talmente ricco di dettagli che, al primo utilizzo, ci si troverà disorientati dall’abbondanza di informazioni, presentate tra l’altro sotto un’eccellente veste grafica.
Ci vorrà del tempo per diventare “confident” con questa interfaccia, ed anche dopo mesi di utilizzo è probabile che si scoprano nuove funzionalità o si approfondiscano meglio strade già intraprese.
Qua sotto una schermata presa dalla documentazione del prodotto, nel caso in cui (per prova) si analizza Paint.NET.
Non manca documentazione di aiuto. Ci sono anche dei validi video in Flash (io li visualizzo con Chrome) e dal sito stesso si possono utilizzare questi come punto di partenza:
Come si vede materiale non manca di certo, ed è da mettere in conto almeno un weekend di studio (e divertimento!) con queste risorse di varia natura.
Il tempo speso è però subito ricompensato non appena si inizia ad utilizzare il tool.
I prezzi, purtroppo, non sono popolari, ed è necessario sborsare una certa quantità di quattrini anche per una sola licenza.
Qua sotto una tabella riepilogativa.
Number of licenses Price per license
1 EUR 299 - US$ 418
2 to 3 EUR 259 - US$ 362
4 to 5 EUR 229 - US$ 320
6 to 10 EUR 199 - US$ 277
11 to 20 EUR 189 - US$ 264
More than 20 EUR 179 - US$ 250
Il tool, a parte il discorso sul prezzo, è assolutamente fantastico, e credo non debba mancare nella cassetta degli attrezzi di un qualsiasi sviluppatore che ami il proprio lavoro.
La sua non banalità richiede però un minimo di tempo per prenderne completa padronanza.