2009-06-23 12 views
18

Recentemente ho usato NDepend e ha prodotto un buon report sui miei .net assembly e sui relativi pdbs.Che cos'è il grafico Abstractness vs. Instability?

La cosa più interessante che ho trovato nel rapporto era il grafico di astrazione e instabilità. Volevo capire questo in dettaglio, ho letto i loro documenti e i metronomi online, ma poteva solo aiutare in una certa misura.

In primo luogo desidero capire come valutare correttamente il grafico e le tecniche per controllare l'astrattezza con la stabilità.

C'è un ottimo articolo here che parla di questo, ma quello che più in aggiunta a ciò di cui ho bisogno è 'come posso controllarlo? [Controllo astrattezza con la stabilità]'

alt text

risposta

25

astrattezza è una misura della rigidità di un sistema software. Maggiore l'astrazione, minore rigidità (o maggiore flessibilità) e viceversa. Se i componenti del sistema dipendono da classi o interfacce astratte, un tale sistema è più semplice da estendere e modificare rispetto a se dipendesse direttamente da classi concrete.

La stabilità è una misura della tolleranza da modificare come in quanto il sistema software consente di modificarlo senza romperlo. Questo è determinato analizzando le interdipendenze dei componenti del sistema.

Robert C. Martin's article su metriche OO descrive questi concetti in termini più quantitativi.

Estratto dall'articolo:

La responsabilità, l'indipendenza e la stabilità di una categoria può essere misurata contando le dipendenze che interagiscono con quella categoria. Sono state identificate tre metriche:

Ca: Accoppiamenti Afferent: il numero di classi esterne a questa categoria che dipendono dalle classi all'interno di questa categoria.

Ce: Giunti efferenti: Il numero di classi all'interno di questa categoria che dipendono da classi di fuori questi temi.

I: Instabilità: (Ce ÷ (Ca + Ce)): Questa metrica ha la gamma [0,1]. I = 0 indica una categoria massimamente stabile. I = 1 indica una categoria massimamente instabile.

A: astrattezza: (# classi astratte nella categoria ÷ # totale di classi nella categoria). Questo intervallo metrico è [0,1]. 0 significa concreto e 1 significa completamente astratto.

In qualsiasi sistema software particolarmente grandi, l'equilibrio è fondamentale. In questo caso, un sistema dovrebbe bilanciare l'astrattezza con la stabilità per essere "buono". La posizione sul grafico A-I mostra questo. Si prega di leggere l'articolo per la spiegazione.

0

Sia l'astrattezza che l'instabilità possono essere utilizzate da sole per valutare il codice. Sai in anticipo quanto dovrebbe essere astratto o stabile qualche modulo.Ad esempio, si desidera che il livello di presentazione sia moderatamente astratto e altamente stabile, poiché i moduli inferiori dipendono da esso. D'altra parte, si desidera che il livello dell'infrastruttura sia altamente concreto (bassa astrattezza) e altamente instabile, poiché dovrebbe implementare ciò che gli strati superiori richiedono.

Una volta che è chiaro, è possibile combinare astrattezza e instabilità in un grafico, e questo è il grafico di instabilità-astrattezza. Volete che il vostro codice mostri la stessa astrattezza di quanto sia stabile, al fine di bilanciare le esigenze per supportare i futuri cambiamenti nei requisiti.

Ma in ogni caso, dovresti avere una profonda comprensione dei parametri di instabilità e di astrattezza da solo prima di provare a capirli lavorando insieme. Potete trovare alcuni esempi di ciò che significa l'instabilità in questo articolo: How to Use Module Coupling and Instability Metrics to Guide Refactoring

C'è un articolo correlato deriva una query CQLinq che misura l'instabilità di tutti i moduli nell'applicazione: How to Measure Module Coupling and Instability Using NDepend

Problemi correlati