Tra le mille nuove bellezze in Visual Studio 2010 ho trovato estremamente utile le Code Dependencies.
L'ho subito voluto provare su un progetto che stiamo realizzando che consiste in una elaborazione a pipeline di due documenti XML. La natura del progetto importa poco, diciamo per semplicità che è una mera blackbox lato server che prende dei dati in entrata e spara il risultato in uscita.
Dal menu Analyze, "Visualize Code Dependencies", "By Class" si ottiene subito un grafico interessante.
Appare subito chiaro che il grafico ha alcuni "intrusi" come le dipendenze dagli assembly del Framework ("External"), le interfacce che aumentano inutilemente la complessità nelle dipendenze (vale probabilmente la pena di avere un diagramma separato solo per queste), ed infine le classi del programma di test.
Per epurarle si seleziona la classe, e dal menu contestuale si sceglie Selection, Hide. Ecco il risultato:
Una classe che mi ha subito attirato l'attenzione è la classe statica degli extension methods per XElement, la XElementHelper che ha una dipendenza da BindingInfo. Per avere più dettagli espando la classe XElementHelper e seleziono la BindingInfo, cosa che evidenzia subito il metodo che ha la dipendenza sulla BindingInfo.
Grazie a questa feature ho già eliminato alcune dipendenze dalla GroupInfo (non più visibili in questi screenshot). Devo dire che l'utilità di questi diagrammi è decisamente altissima.
Ma un'altra cosa che non vorremmo mai vedere in un progetto sono le circular references:
La cosa mi ha subito spaventato ma è apparso invece chiaro che si trattava dei factory methods:
Avrei voluto vedere un'opzione per eliminare le factory dal grafico, e così ho eseguito la submit di un wish su Connect. Se lo volete votare, qui c'è il link.
Un altro grafico interessante è questo:
Invito tutti a provare questa feature perché sono convinto che possa rendere più evidente alcuni aspetti oscuri del codice. Durante la fase di code review, i diagrammi di Code Depenenciees sono certamente una 'killer feature'.