2010-01-12 16 views
23

Ho provato NDepend, ho letto alcuni post su questo blog e ho persino sentito un podcast. Penso che NDepend possa essere uno strumento davvero utile, ma continuo a non vedere dove lo utilizzerei.Usi NDepend?

Come si usa? Lo usi, perché? Perchè no?

Mi piacerebbe conoscere alcuni esempi concreti del mondo reale.

+1

È possibile aggiungere alcuni tag (ad esempio, la piattaforma/lingua/tecnologia NDepend per) affinché la domanda venga visualizzata sui tag "preferiti" delle persone. –

risposta

28

Ho usato NDepend estensivamente negli ultimi anni. Fondamentalmente è uno strumento di analisi delle dipendenze, e quindi questo può aiutarti con molti problemi legati alle dipendenze.

Una delle cose principali che utilizzo è esaminare le dipendenze tra i miei assiemi, tipi e metodi. Questo mi aiuta a mantenere una visione del fatto che l'accoppiamento tra tipi sia fuori controllo e mi aiuta anche a individuare opportunità di refactoring.

Quando ci si imbarca su un rifattore massiccio, ad es. estraendo i tipi.moving in altri assembly, questo ti permette di vedere cosa dipende da cosa non devi fare il vecchio "sposta i miei tipi su un altro assembly, quindi prova e compila e vedi quali interruzioni"

NDepend ha anche una grande matrice visiva per visualizzare questo tipo di informazioni.

Inoltre, ha un linguaggio di query fantastico, CQL, che consente di scrivere query personalizzate. Queste possono essere cose semplici come "mostrami tutti i metodi che chiamano questo metodo", alle query per evidenziare il dead code, le query su complessità cylcomatic, l'accoppiamento, ecc. E molto altro ancora.

A sua volta, può essere integrato in un processo di compilazione, in modo da poter generare avvisi/guasti basati su query CQL, come "fail the build se un metodo ha più di 100 righe di codice ma nessun commento" (questo è un esempio - non sto suggerendo che questa particolare metrica sia una buona cosa).

Può anche importare i dati di copertura del codice e fornire una rappresentazione visiva delle aree con una scarsa copertura del codice, oltre a consentire l'esecuzione di query CQL in base alle informazioni sulla copertura del codice (ad esempio, mostrare metodi con copertura del codice inferiore al 70%)

È anche possibile caricare il tuo build attuale del progetto, e una generazione precedente, ed eseguire query tra di loro, come "Visualizza tutti gli nuovi tipi che hanno copertura del codice < 70%" - questo aiuta a introdurre norme più severe su basi di codice esistenti.

Questo è uno strumento fantastico e non è troppo difficile da imparare. All'inizio è spaventoso, proprio per il volume di informazioni che ti dà, ma è altamente raccomandato.

+2

+1 Hai colpito tutti i punti principali dell'utilizzo dello strumento. Aggiungerò che i diagrammi delle dipendenze sono abbastanza utili per una vista di alto livello della struttura del codice. –

4

Ho trovato utile visualizzare le modifiche tra le versioni degli assiemi. Anche per una fotografia istantanea delle variazioni di un dato rilascio ...

Penso che brilla in un ambiente di Continuous Integration in cui è possibile impostare query CQL per misurare le metriche del codice che ti interessa (complessità ciclomatica, metodi lunghi, ecc .), e quindi puoi misurare il tuo miglioramento in quelle aree nel tempo.

4

In realtà questo strumento è utile se si dispone per es. interfaccia che viene utilizzata da un'altra parte dell'applicazione sviluppata da persona/fornitore diversi. Ogni volta che vuoi cambiare l'interfaccia devi scoprire chi sta usando la tua interfaccia per evitare di romperne il codice (l'assembly non verrà compilato) Questo è applicabile a progetti più grandi.

8

Lo trovo anche inestimabile per comprendere la struttura delle chiamate di metodo complicate. Posso richiamare tutti i metodi in modo transitorio utilizzando un particolare metodo o campo, ad esempio, e vedere se ci sono problemi con chiamate circolari o dipendenze indesiderate o percorsi più complicati del necessario, ecc.

La dipendenza il grafico ora è anche interattivo, quindi posso rimuovere i metodi a cui non sono attualmente interessato, e spostare gli altri in giro per dare una buona visualizzazione di ciò che sta accadendo.

2

Questo strumento è utile quando l'applicazione ha un numero enorme di assiemi. Mi aiuta a scoprire le dipendenze del codice e le modifiche tra le versioni

2

Sto anche utilizzando NDepend per confrontare due versioni di alcuni assembly. NDepend ha questa caratteristica eccellente. Questo mi dà una visione dei cambiamenti e dei progressi del lavoro in assemblea, metodi che sono stati aggiunti, metodi rimossi e molti altri.