NDepend 6: novità e caratteristiche di un tool di analisi del codice

Ndepend, giunto ormai alla versione 6, si configura come uno dei più tool più potenti e maturi per il controllo della qualità del codice in ambiente Microsoft .NET. Il software non permette soltanto la misurazione delle Code Metrics ma integra in maniera molto funzionale diversi strumenti per la visualizzazione (tramite matrici, rettangoli, liste, grafi, ecc) e un tool di interrogazione che permette di filtrare i risultati in maniera molto precisa.

E’ possibile utilizzarlo sia in modalità standalone che come plugin della piattaforma Microsoft Visual Studio per analizzare singoli progetti o intere solution ed è anche possibile partire dal compilato, a patto che questo sia in IL (intermediate language). E’ quindi possibile spaziare, ad esempio, da applicativi in VB.NET, C# o anche il modernissimo F#.

Perchè un tool per misurare le metriche del codice

Si deve tenere ben presente che anche nell’ambiente dell’ingegneria informatica sta prendendo piede l’approccio evidence based. Per quanto preziose possano essere le singole opinioni di ciascuno sviluppatore, per passare da uno smanettone a un ingegnere informatico è necessario arginare il proprio ego e rifarsi a ciò che le ricerche scientifiche hanno evidenziato. Ad esempio la presenza di una forte correlazione tra il numero di bug e la lunghezza / complessità dei metodi. Del resto la ragione è piuttosto intuitiva perchè la mente umana è limitata e il modo ottimale per gestire la complessità è quello di dividere in moduli.

Questa tuttavia non è l’unica problematica, anzi. Anche avere metodi molto brevi che chiamano altri metodi, che a loro volta chiamano altri metodi a cascata può rendere parecchio difficile gestire un progetto software.

A tal proposito consigliamo di leggere le qualità interne ed esterne del codice.

Un senior developer che abbia parecchia dimestichezza con il modello della programmazione ad oggetti è consapevole che, parlando di classi e metodi, si dovrebbero evitare gli estremi. Avere troppe dipendenze, troppe responsabilità (riferito a una classe), troppe righe di codice, una coesione troppo alta non è ottimale. Parlare di leggibilità, modularità è la risposta al prendere atto che nello scrivere codice dobbiamo fatti i conti con i limiti intrinseci di ogni essere umano. La risposta concreta a quest’esigenza è nel leggere e saper interpretare le metriche del codice.

Il tool in oggetto semplifica molto il lavoro di analisi e refactoring del codice esistente, e permette inoltre anche il monitoraggio nel tempo di come le varie metriche stiano evolvendo.

Analisi delle dipendenze

Nell’analisi tramite matrice (Dependency Structure Matrix) le porzioni di codice correlate saranno messe in evidenza attraverso dei grafi o una matrice come quella visibile di seguito che indica la dipendenza dei diversi progetti / dll nell’intersezione di righe e colonne.

Monitoraggio delle differenze e delle metriche

Nel caso in cui il codice subisca delle revisioni, può essere importante fare un’accurata analisi delle differenze. NDepend è in grado di fare un confronto tra le due strutture e indicare le metriche che si evolvono, indicando se si vengono a creare delle incompatibilità. Un codice non sarà mai perfetto. Molti sviluppatori inseguono l’entusiasmo delle nuove tecnologie, a volte tralasciano però una quantità adeguata di commenti, o scrivono un codice troppo procedurale o non sfruttano le potenzialità offerte dalla programmazione object oriented. O, al contrario, portano questa cosa ad un estremo che rende il codice artificioso e poco utile. Riuscendo a capire cosa effettivamente è cambiato, si può prendere consapevolezza della direzione in cui ci si sta muovendo.

Treemap

Una delle potenzialità più grande consiste nelle originali mappe per la visualizzazione dei risultati. Il Treemap consente di visualizzare delle strutture dati organizzati in una vista gerarchica formata da rettangoli di dimensioni proporzionali al valore misurato per ciascun oggetto corrispondente. Ad esempio se si misura la complessità ciclomatica per ciascuna classe, ogni rettangolo corrisponderà ad una classe e la sua dimensione sarà direttamente proporzionali alla complessità di quella classe. Può essere utilizzato in combinazione con lo strumento di interrogazione CQLinq di cui parleremo tra poco.

Fondamentale ovviamente evidenziare le dipendenze cicliche o ricorsive che oltre a rischiare loop possono portare persino a problemi di compilazione (se presenti tra assembly diversi). Per sbarazzarsi delle dipendenze ricorsive, cioè di quelle che in qualche modo si vanno a creare un legame di richiamo in un loop. Una volta che sono stati rilevati e rimossi i cicli, NDepend è in grado di avvertire ogni volta che il loop viene creato per caso.

CQLinq: il motore di interrogazione

E’ interessante che NDepend abbia messo a disposizione delle API e non si limiti al calcolare e visualizzare le metriche, ma fornisca un tool molto potente, flessibile e completo che per formulare delle query tramite un linguaggio denominato CQLinq che estenda moltissimo la potenza del tool stesso.

Lo studio della complessità del codice ha chiaramente un’importanza enorme. Ci sono diversi modi per valutarla, un metodo base tratta il conteggio delle righe, ma ci sono opzioni alternative. Si potrebbe, ad esempio, fare un conteggio delle funzioni e classi presenti, del numero dei parametri presenti nella firma di ciascun metodo, in tutto questo viene incontro la notevole quantità di interrogazioni predefinite che è possibile modificare a proprio piacimento.

NDepend vanta ben 82 metriche, ci sono metriche legate all’organizzazione del codice e altre che trattano la struttura dello stesso (i concetti di polimorfismo ed eredità).

Installazione

La versione di prova si installa scaricando dal sito www.ndpend.com un file di tipo zip. Scompattato il programma, all’interno della stessa cartella, occorre inserire il file di licenza (nel caso in cui si sia scelto di lavorare con la versione professional). A questo punto basta fare doppio click su Installer.exe ed avviare la procedura guidata, nella quale sarà possibile scegliere la copia di visual studio installata nel proprio PC.

Dal Visual Studio si apre il codice da analizzare, e dal software NDepend si crea il collegamento con il progetto. Il codice, dove sono mostrati già tutte le funzionalità del .NET, può essere ancora arrichito di soluzioni.

 

NDepend è adesso disponibile nella sua versione 6.0. Garantisce adesso una perfetta compatibilità con le ultime versioni di Visual Studio, e una maggiore efficienza nella gestione del software. Gli sforzi degli sviluppatori di qualunque capacità e specializzazione possono trarre beneficio da tool di controllo. In questo caso la presenza di software open source molto sofisticati, e un ambiente di elevata integrazione in grado di fornire risultati molto chiari in forma visiva, rendono NDepend un indispensabile assistente. Già la versione Free si presta a un buon utilizzo medio, ma si consiglia la Premium per sviluppo ad un livello più elevato.

 

Gianluigi Salvi

 

LASCIA UN COMMENTO

Please enter your comment!
Please enter your name here

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.