【问题标题】:How to obtain dependency metrics from Java source code?如何从 Java 源代码中获取依赖度量?
【发布时间】:2010-05-03 14:19:01
【问题描述】:

对于一项任务,我们必须从 Hibernate 项目中提取一些软件指标。我们必须从 Hibernate 中每个包的每个修订版中提取传入耦合和传出耦合度量(依赖扇入、扇出)。提供了一些能够提取这些指标的工具,例如ckjmJDepend。我检查过的其他工具是SonarjavancssAOP。还有 Metrics Eclipse 插件,我也没有使用。

据我所知,这些工具的共同点是它们都对字节码(*.class 文件)进行操作。这是一个问题,因为我必须从源代码构建每个修订版才能运行,例如,JDepend 依赖它。由于我的开发堆栈太新,因此无法构建较旧的修订版。我想做的是对 source 文件进行这种分析,这样我就不必构建每个修订版。这可能吗?还是有充分的理由说明为什么所有这些工具都只对字节码进行操作?

【问题讨论】:

    标签: java analysis metrics


    【解决方案1】:

    试试这个: http://sourceforge.net/projects/hibernate/files/hibernate3/

    您可以在此处下载大量旧版本的 Jar 文件。

    这些工具适用于字节码的原因通常是因为编写字节码解析器比编写完整的源代码解析器更简单,而且它还允许您覆盖您没有源代码的第三方库。

    【讨论】:

    • 是的,我知道我可以下载旧版本,但这太粗粒度了。我们被要求根据一些指标挑选有趣的修订并进行进一步处理。
    • 嗯,那么这取决于您(或您的老师)对“修订”的定义。我认为比较点发布例如v3.2.5 和 v.3.2.6 是有效的,但也许这不是作业所说的:)
    【解决方案2】:

    我们发现cccc 能够收集有关源代码的指标(LOC、McCabe 的复杂性、CK 和 HK)。也许它适用于简单的项目,但是在所有 Hibernate 代码上运行它会导致大量的解析错误。此外,它最终会因分段错误而停止,给我们留下不完整的报告。

    最后,我们编写了自己的脚本来处理文件以收集必要的信息。它不是防水的,因为它实际上并不解析 Java,而只是寻找某些模式,但现在已经足够了。

    【讨论】:

      【解决方案3】:

      许多工具对类文件字节码进行操作,因为(正如其他答案所指出的),编写类文件解析器比实际解析完整的 Java 容易得多。

      我们的DMS Software Reengineering Toolkit 及其Java Front End 可以通过1.6 解析和名称解析Java。 (它解析 1.7 但没有解决一些非常黑暗的角落,很快就会实现)。这提供了完整的 AST 和符号表。 DMS 机器将让您访问/​​检查 AST 和符号表。

      DMS 将一次处理多个源文件,因此您可以使用这些数据计算跨多个文件的指标。

      【讨论】:

        【解决方案4】:

        您可以试用JavaDepend 的试用版,它足以满足您的需求,它可以计算传出耦合、传入耦合和许多其他有用的指标。

        【讨论】:

          【解决方案5】:

          查看Sonar。它是一个开源、独立的 Web 服务,您可以将代码“提交”到该服务,它会生成关于各种代码指标的精美 HTML 报告。它还保留了构建历史。最重要的是,您不必修改构建或 pom!

          它也有一个 maven 目标:sonar:sonarJenkins(以前是 Hudson)有一个插件,所以如果你将它用于你的 CI 是完全没有痛苦的。

          检查一下 - 你不会后悔的!

          【讨论】:

            猜你喜欢
            • 2012-07-04
            • 2020-08-02
            • 2011-04-14
            • 2017-01-21
            • 2011-07-03
            • 1970-01-01
            • 1970-01-01
            • 2015-09-08
            • 1970-01-01
            相关资源
            最近更新 更多