Compartilhar via


Métricas de código – DIT (profundidade da herança)

Neste artigo, você aprenderá sobre uma das métricas projetadas especificamente para análise orientada a objetos: profundidade da herança. A profundidade da herança, também chamada de DIT (árvore de heranças), é definida como "o comprimento máximo do nó até a raiz da árvore" CK. Você pode ver isso com um exemplo simples. Crie um projeto da Biblioteca de Classes e, antes de escrever qualquer código, calcule as métricas de código escolhendo Analisar > Calcular Métricas de Código para a solução.

Exemplo 1 de profundidade de herança

Como todas as classes herdam de System.Object, a profundidade atualmente é 1. Se você herdar dessa classe e examinar a nova classe, poderá ver o resultado:

Exemplo 2 de profundidade de herança

Observe que quanto menor o nó na árvore (Class2, nesse caso), maior a profundidade da herança. Você pode continuar a criar filhos e fazer com que a profundidade aumente o quanto quiser.

Suposições

A profundidade da herança é baseada em três suposições fundamentais (CK):

  1. Quanto mais profunda uma classe na hierarquia, maior será o número de métodos que ela provavelmente herdará, o que torna mais difícil prever o comportamento dela.

  2. Árvores mais profundas envolvem maior complexidade de design, uma vez que mais classes e métodos estão envolvidos.

  3. Classes mais profundas na árvore têm um potencial maior para reutilizar métodos herdados.

As suposições 1 e 2 dizem que ter um número maior para profundidade é ruim. Se isso terminasse nesse ponto, você teria uma boa situação; no entanto, a suposição 3 indica que um número maior para profundidade é bom para uma possível reutilização de código.

Análise

Veja como você lê a métrica de profundidade:

  • Número baixo para profundidade

    Um número baixo para profundidade implica menos complexidade, mas também a possibilidade de menos reutilização de código por meio da herança.

  • Número alto para profundidade

    Um número alto para profundidade implica mais potencial para reutilização de código por meio de herança, mas também maior complexidade com maior probabilidade de erros no código.

Análise de Código

A análise de código inclui uma categoria de regras de manutenção. Para obter mais informações, confira Regras de manutenção. Ao usar a análise de código herdada, o conjunto de regras da Diretriz de Design Estendido contém uma área de manutenção:

Profundidade dos conjuntos de regras de diretrizes de design de herança

Dentro da área de manutenção, há uma regra para herança:

Profundidade da regra de manutenção de herança

Essa regra emite um aviso quando a profundidade da herança atinge 6 ou mais, portanto, é uma boa regra para ajudar a evitar herança excessiva. Para saber mais sobre a regra, confira CA1501.

Juntar as peças

Valores altos para DIT significam que o potencial de erros também é alto, valores baixos reduzem o potencial de erros. Valores altos para DIT indicam um maior potencial de reutilização de código por meio da herança, valores baixos sugerem menos reutilização de código por meio da herança a ser usada. Devido à falta de dados suficientes, não há nenhum padrão atualmente aceito para valores DIT. Mesmo estudos feitos recentemente não encontraram dados suficientes para determinar um número viável que poderia ser usado como um número padrão para essa métrica Shatnawi. Embora não haja evidências empíricas para apoiá-la, vários recursos sugerem que um DIT em torno de 5 ou 6 deve ser um limite superior. Por exemplo, veja https://www.devx.com/architecture-zone/45611/.

Citações

CK

Chidamber, S. R. & Kemerer, C. F. (1994). A Metrics Suite for Object Oriented Design (IEEE Transactions on Software Engineering, Vol. 20, No. 6). Recuperado em 14 de maio de 2011, do site da Universidade de Pittsburgh: http://www.pitt.edu/~ckemerer/CK%20research%20papers/MetricForOOD_ChidamberKemerer94.pdf

Krishnan

Subramanyam, R. & 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, No. 4). Recuperado em 14 de maio de 2011, originalmente obtido do site da Universidade 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, No. 2).