Métricas de código: profundidad de la herencia (DIT)

En este artículo, obtendrá información sobre una de las métricas diseñadas específicamente para el análisis orientado a objetos: la profundidad de la herencia. La profundidad de la herencia, también llamada profundidad del árbol de herencia (DIT), se define como "la longitud máxima del nodo a la raíz del árbol" CK. Puede verlo con un ejemplo sencillo. Cree un nuevo proyecto de biblioteca de clases y, antes de escribir ningún código, calcule las métricas de código seleccionando Analizar > Calcular métricas de código para la solución.

Ejemplo 1 de profundidad de la herencia

Puesto que todas las clases heredan de System.Object, la profundidad actualmente es 1. Si hereda de esta clase y examina la nueva clase, puede ver el resultado:

Ejemplo 2 de profundidad de la herencia

Observe que cuanto más bajo sea el nodo del árbol (Class2 en este caso), mayor será la profundidad de la herencia. Puede seguir creando elementos secundarios y hacer que la profundidad aumente tanto como quiera.

Supuestos

La profundidad de la herencia se basa en tres supuestos fundamentales CK:

  1. Cuanto más profunda sea una clase en la jerarquía, mayor será el número de métodos que probablemente heredará, lo que dificulta la predicción de su comportamiento.

  2. Los árboles más profundos implican una mayor complejidad de diseño, ya que hay más clases y métodos implicados.

  3. Las clases más profundas del árbol tienen un mayor potencial para reutilizar los métodos heredados.

Las suposiciones 1 y 2 indican que tener un número elevado para la profundidad es malo. Si ese es el lugar donde finalizó, estaría en buena forma; sin embargo, la suposición 3 indica que un número más elevado para la profundidad es bueno para la posible reutilización de código.

Análisis

Aquí se muestra cómo leer la métrica de profundidad:

  • Valor de profundidad bajo

    Un valor bajo para profundidad implica menos complejidad, pero también la posibilidad de reutilizar menos el código a través de la herencia.

  • Valor de profundidad alto

    Un valor elevado de profundidad implica más potencial para la reutilización del código a través de la herencia, pero también una mayor complejidad con una mayor probabilidad de errores en el código.

Análisis de código

El análisis de código incluye una categoría de reglas de mantenimiento. Para obtener más información, consulte Reglas de mantenimiento. Al usar el análisis de código heredado, el conjunto de reglas de directrices de diseño extendidas contiene un área de mantenimiento:

Profundidad de los conjuntos de reglas de directrices de diseño de herencia

Dentro del área de mantenimiento hay una regla para la herencia:

Regla de mantenimiento de herencia de profundidad

Esta regla emite una advertencia cuando la profundidad de herencia alcanza 6 o superior, por lo que es una buena regla para ayudar a evitar una herencia excesiva. Para obtener más información sobre la regla, consulte CA1501.

En resumen:

Los valores altos de DIT significan que la posibilidad de errores también es alta, mientras que los valores bajos reducen la posibilidad de errores. Los valores altos de DIT indican un mayor potencial de reutilización del código a través de la herencia, mientras que los valores bajos sugieren menos reutilización de código a través de la herencia. Debido a la falta de datos suficientes, actualmente no hay ningún estándar aceptado para los valores DIT. Incluso los estudios realizados recientemente no encontraron datos suficientes para determinar un número viable que se podría utilizar como número estándar para esta métrica Shatnawi. Aunque no hay pruebas empíricas para admitirlo, varios recursos sugieren que un DIT alrededor de 5 o 6 debe constituir el límite superior. Por ejemplo, vea https://www.devx.com/architecture-zone/45611/.

Citas

CK

Chidamber, S. R.y& Kemerer, C. F. (1994). A Metrics Suite for Object Oriented Design (IEEE Transactions on Software Engineering, vol. 20, n.º 6). Consultado el 14 de mayo de 2011 en el sitio web de la Universidad de Pittsburgh: http://www.pitt.edu/~ckemerer/CK%20research%20papers/MetricForOOD_ChidamberKemerer94.pdf

Krishnan

Subramanyam, R. y Krishnan, M. S. (2003). Empirical Analysis of CK Metrics for Object-Oriented Design Complexity: Implications for Software Defects (IEEE Transactions on Software Engineering, vol. 29, n.º 4). Consultado el 14 de mayo de 2011, obtenido originalmente del sitio web de la Universidad de 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, vol. 36, n.º 2).