使用jar文件的循环复杂性

时间:2010-01-14 09:00:40

标签: java cyclomatic-complexity

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

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

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

    干杯

2 个答案:

答案 0 :(得分:2)

复杂性测量的目的,如圈数,是关于测量程序的结构,因为它影响程序员理解代码库的能力;例如保持它。由于程序员在源代码级别查看代码,因此源代码复杂性的衡量标准才是真正重要的。

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

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

答案 1 :(得分:1)

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

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

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

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