Share via


Metriche del codice - Profondità dell'ereditarietà (DIT)

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.

Profondità dell'esempio di ereditarietà 1

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:

Esempio di profondità dell'ereditarietà 2

Si noti che il nodo inferiore dell'albero (Class2 in questo caso), maggiore è la profondità dell'ereditarietà. È possibile continuare a creare elementi figlio e causare l'aumento della profondità quanto desiderato.

Presupposti

La profondità dell'ereditarietà è basata su tre presupposti fondamentali:

  1. Più profonda è una classe nella gerarchia, maggiore sarà il numero di metodi che probabilmente erediterà, che rende più difficile stimarne il comportamento.

  2. Gli alberi più profondi implicano una maggiore complessità di progettazione, perché sono coinvolti più classi e metodi.

  3. 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à non è valido. Se questo è dove è finito, si sarebbe in buona forma; Tuttavia, il presupposto 3 indica che un numero più elevato per la profondità è valido per il potenziale riutilizzo del codice.

Analisi

Ecco come leggere la metrica depth:

  • Numero basso per 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 codice

L'analisi del codice include una categoria di regole di gestibilità. Per altre informazioni, vedere Regole di gestibilità. Quando si usa l'analisi del codice legacy, il set di regole delle linee guida per la progettazione estesa contiene un'area di gestibilità:

Profondità dei set di regole di progettazione dell'ereditarietà

All'interno dell'area di gestibilità è una regola per l'ereditarietà:

Profondità della regola di gestibilità dell'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 il riutilizzo del codice tramite ereditarietà, i valori bassi suggeriscono un riutilizzo del codice minore anche se l'ereditarietà da usare. 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). Suite di metriche per la progettazione orientata agli oggetti (I edizione Enterprise E Transactions on Software Engineering, Vol. 20, No. 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 (I edizione Enterprise E transazioni in ingegneria software, vol. 29, n. 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 orientate agli oggetti nei sistemi open source (I edizione Enterprise E Transactions on Software Engineering, Vol. 36, N. 2).