Che cos'è il grafico tra astrattezza e instabilità?
-
06-07-2019 - |
Domanda
Di recente ho usato NDepend e ha prodotto un buon rapporto sui miei assembly .net e relativi pdbs.
La cosa più interessante che ho trovato nel rapporto è stata il grafico astrattezza contro instabilità. Volevo capirlo in dettaglio, ho letto i loro documenti e i metrici online, ma potrebbe aiutare solo fino a un certo punto.
Innanzitutto desidero capire come valutare correttamente il grafico e le tecniche per controllare l'astrattezza con stabilità.
C'è un ottimo articolo qui che parla di questo ma in aggiunta a ciò di cui ho bisogno è 'come posso controllarlo? [controllo dell'astratticità con stabilità] '
Soluzione
L'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ù facile da estendere e modificare rispetto a se dipendesse direttamente da classi concrete.
La stabilità è una misura della tolleranza nei confronti del modo in cui il sistema software consente di modificarlo senza romperlo. Ciò viene determinato analizzando le interdipendenze dei componenti del sistema.
Estratto dall'articolo:
La responsabilità, l'indipendenza e la stabilità di una categoria possono essere misurate contando il dipendenze che interagiscono con quella categoria. Sono state identificate tre metriche:
Ca: Afferent Couplings: il numero di classi esterne a questa categoria che dipendono dalle classi all'interno di questa categoria.
Ce: Efferent Couplings: il numero di classi all'interno di questa categoria che dipendono da classi esterne a queste categorie.
I: Instabilità: (Ce & # 247; (Ca + Ce)): questa metrica ha un intervallo [0,1]. I = 0 indica una categoria massimamente stabile. I = 1 indica una categoria al massimo instabile.
A: Astrattezza: (# classi astratte nella categoria & # 247; numero totale di classi nella categoria). Questo intervallo metrico è [0,1]. 0 significa concreto e 1 significa completamente astratto.
In qualsiasi sistema software particolarmente grande, 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.
Altri suggerimenti
Sia l'astrattezza che l'instabilità possono essere utilizzate da sole per valutare il tuo codice. Sai in anticipo quanto dovrebbe essere astratto o stabile un 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 di infrastruttura sia altamente concreto (bassa astrattezza) e altamente instabile, perché dovrebbe implementare ciò che richiedono i livelli superiori.
Una volta che è chiaro, puoi combinare astrattezza e instabilità in un grafico, e questo è il grafico di instabilità-astrattezza. Vuoi che il tuo codice mostri tanta astrattezza quanto è stabile, al fine di bilanciare le esigenze a supporto dei futuri cambiamenti nei requisiti.
Ma comunque, dovresti avere una forte comprensione delle metriche di instabilità e astrattezza da solo prima di provare a capirle lavorando insieme. Puoi trovare alcuni esempi di cosa significa instabilità in questo articolo: Come utilizzare le metriche di accoppiamento e instabilità del modulo per guidare il refactoring
Esiste un articolo correlato che deriva una query CQLinq che misura l'instabilità di tutti i moduli nell'applicazione: Come misurare l'accoppiamento e l'instabilità del modulo usando NDepend