Compartir a través de


Métricas de código: profundidad de 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: Profundidad de herencia. La profundidad de herencia, también denominada profundidad del árbol de herencia (DIT), se define como "la longitud máxima del nodo a la raíz del árbol". Puede ver esto con un ejemplo sencillo. Cree un nuevo proyecto de biblioteca de clases y, antes de escribir cualquier código, calcule las métricas de código eligiendo Analizar > Calcular métricas de código para la solución.

Ejemplo 1 de profundidad de herencia

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

Ejemplo 2 de profundidad de herencia

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

Supuestos

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

  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 mayor 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 mayor para la profundidad es adecuado para la posible reutilización de código.

Análisis

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

  • Número bajo para profundidad

    Un número bajo para la profundidad implica menos complejidad, pero también la posibilidad de menos reutilización de código a través de la herencia.

  • Número alto de profundidad

    Un número 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 extendido contiene un área de mantenimiento:

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

Dentro del área de mantenibilidad, hay una regla sobre la herencia.

Regla de mantenibilidad de la profundidad de herencia

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 más información sobre la regla, consulte CA1501.

Juntándolo todo

Los valores altos de DIT significan que el potencial de errores también es alto y los valores bajos reducen la posibilidad de errores. Los valores altos para DIT indican un mayor potencial para la reutilización del código a través de la herencia, mientras que los valores bajos sugieren menos reutilización de código mediante 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 usar como un número estándar para esta métrica Shatnawi. Aunque no hay evidencia empírica para admitirlo, varios recursos sugieren que un DIT alrededor de 5 o 6 debe ser un límite superior. Por ejemplo, vea https://www.devx.com/architecture-zone/45611/.

Citas

CK

Chidamber, S. R. & Kemerer, C. F. (1994). Conjunto de métricas para el diseño orientado a objetos (transacciones IEEE en ingeniería de software, Vol. 20, Nº 6). Consultado el 14 de mayo de 2011, del sitio web de la Universidad de Pittsburgh: http://www.pitt.edu/~ckemerer/CK%20research%20papers/MetricForOOD_ChidamberKemerer94.pdf

Krishnan

Subramanyam, R. & Krishnan, M. S. (2003). Análisis empírico de métricas CK para la complejidad de diseño orientado a objetos: implicaciones para defectos de software (IEEE Transactions on Software Engineering, Vol. 29, No. 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). Una investigación cuantitativa de los niveles de riesgo aceptables de las métricas de orientación a objetos en sistemas de código abierto (IEEE Transactions on Software Engineering, Vol. 36, Nº 2).