Codemetriken: Vererbungstiefe
In diesem Artikel lernen Sie eine der Metriken näher kennen, die speziell für die objektorientierte Analyse entwickelt wurden: die Vererbungstiefe. Die Vererbungstiefe, auch als Vererbungstiefenstruktur bezeichnet, wird definiert als „maximale Länge vom Knoten bis zum Stamm der Struktur“ (CK). Dies lässt sich an einem einfachen Beispiel verdeutlichen: Erstellen Sie ein neues Klassenbibliotheksprojekt, und berechnen Sie vor dem Schreiben von Code die Codemetriken. Klicken Sie hierzu auf Analysieren > Codemetrik für Projektmappe berechnen.
Da alle Klassen von System.Object
erben, beträgt die aktuelle Tiefe 1. Wenn Sie von dieser Klasse erben und die neue Klasse untersuchen, sehen Sie folgendes Ergebnis:
Beachten Sie, dass die Vererbungstiefe mit sinkender Position des Knotens im Baum (Class2
in diesem Fall) steigt. Die Vererbungstiefe kann durch Erstellen weiterer untergeordneter Elemente beliebig erhöht werden.
Annahmen
Die Vererbungstiefe basiert auf drei Grundannahmen (CK):
Je tiefer eine Klasse in der Hierarchie, desto höher ist die Anzahl der Methoden, die sie wahrscheinlich erbt. Dies erschwert die Vorhersage ihres Verhaltens.
Tiefere Strukturen erfordern komplexere Entwürfe, da mehr Klassen und Methoden beteiligt sind.
Tiefere Klassen in der Struktur verwenden mit höherer Wahrscheinlichkeit geerbte Methoden.
Aus den Annahmen 1 und 2 lässt sich schließen, dass eine höhere Vererbungstiefe etwas Schlechtes ist. Doch aus Annahme 3 lässt sich folgern, dass sich eine höhere Vererbungstiefe positiv auf die potenzielle Wiederverwendung von Code auswirkt.
Analyse
Folgende Schlüsse lassen sich aus der Tiefenmetrik ziehen:
Niedrige Vererbungstiefe:
Ein niedriger Wert für die Tiefe bedeutet weniger Komplexität, aber auch eine geringere Wiederverwendung von Code durch Vererbung.
Hohe Vererbungstiefe:
Eine hoher Wert für die Tiefe bedeutet eine höhere Wahrscheinlichkeit für die Wiederverwendung von Code durch Vererbung, aber auch mehr Komplexität und somit eine höhere Wahrscheinlichkeit für Codefehler.
Codeanalyse
Eine der Kategorien der Codeanalyse sind Wartbarkeitsregeln. Weitere Informationen finden Sie unter Wartbarkeitsregeln. Bei Verwendung der Legacycodeanalyse enthält der erweiterte Regelsatz für Entwurfsrichtlinien einen Wartbarkeitsbereich:
Innerhalb des Wartbarkeitsbereichs finden Sie auch eine Regel für die Vererbung:
Bei einer Vererbungstiefe von 6 oder höher erhalten Sie eine Warnung, um übermäßige Vererbung zu verhindern. Weitere Informationen zu dieser Regel finden Sie unter CA1501.
Zusammenfassung
Hohe Vererbungstiefenwerte erhöhen das Fehlerpotenzial, niedrige Werte verringern es. Hohe Vererbungstiefenwerte bedeuten eine höhere Wahrscheinlichkeit für die Wiederverwendung von Code durch Vererbung, während niedrige Werte auf eine geringere Wiederverwendung von Code durch Verwendung hindeuten. Mangels ausreichender Daten gibt es derzeit keinen akzeptierten Standard für Vererbungstiefenwerte. Selbst in kürzlich durchgeführten Studien wurden nicht genügend Daten ermittelt, um eine geeignete Zahl als Standard für diese Metrik festzulegen (Shatnawi). Obwohl es keine empirischen Beweise dafür gibt, deuten mehrere Quellen darauf hin, dass ein Wert von 5 oder 6 die maximale Vererbungstiefe darstellen sollte. Ein Beispiel finden Sie unter https://www.devx.com/architecture-zone/45611/
.
Quellen
CK
Chidamber, S. R. und Kemerer, C. F. (1994). A Metrics Suite for Object Oriented Design (IEEE Transactions on Software Engineering, Bd. 20, Nr. 6). Abgerufen am 14. Mai 2011 von der Website der University of Pittsburgh: http://www.pitt.edu/~ckemerer/CK%20research%20papers/MetricForOOD_ChidamberKemerer94.pdf
.
Krishnan
Subramanyam, R. und Krishnan, M. S. (2003). Empirical Analysis of CK Metrics for Object-Oriented Design Complexity: Implications for Software Defects (IEEE Transactions on Software Engineering, Bd. 29, Nr. 4). Abgerufen am 14. Mai 2011 von der Website der University of Massachusetts Dartmouth: https://ieeexplore.ieee.org/abstract/document/1191795
.
Shatnawi
Shatnawi, R. (2010): A Quantitative Investigation of the Acceptable Risk Levels of Object-Oriented Metrics in Open-Source Systems (IEEE Transactions on Software Engineering, Bd. 36, Nr. 2).