Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
In questo articolo vengono fornite informazioni su una delle metriche progettate specificamente per l'analisi orientata agli oggetti: Profondità dell'ereditarietà. La profondità dell'ereditarietà, detta anche profondità dell'albero di ereditarietà (DIT), è definita come "la lunghezza massima dal nodo alla radice dell'albero" CK. È possibile vedere questo esempio con un semplice esempio. Creare un nuovo progetto libreria di classi e, prima di scrivere codice, calcolare le metriche del codice scegliendo Analizza > calcola metriche del codice per la soluzione.
Poiché tutte le classi ereditano da System.Object, la profondità è attualmente 1. Se si eredita da questa classe ed esamina la nuova classe, è possibile visualizzare il risultato:
Si noti che più è basso il nodo nell'albero (Class2 in questo caso), maggiore è la profondità dell'ereditarietà. È possibile continuare a creare elementi figlio e aumentare la profondità quanto si desidera.
Presupposti
La profondità dell'ereditarietà è basata su tre presupposti fondamentali:
Più profonda è una classe nella gerarchia, maggiore sarà il numero di metodi che probabilmente erediterà, che rende più difficile stimarne il comportamento.
Gli alberi più profondi implicano una maggiore complessità di progettazione, perché sono coinvolti più classi e metodi.
Le classi più approfondite nell'albero hanno un maggiore potenziale per riutilizzare i metodi ereditati.
I presupposti 1 e 2 indicano che avere un numero più elevato per la profondità è negativo. Se fosse finita lì, saresti in una buona posizione; tuttavia, il presupposto 3 indica che un numero più elevato per la profondità è indicato per il potenziale riutilizzo del codice.
Analisi
Ecco come leggere la metrica di profondità:
Valore basso della profondità
Un numero basso per la profondità implica una minore complessità, ma anche la possibilità di un riutilizzo minore del codice tramite ereditarietà.
Numero elevato per la profondità
Un numero elevato di profondità implica un maggiore potenziale per il riutilizzo del codice tramite ereditarietà, ma anche una maggiore complessità con una maggiore probabilità di errori nel codice.
Analisi del codice
L'analisi del codice include una categoria di regole di gestibilità. Per altre informazioni, vedere Regole di manutenibilità. Quando si usa l'analisi del codice legacy, il set di regole delle linee guida per la progettazione estesa contiene un'area di gestibilità:
All'interno dell'area di manutenibilità è una regola sull'ereditarietà:
Questa regola genera un avviso quando la profondità dell'ereditarietà raggiunge 6 o superiore, quindi è una buona regola per evitare un'ereditarietà eccessiva. Per altre informazioni sulla regola, vedere CA1501.
Mettere tutto insieme
Valori elevati per DIT indicano che anche il potenziale di errori è elevato, i valori bassi riducono il potenziale di errori. I valori elevati per DIT indicano un maggiore potenziale per l'utilizzo del codice tramite ereditarietà, mentre i valori bassi suggeriscono un minore utilizzo del codice tramite ereditarietà. A causa della mancanza di dati sufficienti, non è attualmente accettato uno standard per i valori DIT. Anche gli studi effettuati di recente non hanno trovato dati sufficienti per determinare un numero praticabile che potrebbe essere usato come numero standard per questa metrica Shatnawi. Sebbene non vi siano prove empiriche per supportarla, diverse risorse suggeriscono che un DIT intorno a 5 o 6 deve essere un limite superiore. Ad esempio, vedere https://www.devx.com/architecture-zone/45611/.
Citazioni
CK
Chidamber, S. R. & Kemerer, C. F. (1994). Una suite di metriche per la progettazione orientata agli oggetti (transazioni IEEE in Ingegneria software, vol. 20, n. 6). Recuperato il 14 maggio 2011 dal sito Web dell'Università di Pittsburgh: http://www.pitt.edu/~ckemerer/CK%20research%20papers/MetricForOOD_ChidamberKemerer94.pdf
Krishnan
Subramanyam, R. & Krishnan, M. S. (2003). Analisi empirica delle metriche CK per la complessità della progettazione orientata agli oggetti: implicazioni per i difetti software (IEEE Transactions on Software Engineering, Vol. 29, No. 4). Recuperato il 14 maggio 2011, originariamente ottenuto dal sito Web University of Massachusetts Dartmouth https://ieeexplore.ieee.org/abstract/document/1191795
Shatnawi
Shatnawi, R. (2010). Analisi quantitativa dei livelli di rischio accettabili delle metriche di Object-Oriented nei sistemi Open-Source (transazioni IEEE su software engineering, vol. 36, n. 2).