在本文中,你将了解专为面向对象的分析设计的指标之一:继承深度。 继承深度(也称为继承树深度)定义为“从节点到树根的最大长度” CK。 可以通过一个简单的示例来查看这一点。 创建一个新的类库项目,并在编写任何代码之前,选择 分析 > 解决方案中的“计算代码指标”来计算代码指标。
由于所有类都继承自 System.Object,因此深度当前为 1。 如果继承自此类并检查新类,则可以看到结果:
请注意,树中节点的下部(Class2 在本例中),继承深度越高。 可以继续创建子节点,并根据需要使深度增加。
假设
继承深度基于三个基本假定 CK:
层次结构中的类越深,它可能继承的方法数就越大,这使得预测其行为变得更加困难。
更深的树涉及更大的设计复杂性,因为涉及更多的类和方法。
树中的更深层类具有重用继承的方法的可能性更大。
假设 1 和 2 告诉你,深度数较高是不好的。 如果事情就此结束,你将会处于不错的状态。然而,假设 3 表明增加深度的数值有利于代码的潜在重用。
分析
下面是阅读深度指标的方式:
低深度数字
深度的低数字意味着复杂性较低,但也意味着通过继承重用代码的可能性较小。
深度值较高
深度较高的数字意味着通过继承重用代码的可能性更大,但在代码中具有较高错误概率,也具有更高的复杂性。
Code Analysis
代码分析包括可维护性规则类别。 有关详细信息,请参阅 可维护性规则。 使用旧代码分析时,扩展设计准则规则集包含可维护性区域:
在可维护性区域内,有一条关于继承的规则:
此规则在继承深度达到 6 或更大时发出警告,因此有助于防止过度继承是一个好规则。 若要了解有关规则的详细信息,请参阅 CA1501。
总结
DIT 的高值意味着错误的可能性也很高,低值可降低错误的可能性。 DIT 的高值表示通过继承重用代码的可能性更大,低值表明尽管继承使用,但代码重用的可能性较小。 由于缺少足够的数据,目前没有 DIT 值接受的标准。 即使是最近完成的研究也没有找到足够的数据来确定一个可行的数字,该数字可用作此指标 Shatnawi 的标准数字。 虽然没有经验证据支持它,但一些资源表明,DIT 大约 5 或 6 应该是上限。 有关示例,请参阅 https://www.devx.com/architecture-zone/45611/。
引文
CK
奇达姆伯,S.R. 和凯默勒,C.F. (1994年)。 面向对象的指标设计套件(软件工程的 IEEE 事务,第 20 卷,第 6 版)。 2011年5月14日从匹兹堡大学网站检索到:http://www.pitt.edu/~ckemerer/CK%20research%20papers/MetricForOOD_ChidamberKemerer94.pdf
克里什南
苏布拉马尼亚姆,R.和克里什南,M.S.(2003年)。 关于面向对象设计复杂性的 CK 指标的实证分析:对软件缺陷的影响(IEEE 软件工程汇刊,第29卷,第4期)。 检索 2011 年 5 月 14 日,最初从马萨诸塞大学达特茅斯网站获得 https://ieeexplore.ieee.org/abstract/document/1191795
Shatnawi
沙特纳维,R.(2010年)。 对开源系统中面向对象指标可接受风险水平的定量研究(IEEE 软件工程汇刊,第 36 卷,第 2 期)。