0

我正在做一个项目,该项目需要我找到 Apache ant 的圈复杂度(版本 1.1 到 1.6)。我被要求为此目的使用 jar 文件。我使用了几个工具(Xdepend 试用版和 Cyvis)来查看结果。然后我尝试使用 Ant Ver1.6 源代码的结果来验证结果。为了分析源代码,我使用了 Netbeans 插件,并且还手动找到了一些方法的 CC。

我发现在许多情况下,jar 文件中的 CC 几乎相同,但在某些情况下存在很大差异。我检查了一种这样的方法,发现它包含很少的 try 和 catch 块。我的问题是:

  1. java编译器是否进行了可能主要影响CC值的优化(比如循环展开)?是否建议使用 jar 文件进行此类分析?
  2. try 和 catch 块是否存在一些特定问题,在这种情况下我可以考虑其他分析方法?
  3. 有没有更好(更准确)的工具来进行这种分析?

请分享您在此主题上的经验。提前致谢。

干杯

4

2 回答 2

2

像圈一样的复杂性度量的目的是衡量程序的结构,因为它会影响程序员理解代码库的能力;例如维护它。由于程序员在源代码级别查看代码,因此衡量源代码复杂性才是真正重要的。

如果您通过分析字节码文件获得的度量与常规源代码度量不同,那么它们毫无价值,您应该放弃这个想法。

(对于来自字节码文件的 CC 度量不同,我不会感到惊讶。一方面,编译器可以重新组织代码以使其看起来更简单;例如通过展开循环。另一方面,编译器可能需要生成复杂的外观简单语言结构的字节码序列,仅仅是因为字节码可以表达的限制。)

于 2010-01-14T09:50:42.770 回答
1

这不是您问题的完整答案..

Java 编译器将像任何其他优秀的编译器一样进行许多优化。其中一些将包括循环不变代码运动、公共子表达式消除、强度减少和变量分配。

但是 Java热点 是 Java 字节码执行引擎,它将动态编译字节码以在运行时对其进行优化。

所以有很多因素会使 src 代码 CC 偏向于字节码 CC 但这并不意味着改进 CC 不是一项有价值的工作,对 src 代码的 CC 评估对于可维护的干净代码至关重要。

于 2010-01-14T09:44:29.990 回答