1. 源代码的质量平台 Sonar
是一个开源平台,用于管理Java源代码的质量。从 Sonar 1.6 版本开始,Sonar从一个质量数据报告工具,转变成为现在的代码质量管理平台。
主要特点:
•代码覆盖:通过单元测试,将会显示哪行代码被选中
•改善编码规则
•搜寻编码规则:按照名字,插件,激活级别和类别进行查询
•项目搜寻:按照项目的名字进行查询
•对比数据:比较同一张表中的任何测量的趋势
2. Java代码质量评价 JDepend
JDepend一个开放源代码的可以用来评价Java程序质量的优秀工具,它遍历Java class的文件目录,以Java包(package)为单位,为每一个包/类自动生成 包的依赖程度,稳定性,可靠度等的评价报告,根据这些报告,我们可以得到包或类之间的依赖关系,并分析出包的稳定程度,抽象程度,是否存在循环依耐关系 等。
我们可以根据JDepend给出的报告数据,分析出我们的包是否是可靠的,稳定的,健壮的包,是否符合面向对象的设计原则。
一个具有稳定性,扩展性,可维护性的软件系统要求系统设计遵循面向对象的设计原则。一般来说,面向对象的设计原则要求满足高聚合,低耦合,禁止循环依赖等基本原则。
如果存在包与面向对象的设计原则有抵触,则有必要对这些包加以重新设计或抽象。
JDepend的主要功能
JDepend生成的Java包的质量评价报告主要包括:
Number of Classes and Interfaces:实现类与抽象接口的数目
面向的设计原则之一The Stable Abstractions Principle (SAP):稳定抽象等价原则指出了包的稳定程度与它的抽象程度(接口的数目)成正比,也就是说,一个包内包含的接口所占的比重越大,这个包就越稳定。
Abstractness (A):包的抽象度。指一个包内包含的抽象类或接口占整个包中的类的比重。该值处于0,1之间,若A=0,说明包内不包含任何抽象类或接口;若A=1,说明包内全部是抽象类或接口。包的抽象度与稳定性之间的关系上面已经作了说明。
Afferent Couplings (Ca):向心耦合。依赖该包(包含的类)的外部包(类)的数目(i.e. incoming dependencies),该数值越大,说明该包的担当的职责越大,也就越稳定。
Efferent Couplings (Ce):离心耦合。被该包依赖的外部包的数目(i.e. outgoing dependencies),该数值越大,说明该包越不独立(因为依赖了别的包),也越不稳定。
Instability (I):衡量一个包的不稳定程度。I=Ce/(Ce+Ca)。它的值处于[0,1]之间。I=0时说明包是最稳定的,反之I=1则说明包极不稳定。
Distance from the Main Sequence (D): 该指标主要用来评价包的抽象程度与稳定程度的平衡关系,它可以用二维直线图 A + I = 1 来表示。D=abs((A + I) - 1),也就是说D为 一个包的抽象度 + 包的不稳定程度 - 1 的绝对值。一个理想的包是:完全抽象的(A=1),非常稳定的(I=0),这时D=0;或者是:完全具体类构成的包(A=0),非常不稳定的 (I=1),这时同样也有D=0。D=0说明包的抽象程度与稳定程度是平衡的,反之D=1说明包的平衡程度被严重破坏。
Package Dependency Cycles:包的循环依赖度。
面向对象的设计原则之一:The Acyclic Dependencies Principle (ADP) - OO设计的无环依赖原则要求包之间不能有循环依赖关系。
JDepend为我们提供了上述许多高级功能,为我们设计健壮的包/类提供了重要的参考数据,是一个不可多得的优秀工具。
3. Java代码检查 CheckStyle
CheckStyle是SourceForge下的一个项目,提供了一个帮助JAVA开发人员遵守某些编码规范的工具。它能够自动化代码规范检查过程,从而使得开发人员从这项重要,但是枯燥的任务中解脱出来。
CheckStyle检验的主要内容
·Javadoc注释
·命名约定
·标题
·Import语句
·体积大小
·空白
·修饰符
·块
·代码问题
·类设计
·混合检查(包活一些有用的比如非必须的System.out和printstackTrace)
从上面可以看出,CheckStyle提供了大部分功能都是对于代码规范的检查,而没有提供象PMD和Jalopy那么多的增强代码质量和修改代码的功能。但是,对于团队开发,尤其是强调代码规范的公司来说,它的功能已经足够强大。
4. Java代码审查工具 JavaViewer
•代码度量能度量Halstead、LOC、易用性、专一性、封装性等指标;
•报告输出以Html格式输出代码的审查报告及代码清单;
•源码显示语法彩色编码,审查要素与源代码联动显示;
•静态审查涵盖文件级、类级、函数级等三个级别的视图显示;
•图文对照自动生成类图、统计图,并与相关代码对照审查;
•规则定制注释规则、命名规则的自定义设置与重复利用,提高知识共享度;
•数据字典支持SQL Server 2000和Oracle9i数据库中的数据库设计文件的浏览及相关文档的输出。
5. 代码度量工具 JavaNCSS JavaNCSS 是一个开源的度量工具,提供圈复杂度的方法级的值。
6. Eclipse代码检测插件 Smelly
Smelly这个插件能够自动探测Java代码中的Bad Smells。
Smelly在软件开发中非常有用,它当前能够探测以下这些Bad Smells:
1.Data Class(纯数据类):Class只有fields或get/set属性,没有任何行为。
2.Large Class(庞大的类):单一类做过多的事情。
3.Long Method(过长的Method):过长的代码会使得Method难以理解和维护,应该将该Method分解成多个独立功能的Method。
4.High Comment Density(过多的注释):注释过多意味着该段代码难于理解。
5.Long Parameters List(过长的参数列表):一个Method中传入过长的参数列表,使得参数列难以理解。修改参数列时将会使得参数前后不一致。
6.Switch Statements(Switch语句):同样的Switch语句出现在不同的方法或不同的Class中,这样当需要增加新的CASE分支或者修改CASE分支内语句时,就必须找到所有的地方,然后进行修改。
7.Java运行分析工具 jSonde
jSonde能够帮助你分析java应用程序。她能够生成序列图、CPU和内存的性能评估以及不同格式的汇总:如jar依赖等。使用jSonde不需要特别的知识,她适用于不同的操作系统和Java环境。
jSonde主要由2个组件:
1、 一个配置在Java进程中的代理,是为了收集信息
2、 一个用来显示代理收集的信息的GUI
8. 静态代码分析工具 CodeSecure
CodeSecure V4是业界领先的静态代码分析工具,用于构建安全的应用程序。
9. 代码覆盖率检查工具 EMMA EMMA 是一个用于检测和报告 JAVA 代码覆盖率的开源工具。它不但能很好的用于小型项目,很方便得得出覆盖率报告,而且适用于大型企业级别的项目。
EMMA 有许多优点,首先你能免费得到它,并把它用于自己项目的开发。它支持许多种级别的覆盖率指标:包,类,方法,语句块(basic block)和行,特别是它能测出某一行是否只是被部分覆盖,如条件语句短路的情况。它能生成 text,xml,html 等形式的报告,以满足不同的需求,其 html 报告提供下钻功能,我们能够从 package 开始一步步链接到我们所关注的某个方法。EMMA 能和 Makefile 和 Ant 集成,便于应用于大型项目。特别还须指出的一点是,EMMA 的效率很高,这对于大型项目来说很重要。
EMMA 是通过向 .class 文件中插入字节码的方式来跟踪记录被运行代码信息的。EMMA 支持两种模式:On the fly 和 Offline 模式。
On the fly 模式往加载的类中加入字节码,相当于用 EMMA 实现的 application class loader 替代原来的 application class loader。
Offline 模式在类被加载前,加入字节码。
On the fly 模式比较方便,缺点也比较明显,如它不能为被 boot class loader 加载的类生成覆盖率报告,也不能为像 J2EE 容器那种自己有独特 class loader 的类生成覆盖率报告。这时,我们能求助于 Offline 模式。
EMMA 也支持两种运行方式:Command line 和 Ant。
命令行一般和 On the fly 模式一起适用,对于简单的项目能够快速产生覆盖率报告。通过 Ant task 来运行 EMMA 的话,特别适用于大型的项目。