如何更好地利用Pmd、Findbugs和CheckStyle分析结果

这里列出了很多Java静态分析工具,每一种工具关注一个特定的能发挥自己特长的领域,我们可以列举一下:

  • Pmd 它是一个基于静态规则集的Java源码分析器,它可以识别出潜在的如下问题:

    可能的bug——空的try/catch/finally/switch块。
    – 无用代码(Dead
    code):无用的本地变量,方法参数和私有方法。
    – 空的if/while语句。

    过度复杂的表达式——不必要的if语句,本来可以用while循环但是却用了for循环。

    可优化的代码:浪费性能的String/StringBuffer的使用。


  • FindBugs 它用来查找Java代码中存在的bug。它使用静态分析方法标识出Java程序中上百种潜在的不同类型的错误。

  • Checkstyle 它定义了一系列可用的模块,每一个模块提供了严格程度(强制的,可选的…)可配置的检查规则。规则可以触发通知(notification),警告(warning)和错误(error)。

现在有很多查看这些工具的处理结果的方式:

  • XML格式:这些工具都可以产生XML文件,这些XML文件能用来产生HTML报表或者是被别的工具用来浏览分析的结果。

  • HTML格式:HTML格式是最受欢迎的产生报表和团队间分享的的方式,你也可以用xsl表格创建你自己的报表。

  • IDE插件:几乎所有叫得上名字的IDE都给这些工具提供了插件,这使得发现源码中存在的所有问题几乎变成可能。

代码质量工具的一个问题是,它们有时候会给开发者提示很多不是错误的错误-也叫做假阳性(false
positives)。当这种情况发生的时候,开发者可以学着忽略工具的输出信息,或者是把这些输出全部抛弃掉。

为了更好的利用这些工具的输出结果,给开发者一个更有用的视图,最好是有一种只关注我们想要的东西的方式。本文中,我们将找出其他有趣的方式来更好的利用所有这些有名的Java静态分析工具的输出结果,然后可以像查询数据库那样查询这些结果。

JArchitect和CQLinq

JArchitect是另一个静态分析工具,它弥补了其他工具(的不足),它是使用一种基于Linq(CQLinq)的代码查询语言像查询数据库那样来查询代码。

JArchitect3的以前版本,只能查询从JArchitect提取出来的分析数据,但是从JArchitect4开始,可以把许多其他静态分析工具的输出结果包含进来,然后使用CQLinq做查询。

让我们以PDT核心(Eclipse的Php插件)的源码为例来说明如何在JArchitect中利用好这些静态工具的分析结果。

在查询分析结果以前,要遵守以下几个步骤:

  • 第一步:

用PMD,CPD,FindBugs和CheckStyle分析项目工程,生成包含分析结果的XML文件。

  • 第二步:

用JArchitect分析项目工程。

  • 第三步:

在JArchitect点击菜单“插件(Plugins)”->“导入插件结果文件(Import Plugins Result
Files)”把所有的XML文件导入到JArchitect中。

JArchitect默认给这些工具提供了许多有用的查询,并且这些查询都是可以很简单的进行定制的。

让我们来看一些CQLinq的查询:

获取的所有的问题(issue):

获取所有问题的请求很简单,但是没什么用处,因为如何利用23272个问题的分析结果确实是一个很大的挑战。

为了更好的利用这些工具的分析结果,我们可以用CQLinq来做过滤,然后只关注那些我们想要关注的东西。

根据所使用的检查工具发请求

我们可以修改第一个请求,然后添加一个查询工具的criteria。

据规则集发请求

我们也可以根据问题的规则集做过滤:

根据优先级发请求

也可以根据优先级做过滤:

出现次数最多的问题

知道哪些问题是被这些工具报告次数最多的是很有用的。

出现问题最多的类

知道哪些类包含了最多的问题是很有用的。

上图可以看出来,CheckStyle报告的上千个问题中有很多是可以忽略的。

前面的查询很有用,但是,它并没有给我们一个精确的类质量的信息,因为要考虑的另一个有用的维度就是代码行数(NBLinesOfCode)。一般来说代码行数多的类会包含更多的问题,基于这个考虑,我们可以修改之前的请求来计算出问题数目和代码行数(NBLinesOfCode)的比率。

上面的查询结果看上去很奇怪,前8个类的问题数和代码行数比率超过了200,也就是说一行代码有超过200个问题。

为了解释这种行为,我们看下CompilerAstParser的一些代码:

代码行数(NBLinesOfCode)指的是语句的数目而不是代码的物理行数,CompilerAstParser这个类声明了很多数组,每一个都包含了几千个物理行,但是,每一个数组都被认为是一个语句。

就像前面展示的出现次数最多的问题那样,每一个数组都把”+应该在一个新行上”这个规则违反了上千次。或许最好是应该把这样的规则从CheckStyle的配置文件中删掉。

出问题最多的方法

当静态警察工具报告了问题以后,定位解决问题的优先级是很有用的,尤其是当包含bug的时候。

bug可能存在于某一个特定的方法中,但是,知道还有多少方法也受这个bug的影响是非常有用的。知道了出问题最多的这个方法做好事尽快把它解决掉。

使用CQLinq,我们可以把这些工具的结果和JArchitect的结果结合起来创建出更复杂的查询,然后把这些检查规则添加到构建过程中去。

问题的趋势

工程中有问题并不是异常情况,我们甚至可以说是正常的,但是,我们要检查工程的质量趋势。如果随着工程的更新和演化问题数目增加了,将会是一个很坏的指标。

JArchitect提供了趋势监控特性来创建趋势图。趋势图是根据分析时间记录的特定维度上的值创建出来的。默认有50多个趋势维度,也可以很简单定制趋势维度。

下面给Pmd问题创建一个趋势维度:

然后,你就可以很简单的创建趋势图在趋势维度上做监控,然后把它添加到JArchitect的操作面板中。

有了这个趋势图,我们就可以监视Pmd问题的进化,然后发现这个维度的问题随版本进化的原因。

定制JArchitect报表

JArchitect可以在列出了CQLinq查询的HTML报表中追加额外的报表区。

在CQLinq查询浏览面板中,一个特定的CQLinq组是用橙色的的边框包围的。

也可以把Pmd趋势图添加到报表中:

在HTML报表中,这些被添加进来的区域可以通过菜单访问:

这是被添加进Pmd查询报表中的页面:

结论

JArchitect 4
对其他的静态分析工具是开放的,你也可以很简单的像本文说的那样把你自己的工具做成它的插件。这样你就可以使用JArchitect的所有的功能来更好的利用那些有名的java静态分析工具的分析结果。

原文链接: javadepend 翻译: ImportNew.commiracle1919
译文链接: http://www.importnew.com/11119.html

如何更好地利用Pmd、Findbugs和CheckStyle分析结果,布布扣,bubuko.com

时间: 2024-10-24 14:52:05

如何更好地利用Pmd、Findbugs和CheckStyle分析结果的相关文章

代码静态分析工具--PMD,Findbugs,CheckStyle

最近学习Mybatis的官方文档,看到了[项目文档]一节有很多内容没有见过,做个笔记,理解一下. PMD 扫描Java源代码,查找潜在的问题,如: 可能的bugs,如空的try/catch/finally/switch声明 死亡的代码,没有使用的本地变量,参数和私有方法 不合标准的代码,如String/StringBuffer用法 过于复杂的表达式,如不必要的if表达式 重复的代码,拷贝.粘贴的代码 FindBugs 它用来查找Java代码中存在的bug.它使用静态分析方法标识出Java程序中上

eclipse插件之Findbugs、Checkstyle、PMD安装及使用

一.什么是Findbugs.checkstyle.PMD Findbugs.checkstyle和PMD都可以作为插件插入eclipse,当然也有单独的工具可以实现他们的功能,比如Findbugs Tool就可以不必插入eclipse就可以使用. 三者的功能如下表: 工具 目的 检查项 FindBugs 检查.class 基于Bug Patterns概念,查找javabytecode(.class文件)中的潜在bug 主要检查bytecode中的bug patterns,如NullPoint空指

如何更好的利用软文

如何更好的利用软文软文一直是推广利器,通过它可以让网站获得好的排名和权重,同时也能让网站整体质量得到很大的提升.但又苦与软文成本太高.至少目前还不能大量使用.在这种情况下我们应该怎么更好的利用软文呢?301SEO英文软文代写团队一一为你作答:一.站内产品介绍这块一定要用好点的文章.不一定要每个产品都不一样.但至少也有一定数量,例如一个站有1000个产品,那么写10篇高质量文章进行分配还是很合理的.花费也不会很高.而且这种对文章字数要求不会太高.几十个字就行.一篇文章所需花费也会少很多.二.站内更

Docker+Jenkins持续集成环境(3)集成PMD、FindBugs、Checkstyle静态代码检查工具并邮件发送检查结果

为了规范代码,我们一般会集成静态代码检测工具,比如PMD.FindBugs.Checkstyle,那么Jenkins如何集成这些检查工具,并把检查结果放到构建邮件里呢? 今天做了调研和实现,过程如下 首先看,最终效果: 1.pom.xml build.plugins 增加: <plugin> <artifactId>maven-assembly-plugin</artifactId> <executions> <execution> <ph

linux下利用elk+redis 搭建日志分析平台教程

linux下利用elk+redis 搭建日志分析平台教程 http://www.alliedjeep.com/18084.htm elk 日志分析+redis数据库可以创建一个不错的日志分析平台了,下面我们来看一篇在linux下利用elk+redis 搭建日志分析平台教程,希望例子对各位有帮助. 这个是最新的elk+redis搭建日志分析平台,今年时间是2015年9月11日. Elk分别为 elasticsearch,logstash, kibana 官网为:https://www.elasti

&#8203;IT 敏捷性:更好的利用能耗监测数据

为物联网而设计,今天的数据中心硬件设备,可以提供有价值的反馈信息,从而使全软件定义的自动化成为可能. 作者:杰夫克劳斯 每年IT部门需要做更多的事情,包括管理越来越多的服务器.智能设备.应用程序和服务等.最终用户不断提高标准,要求更高的性能和更好的响应时间.而与此同时,现代数据中心的一切都在不断发展,而从业人员人数和运营费用预算却保持不变甚至有所减少.数据中心的管理人员及其团队必须不断找寻更智能的工作方法,并减少最大的开支成本.由于能耗成本已日渐成为头等大事,因此找到有效降低电力消耗的方法会是一

如何更好的利用Node.js的性能极限

通过使用非阻塞.事件驱动的I/O操作,Node.js为构建和运行大规模网络应用及服务提供了很好的平台,也受到了广泛的欢迎.其主要特性表现为能够处理庞大的并且高吞吐量的并发连接,从而构建高性能.高扩展性的互联网应用.然而,Node.js单线程的的工作方式及有限的可管理内存使得其计算性能十分有限,限制了某些场景中的应用.近日,Jut开发团队的工程师Dave Galbraith分享了他们所遇到的Node.js的限制以及超越这些限制的方法.接下来,本文就详细分析其所遇到的问题及解决思路. 首先,Jut团

#IT明星不是梦#利用Python进行网站日志分析

网站的访问日志是一个非常重要的文件,通过分析访问日志,能够挖掘出很多有价值的信息.本文介绍如何利用Python对一个真实网站的访问日志进行分析,文中将综合运用Python文件操作.字符串处理.列表.集合.字典等相关知识点.本文所用的访问日志access_log来自我个人的云服务器,大家可以从文末的附件中下载. 1.提取指定日期的日志 下面是一条典型的网站访问日志,客户端访问网站中的每个资源都会产生一条日志. 193.112.9.107 - - [25/Jan/2020:06:32:58 +080

Apache漏洞利用与安全加固实例分析

Apache 作为Web应用的载体,一旦出现安全问题,那么运行在其上的Web应用的安全也无法得到保障,所以,研究Apache的漏洞与安全性非常有意义.本文将结合实例来谈谈针对Apache的漏洞利用和安全加固措施. Apache HTTP Server(以下简称Apache)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,是最流行的Web服务器软件之一.虽然近年来Nginx和Lighttpd等Web Server的市场份额增长得很快,但Apache仍然是这个领