【问题标题】:What is exactly is the average hierarchy metric, and how do I reduce the score?什么是平均层次结构指标,如何降低分数?
【发布时间】:2014-05-08 20:32:01
【问题描述】:

我一直在使用 PHPDepend 来验证我正在编写的代码的质量。 我不在低/平均列中的一个指标是平均层次高度指标。

pdepend.org 上的定义是

Average Hierarchy Height 指标是继承层次结构的平均深度。在一个有十个类的系统中,可以用不同的方式解释 AHH 值 1,例如:五个类从所分析的应用程序中的五个其他类继承,或者五个类从一个根类继承。

我的脑子只是不明白那句话在说什么,这意味着我正在努力弄清楚如何降低给定的分数。

【问题讨论】:

  • 如果你画的类之间有线条(每一个都是一个“链接”),它是你从“链接”中获得的“链”的平均长度。
  • 你能定义长度吗?如果我以chapman.id.au/figures/zend_db.fdp.png 为例,它会是指向类的平均行数吗?
  • 谨慎使用这些代码分析工具。它们是只为您提供指导和气味的工具。编写对你正在做的事情有意义的代码......不要试图满足工具告诉你的内容。大多数情况下,这两个目标是一致的,但有时并非如此,归根结底,代码的可维护性才是最重要的。
  • 我完全同意@Brad,我对所有这些指标持怀疑态度,但我似乎没有“得到”这个特定指标,这让我很恼火。
  • 接下来您将尝试获得 100% 的测试覆盖率;)

标签: php oop inheritance code-metrics


【解决方案1】:
class A{}

class A1 extends A{} // 1 depth

class A11 extends A1{} // 2 depth
class A12 extends A1{} // 2 depth

class B{}

class B1 extends B{} // 1 depth

class C{}

class D{}

有4个根类A、B、C、D

  • 层次结构有 2 个深度
  • B 层次有 1 个深度
  • C 层次结构的深度为 0
  • D 层次结构的深度为 0

总和是 3。

AHH = 3/4 = 0.75

来自代码

if (($count = count($this->rootClasses)) > 0) {
    $this->ahh = array_sum($this->rootClasses) / $count;

要降低此分数,您可以添加更多根本没有子级的根类(或低于最深的根类)。或者减少层次结构的深度。

【讨论】:

    猜你喜欢
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-19
    • 1970-01-01
    • 2012-10-04
    • 1970-01-01
    相关资源
    最近更新 更多