欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JAVA EE Code Quality / Sonar / findbugs / checkstyle / cobertura(coverage) / PMD

程序员文章站 2024-01-13 15:14:22
...

s

http://sonar.oschina.net/

在使用sonar服务前,请先登录git.oschina.net(开源中国代码托管网站,以下简称git),请依据如下步骤操作

1.选择自己的项目XXX,进入"质量分析"菜单,点击"开始分析XXX代码",XXX项目进入sonar代码分析流程

2.当代码分析流程结束(大约1到2分钟),git会提示您项目的代码分析结果

3.若分析失败会给出提示信息,并提示失败原因

4.若分析成功, git将会显示sonar平台代码质量分析概要,点击相关概要链接,可查看具体分析详情

 

静态检查工具CheckStyle、PMD、FindBugs

重复代码检查PMD-CPD、Simian

圈复杂度分析工具SourceMonitor、JavaNCSS

代码设计质量分析JDepend

 

常用Java代码质量检测评估工具

http://zihai367.iteye.com/blog/2305793

1. PMD from http://pmd.sourceforge.net/ 

PMD能够扫描Java 源代码,查找类似以下的潜在问题: 

可能的bug——try/catch/finally/switch语句中返回空值。

死代码——未使用的局部变量、参数、私有方法。

不理想的代码——使用String/StringBuffer。

过于复杂的表达式——没有必要使用if语句、while循环可以代替for循环。

重复代码——复制/粘贴的代码引发的bug。

PMD集成了JDeveloper, Eclipse, JEdit, JBuilder, BlueJ, CodeGuide, NetBeans/Sun Java Studio Enterprise/Creator, IntelliJ IDEA, TextPad, Maven, Ant, Gel, JCreator, 以及 Emacs。 

2. FindBug from http://findbugs.sourceforge.net 

FindBug是一个使用静态方法来查找Java代码漏洞的程序。 

3.Clover from http://www.cenqua.com/clover/ 

这个插件允许你在不离开IDE的环境条件下来衡量和检测覆盖效果。该插件通过使用Apache Ant、Maven来无缝集成其它项目,可以通过命令行界面和API系统轻松集成到传统的构建系统中。 

该插件的特性: 

支持快速、准确、可配置的方法,语句等。

支持丰富的报告格式:HTML、PDF、XML、以及Swing GUI。

精确控制源代码级别的过滤。

支持代码覆盖以及其它指标的图表。

完全兼容JUnit 3.x & 4.x, TestNG, JTiger以及其它的测试框架。

4. Macker from http://innig.net/macker/ 

Macker是一个适用于Java开发人员用来检查架构规则的工具。你可以定制一个适合特定项目架构的规则文件,也可以为您的代码撰写通用的规则说明。 

5. EMMA from http://emma.sourceforge.net/ 

EMMA支持的覆盖类型:方法、类等。

输出报告的格式为:文本、HTML、XML。

输出报告可以高亮显示某些项目。

EMMA不需要访问源代码,可以在输入类中减少调试的信息。

6. XRadar from http://xradar.sourceforge.net/ 

XRadar是一个开放的、为代码生成可扩展报告的工具。目前支持基于Java的所有系统。批量处理的框架可以用来生成HTML/SVG系统的报告。Xradar可以估量代码的大小、复杂性以及代码的重复性、依赖性等。 

7. Hammurapi from http://www.hammurapi.com 

Hammurapi是一款执行Java程序代码的自动检测工具。提供的实例中含有282条Hammurapi代码规则,提供了120多个Java类,这款所谓的检测工具,可以从三个级别来检测代码是否违背了编码标准。 

8. Relief from http://www.workingfrog.org/ 

Relif是一款设计工具,为Java项目提供了崭新的面貌。我们可以充分发挥自己的能力来处理真实的实例——通过检测大小、形状、关系等来简化处理过程。 

9. Hudson from http://hudson-ci.org/ 

Hudson 是一个持续集成工具,使用Java编写,运行在servlet容器中,比如Apache Tomcat或者或GlassFish应用服务器。它支持SCM工具,包括CVS、Subversion、Git和ClearCase。它可以执行Apache Ant、基于Apache Maven的项目、以及任意的shell脚本和 Windows批处理命令。 

10. Cobertura fromhttp://cobertura.sourceforge.net/ 

Cobertura是一个免费的基于jcoverage的Java工具,用于计算代码被测试访问的百分比,它可以被用来确定Java程序中的缺少部分的测试覆盖率。 

11. SonarSource from http://www.sonarsource.org/ 

Sonar是一个管理代码质量的开放平台。因此,它涵盖了代码质量的7个方面:架构与设计、重复、单元测试、复杂性、潜在错误、编码规则、评论。 

英文原文:http://java.dzone.com/articles/java-tools-source-code 

Java代码质量检测评估工具

“五大” 代码分析领域:

* 编码风格

* 冗余代码

* 代码覆盖率

* 依赖项分析

* 复杂度监控

一下列举了一些目前比较流行的工具。网址后面列出了其PR值,可以反映此工具的流行度。

1、编码风格

CheckStyle

Home page: http://checkstyle.sourceforge.net/ (6)

对应的eclipse插件有多个,其中eclipsecs最常用

Home page: http://eclipse-cs.sourceforge.net/ (6)

eclipse插件URL:http://eclipse-cs.sf.net/update/

2、冗余代码

Simian http://www.redhillconsulting.com.au/products/simian/ (5)

PMD 的 CPD http://pmd.sourceforge.net/cpd.html (5)

3、代码覆盖率

EMMA http://emma.sourceforge.net/ (6)

Cobertura http://cobertura.sourceforge.net/ (6)

EclEmma http://update.eclemma.org/ (5)

Coverlipse http://coverlipse.sourceforge.net/ (3)

4、依赖项分析

JDepend http://clarkware.com/software/JDepend.html (6)

5、复杂度监控

Metrics http://metrics.sourceforge.net/ (4)

具有以上两项或两项以上的综合工具(也称为静态分析工具):

1、PMD

Home page: http://pmd.sourceforge.net/ (6)

eclipse插件URL:http://pmd.sourceforge.net/eclipse

2、FindBugs http://findbugs.sourceforge.net/ (6)

eclipse插件URL:http://findbugs.cs.umd.edu/eclipse

FindBugs 检查程序生成的class文件,即分析字节码

PMD 检查源码,分析源代码

3、Jtest http://www.parasoft.com/jtest

4、Jlint http://artho.com/jlint/ (5)

5、Lint4j http://www.jutils.com/ (4)

 

http://www.oschina.net/p/sonar/

简介

转自oschina的介绍(http://www.oschina.net/p/sonar/)

 

Sonar (SonarQube)是一个开源平台,用于管理源代码的质量。Sonar 不只是一个质量数据报告工具,更是代码质量管理平台。支持的语言包括:JavaPHPC#CCobolPL/SQLFlex 等。

主要特点:

· 代码覆盖:通过单元测试,将会显示哪行代码被选中

· 改善编码规则

· 搜寻编码规则:按照名字,插件,激活级别和类别进行查询

· 项目搜寻:按照项目的名字进行查询

· 对比数据:比较同一张表中的任何测量的趋势

JAVA EE Code Quality / Sonar / findbugs / checkstyle / cobertura(coverage) / PMD
            
    
    博客分类: Java EE  

架构图:

JAVA EE Code Quality / Sonar / findbugs / checkstyle / cobertura(coverage) / PMD
            
    
    博客分类: Java EE  

 

下载与安装

下载地址:http://www.sonarqube.org/downloads/

我下载的是:sonar-3.7.3.zip

 

解压(D:\install\sonar-3.7.3

 

进入解压缩目录,修改conf/sonar.properties文件,配置数据库连接

 

Java代码  JAVA EE Code Quality / Sonar / findbugs / checkstyle / cobertura(coverage) / PMD
            
    
    博客分类: Java EE  
  1. ......  
  2. # Permissions to create tables and indexes must be granted to JDBC user.  
  3. # The schema must be created first.  
  4. #sonar.jdbc.username:                       sonar  
  5. #sonar.jdbc.password:                       sonar  
  6. .......  
  7. #----- MySQL 5.x  
  8. # Comment the embedded database and uncomment the following line to use MySQL  
  9. sonar.jdbc.url:jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true  
  10. sonar.jdbc.username:                       root  
  11. sonar.jdbc.password:                       123  
  12. ......  
 红色标注的是默认打开的,为了统一管理,我把它给注释掉了,

 

 

灰色背景的是新添加的,因为我使用的数据库是mysql

 

binD:\install\sonar-3.7.3\bin)目录下有各种操作系统的可执行文件,我本地的操作系统是XP,所以进入D:\install\sonar-3.7.3\bin\windows-x86-32执行StartSonar.bat即可完成启动。

 

访问:http://localhost:9000/

如果能访问说明成功了

JAVA EE Code Quality / Sonar / findbugs / checkstyle / cobertura(coverage) / PMD
            
    
    博客分类: Java EE  

 

 

配置maven

修改maven的配置文件E:\maven\apache-maven-3.1.1\conf\settings.xml,在profiles下添加以下代码

 

Java代码  JAVA EE Code Quality / Sonar / findbugs / checkstyle / cobertura(coverage) / PMD
            
    
    博客分类: Java EE  
  1. <profile>  
  2.     <id>sonar</id>  
  3.     <activation>  
  4.         <activeByDefault>true</activeByDefault>  
  5.     </activation>  
  6.     <properties>  
  7.         <sonar.jdbc.url>jdbc:mysql://localhost:3306/sonar?useUnicode=true&amp;characterEncoding=utf8</sonar.jdbc.url>  
  8.         <sonar.jdbc.driver>com.mysql.jdbc.Driver</sonar.jdbc.driver>  
  9.         <sonar.jdbc.username>root</sonar.jdbc.username>  
  10.         <sonar.jdbc.password>123</sonar.jdbc.password>  
  11.         <sonar.host.url>http://localhost:9000</sonar.host.url>  
  12.     </properties>  
  13. </profile>  
 注:如果不配置,会出现连接不了数据库的异常

 

在项目里加下以下插件:

Java代码  JAVA EE Code Quality / Sonar / findbugs / checkstyle / cobertura(coverage) / PMD
            
    
    博客分类: Java EE  
  1. <plugin>  
  2.    <groupId>org.codehaus.mojo</groupId>  
  3.    <artifactId>sonar-maven-plugin</artifactId>  
  4.    <version>2.2</version>  
  5. </plugin>  

 

 

 

运行sonar测试

E:\git\656463>cd 656463-cms

 

E:\git\656463\656463-cms>mvn sonar:sonar

 

好了,直接访问http://localhost:9000/即可看到测试结果了

Sonar 主要還是透過maven的一些plugins像 PMD , CPD , findbugs , checkstyle , cobertura(coverage ) ,

http://pengwei841221.iteye.com/blog/940428

Sonar是一个开源平台,用于管理Java源代码的质量。从 Sonar 1.6 版本开始,Sonar从一个质量数据报告工具,转变成为现在的代码质量管理平台。

Sonar 主要還是透過maven的一些plugins像 PMD , CPD , findbugs , checkstyle , cobertura(coverage ) ,JavaNCSS ,… 來對java程式碼做靜態分析(static analysis),然後用比較美觀的方式呈現將各種報表整合在一起。

 

安装前提:

      系统必须支持Java和Maven

数据库支持:

       默认使用自带的Derby数据库

       Mysql

       Oracle

       MS SqlServer

       PostgreSQL

 

Sonar处理步骤:

      1、mvn sonar:sonar 把代码注入到Sonar中进行分析处理,并将处理结果以XML的形式插入到DB中

      2、通过浏览器访问,显示分析结果

      3、持续运行Maven构建,会迭代显示分析结果

 

一分钟安装教程:

      1、下载并解压

      2、在Windows上安装

Cmd代码  JAVA EE Code Quality / Sonar / findbugs / checkstyle / cobertura(coverage) / PMD
            
    
    博客分类: Java EE  
  1. bin/windows-x86-32StartSonar.bat  

      3、 其它系统安装

Cmd代码  JAVA EE Code Quality / Sonar / findbugs / checkstyle / cobertura(coverage) / PMD
            
    
    博客分类: Java EE  
  1. bin/[OS]/sonar.sh console  

 

      4、Maven工程中运行

Cmd代码  JAVA EE Code Quality / Sonar / findbugs / checkstyle / cobertura(coverage) / PMD
            
    
    博客分类: Java EE  
  1. mvn clean install sonar:sonar  

      5、浏览器打开 http://localhost:9000

      6、进入后台,admin/admin

 

5步骤安装:

第一步,创建数据库

Apache Derby 是Sonar默认安装的数据库,并且不需要你安装。它能很好的用于Sonar的演示,但是在实际运用中我推荐你使用性能更好更强大的数据库。Sonar对 如下数据库提供支持:MySQL 5.x, Oracle 10g XE, Postgresql 和MS SqlServer 2005。

第一件事就是为Sonar创建一个数据库。表和索引会在Sonar激活后自动创建。 同时要给Sonar用户能够在数据库表中创建、禁止和更新对象的权限。

 

第二步,安装服务器

 

第三步,配置数据库

如果你不是使用默认的数据库,那么你可以编辑conf/sonar.properties配置数据库访问权限。注释derby的配置并复制一份自定义来修改,下面是Sonar的数据库配置模板:

Properties代码  JAVA EE Code Quality / Sonar / findbugs / checkstyle / cobertura(coverage) / PMD
            
    
    博客分类: Java EE  
  1. sonar.jdbc.url :  数据库URL  
  2. sonar.jdbc.driver :  驱动类  
  3. sonar.jdbc.user : 用户名 默认sonar  
  4. sonar.jdbc.password : 密码 默认sonar  

 Mysql示例:

Properties代码  JAVA EE Code Quality / Sonar / findbugs / checkstyle / cobertura(coverage) / PMD
            
    
    博客分类: Java EE  
  1. #sonar.jdbc.url: jdbc:derby://localhost:1527/sonar;create=true  
  2. #sonar.jdbc.driver: org.apache.derby.jdbc.ClientDriver  
  3. #sonar.jdbc.defaultTransactionIsolation: 1  
  4. #sonar.jdbc.validationQuery: values(1)  
  5. sonar.jdbc.url: jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8  
  6. sonar.jdbc.driver: com.mysql.jdbc.Driver  
  7. sonar.jdbc.validationQuery: select 1   

如果是Oracle,你必须手动复制JDBC驱动类到/extensions/jdbc-driver/oracle/目录下。其它支持的数据库都已提供了驱动。

 

第四步,启动Sonar Server

方式一-单独启动

Sonar默认的端口是“9000”,默认的上下文路径是“/”,默认的网络接口是:“0.0.0.0”。一旦激活,Sonar服务器就可以使用http://localhost:9000 。这些参数都可以在conf/sonar.properties修改。下面提供一个http://localhost:80/sonar 的示例:

Properties代码  JAVA EE Code Quality / Sonar / findbugs / checkstyle / cobertura(coverage) / PMD
            
    
    博客分类: Java EE  
  1. sonar.web.host : 192.0.0.1  
  2. sonar.web.port: 80  
  3. sonar.web.context: /sonar  

 可以通过如下脚本启动Sonar服务器:

Cmd代码  JAVA EE Code Quality / Sonar / findbugs / checkstyle / cobertura(coverage) / PMD
            
    
    博客分类: Java EE  
  1. linux/mac : bin/[YOUR PLATEFORM]/sonar.sh start  
  2. OR  
  3. windows : bin/windows-x86-32/StartSonar.bat   

 同样你可以启动bin/windows-x86-32/InstallNTService.bat把它注册为一个Window服务 ,然后再启动bin/windows-x86-32/StartSonar.bat

方式二-部署到Tomcat

打包步骤如下:

编辑conf/sonar.properties还原成标准格式(就是不修改端口之类)。确保部署到应用服务器时conf/wrapper.conf未被使用过。
在war/目录下执行build-war.sh脚本(Windows下执行build-war.bat)。
部署war/sonar.war到应用服务器。
通过http://loaclhost:8080/sonar 访问,继续安装步骤。

为了避免内存溢出,增加内存堆栈的大小。在Tomcat启动前设置CATALINA_OPTS环境变量:

Xml代码  JAVA EE Code Quality / Sonar / findbugs / checkstyle / cobertura(coverage) / PMD
            
    
    博客分类: Java EE  
  1. CATALINA_OPTS=”-Xms1024m -Xmx1024m -Dorg.apache.jasper.runtime.BodyContentImpl.LIMIT_BUFFER=true -XX:MaxPermSize=256m”   

 

第五步:配置到Maven中

因为Sonar是通过Maven2 插件来分析源代码并把结果注入到数据库的。这就是为什么我们必须在Maven的配置里设置数据库的属性。编辑位于$MAVEN_HOME/conf或者 ~/.m2下的settings.xml文件,然后在添加step 3中的参数。

如果数据库和服务器不在同一台主机,你还必须通过’sonar.host.url’指定服务器地址。

Xml代码  JAVA EE Code Quality / Sonar / findbugs / checkstyle / cobertura(coverage) / PMD
            
    
    博客分类: Java EE  
  1. <settings>  
  2.     <profiles>  
  3.         <profile>  
  4.             <id>sonar</id>  
  5.             <activation>  
  6.                 <activeByDefault>true</activeByDefault>  
  7.             </activation>  
  8.             <properties>  
  9.                 <!– mysql –>  
  10.                 <sonar.jdbc.url>  
  11.                   jdbc:mysql://localhost:3306/sonar?useUnicode=true&amp;characterEncoding=utf8  
  12.                 </sonar.jdbc.url>  
  13.                 <sonar.jdbc.driver>com.mysql.jdbc.Driver</sonar.jdbc.driver>  
  14.                 <sonar.jdbc.username>sonar</sonar.jdbc.username>  
  15.                 <sonar.jdbc.password>sonar</sonar.jdbc.password>  
  16.                  <!– remote host –>  
  17.                 <sonar.host.url>http://myserver:1234</sonar.host.url>  
  18.         </properties>  
  19.         </profile>  
  20.      </profiles>  
  21. </settings>  

 注意: <sonar.host.url>属性不能以”/”结尾。否则,Maven Sonar插件将报找不到驱动类的错误。

同样,为了避免内存溢出,推荐增加内存堆栈的大小。设置MAVEN_OPTS环境变量:

Cmd代码  JAVA EE Code Quality / Sonar / findbugs / checkstyle / cobertura(coverage) / PMD
            
    
    博客分类: Java EE  
  1. export MAVEN_OPTS=”-Xmx512m -XX:MaxPermSize=256m”  

 

 

 

 

 

集团级项目管理关键指标评价办法V1.0 

http://10.27.100.165:9000/coding_rules#languages=java

http://dl.iteye.com/topics/download/0214b88a-ec87-3336-abbc-87954aeaa21f

业务验收50

时间管理30

质量管理20

资源管理

项目抽查

 

项目质量管理:主要聚焦于项目所涉及的软件系统过程质量和最终质量。

质量管理得分=代码千行缺陷率得分+代码sonar检查得分。

(a)代码千行缺陷率(5分),定义为项目测试出的bug总数除以项目涉及系统有效代码行数。千分之三为满分5分,每升高千分之一扣0.5分。计算公式为(100-(千行缺陷率-0.003)×10000)×0.05,最低0分,最高5分。此项数据统计由各中心测试部出具。

(b)代码sonar检查(15分),由公司的sonar网站检查结果进行打分,以CTO办公室出具的静态检查规则为评分标准,静态检查规则详见附件1。每发现1个阻断问题扣2分,每发现1个严重问题扣1分,最低0分,最高15分。由各中心技术总监提供得分数据,CTO办公室对项目的规范得分情况复核。

 

http://10.27.100.165:9000/coding_rules#severities=CRITICAL|languages=java%2Cjs%2Cnone%2Cweb|s=createdAt|asc=false 

问题描述 严重度 整改建议
Execution of the Garbage Collector should be triggered only by the JVM 严重 立即修改
Thread.run() and Runnable.run() should not be called directly 严重 立即修改
The Array.equals(Object obj) method should never be used 严重 立即修改
"switch" statements should not contain non-case labels 严重 立即修改
"equals(Object obj)" should be overridden along with the "compareTo(T obj)" method 严重 立即修改
The Object.finalize() method should never be called 严重 立即修改
Switch cases should end with an unconditional break statement 严重 可忽略
Methods should not be named "hashcode" 严重 可忽略
Strings should be compared using equals() 严重 可忽略
Methods named "equals" should override Object.equals(Object) 严重 立即修改
The Object.finalize() method should never be overriden 严重 立即修改
Annotation repetitions should not be wrapped 严重 可忽略
"object == null" should be used instead of "object.equals(null)" 严重 立即修改
Conditions in related "if/else if" statements should not be duplicated 严重 立即修改
System.exit(...) and Runtime.getRuntime().exit(...) should not be called 严重 可忽略
Throwable.printStackTrace(...) should never be called 严重 立即修改
"autocomplete" should be set to "off" on input elements of type "password" 严重 立即修改
Javascript scriptlets should not have too many lines of code 严重 无需修改
Deprecated JSP scriptlets should not be used 严重 立即修改
Illegal TagLibs 严重 立即修改
Dynamic Jsp Include 严重 可忽略
Correctness - Overwritten increment 严重 可忽略
Correctness - Uncallable method defined in anonymous class 严重 立即修改
Dodgy - Immediate dereference of the result of readLine() 严重 立即修改
Malicious code vulnerability - Public static method may expose internal representation by returning array 严重 立即修改
Correctness - Call to equals() comparing different types 严重 可忽略
Dodgy - Potentially dangerous use of non-short-circuit logic 严重 可忽略
Dodgy - instanceof will always return true 严重 立即修改
Multithreaded correctness - Synchronization performed on java.util.concurrent Lock 严重 立即修改
Correctness - Bitwise OR of signed byte value 严重 立即修改
Correctness - Value annotated as carrying a type qualifier used where a value that must not carry that qualifier is required 严重 立即修改
Performance - Method concatenates strings using + in a loop 严重 立即修改
Correctness - Bitwise add of signed byte value 严重 立即修改
Correctness - Format string references missing argument 严重 立即修改
Correctness - TestCase declares a bad suite method 严重 立即修改
Security - Empty database password 严重 立即修改
Correctness - Self assignment of field 严重 立即修改
Correctness - Static Thread.interrupted() method invoked on thread instance 严重 立即修改
Dodgy - Result of integer multiplication cast to long 严重 可忽略
Multithreaded correctness - Incorrect lazy initialization of static field 严重 立即修改
Dodgy - Questionable cast to concrete collection 严重 可忽略
Correctness - An apparent infinite recursive loop 严重 立即修改
Correctness - No relationship between generic parameter and method argument 严重 立即修改
Bad practice - toString method may return null 严重 立即修改
Dodgy - Write to static field from instance method 严重 可忽略
Dodgy - Self assignment of local variable 严重 立即修改
Multithreaded correctness - Method does not release lock on all exception paths 严重 立即修改
Correctness - Invocation of toString on an array 严重 立即修改
Security - Servlet reflected cross site scripting vulnerability 严重 立即修改
Dodgy - Possible null pointer dereference on path that might be infeasible 严重 可忽略
Dodgy - Dead store of null to local variable 严重 立即修改
Multithreaded correctness - Mismatched wait() 严重 立即修改
Bad practice - Equals method should not assume anything about the type of its argument 严重 立即修改
Correctness - Dead store of class literal 严重 立即修改
Multithreaded correctness - Class's writeObject() method is synchronized but nothing else is 严重 立即修改
Dodgy - Method directly allocates a specific implementation of xml interfaces 严重 立即修改
Dodgy - Complicated, subtle or wrong increment in for-loop 严重 可忽略
Correctness - Integer remainder modulo 1 严重 立即修改
Correctness - Doomed test for equality to NaN 严重 立即修改
Multithreaded correctness - Static DateFormat 严重 需修改可暂缓
Correctness - Doomed attempt to append to an object output stream 严重 立即修改
Dodgy - Double assignment of local variable 严重 立即修改
Multithreaded correctness - Call to static DateFormat 严重 需修改可暂缓
Multithreaded correctness - Mismatched notify() 严重 立即修改
Performance - Huge string constants is duplicated across multiple class files 严重 需修改可暂缓
Dodgy - Class exposes synchronization and semaphores in its public interface 严重 需修改可暂缓
Bad practice - Suspicious reference comparison 严重 可忽略
Dodgy - Computation of average could overflow 严重 可忽略
Bad practice - Finalizer nullifies superclass finalizer 严重 立即修改
Correctness - Nullcheck of value previously dereferenced 严重 立即修改
Performance - Method calls static Math class method on a constant value 严重 立即修改
Dodgy - Initialization circularity 严重 立即修改
Dodgy - Unsigned right shift cast to short/byte 严重 可忽略
Correctness - Possible null pointer dereference in method on exception path 严重 可忽略
Dodgy - Dereference of the result of readLine() without nullcheck 严重 立即修改
Correctness - Call to equals() comparing unrelated class and interface 严重 可忽略
Bad practice - Class defines hashCode() but not equals() 严重 可忽略
Dodgy - Code contains a hard coded reference to an absolute pathname 严重 立即修改
Security - Servlet reflected cross site scripting vulnerability 严重 立即修改
Dodgy - Method uses the same code for two branches 严重 需修改可暂缓
Correctness - Null pointer dereference in method on exception path 严重 可忽略
Correctness - An apparent infinite loop 严重 立即修改
Dodgy - Vacuous bit mask operation on integer value 严重 立即修改
Correctness - Incompatible bit masks (BIT_IOR) 严重 立即修改
Correctness - equals() used to compare array and nonarray 严重 立即修改
Correctness - Method assigns boolean literal in boolean expression 严重 可忽略
Dodgy - Redundant comparison of two null values 严重 立即修改
Bad practice - Store of non serializable object into HttpSession 严重 可忽略
Bad practice - Method may fail to close stream 严重 立即修改
Multithreaded correctness - Naked notify 严重 立即修改
Correctness - Field only ever set to null 严重 可忽略
Correctness - Method call passes null to a nonnull parameter 严重 立即修改
Bad practice - Check for sign of bitwise operation 严重 可忽略
Correctness - Unneeded use of currentThread() call, to call interrupted() 严重 立即修改
Multithreaded correctness - Method calls Thread.sleep() with a lock held 严重 立即修改
Correctness - Value required to not have type qualifier, but marked as unknown 严重 立即修改
Multithreaded correctness - Synchronization on boxed primitive could lead to deadlock 严重 立即修改
Multithreaded correctness - Synchronization on boxed primitive values 严重 立即修改
An increment to a volatile field isn't atomic 严重 可忽略
Correctness - A parameter is dead upon entry to a method but overwritten 严重 立即修改
Correctness - The type of a supplied argument doesn't match format specifier 严重 立即修改
Correctness - A collection is added to itself 严重 立即修改
Performance - Method uses toArray() with zero-length array argument 严重 立即修改
Security - JSP reflected cross site scripting vulnerability 严重 立即修改
Class defines hashcode(); should it be hashCode()? 严重 可忽略
Bad practice - Method may fail to close database resource 严重 立即修改
Multithreaded correctness - Incorrect lazy initialization and update of static field 严重 立即修改
Bad practice - Class defines compareTo(...) and uses Object.equals() 严重 立即修改
Dead store due to switch statement fall through 严重 可忽略
Multithreaded correctness - Using notify() rather than notifyAll() 严重 立即修改
Correctness - Nonsensical self computation involving a field (e.g., x & x) 严重 立即修改
Correctness - Self comparison of value with itself 严重 立即修改
Correctness - "." used for regular expression 严重 可忽略
Correctness - TestCase has no tests 严重 立即修改
Correctness - Double.longBitsToDouble invoked on an int 严重 可忽略
Switch statement found where one case falls through to the next case 严重 可忽略
Correctness - Number of format-string arguments does not correspond to number of placeholders 严重 立即修改
Correctness - Double assignment of field 严重 立即修改
Bad practice - equals method fails for subtypes 严重 可忽略
Dodgy - Unchecked/unconfirmed cast 严重 可忽略
Multithreaded correctness - Class's readObject() method is synchronized 严重 立即修改
Correctness - Possible null pointer dereference 严重 可忽略
Correctness - hasNext method invokes next 严重 立即修改
Correctness - Bad attempt to compute absolute value of signed 32-bit hashcode 严重 可忽略
Correctness - int value cast to float and then passed to Math.round 严重 可忽略
Dodgy - Remainder of hashCode could be negative 严重 可忽略
Correctness - Bad comparison of nonnegative value with negative constant 严重 立即修改
Multithreaded correctness - Call to static Calendar 严重 立即修改
Dodgy - Parameter must be nonnull but is marked as nullable 严重 立即修改
Correctness - Invalid syntax for regular expression 严重 立即修改
Security - Nonconstant string passed to execute method on an SQL statement 严重 可忽略
Multithreaded correctness - Sychronization on getClass rather than class literal 严重 立即修改
Nonnull field is not initialized 严重 立即修改
Dodgy - Test for floating point equality 严重 立即修改
Correctness - Bad attempt to compute absolute value of signed 32-bit random integer 严重 可忽略
Bad practice - Class defines equals() and uses Object.hashCode() 严重 可忽略
Dodgy - Dead store to local variable 严重 可忽略
Correctness - Primitive array passed to function expecting a variable number of object arguments 严重 立即修改
Correctness - Method may return null, but is declared @NonNull 严重 立即修改
Correctness - Call to equals() with null argument 严重 立即修改
Correctness - Signature declares use of unhashable class in hashed construct 严重 立即修改
Method may fail to clean up stream or resource on checked exception 严重 立即修改
Correctness - Collections should not contain themselves 严重 立即修改
Correctness - Incompatible bit masks (BIT_AND) 严重 立即修改
Correctness - Vacuous call to collections 严重 立即修改
Correctness - Value annotated as never carrying a type qualifier used where value carrying that qualifier is required 严重 立即修改
Correctness - Invocation of equals() on an array, which is equivalent to == 严重 可忽略
Dodgy - Possible null pointer dereference due to return value of called method 严重 立即修改
Dead store due to switch statement fall through to throw 严重 可忽略
Multithreaded correctness - Synchronization on Boolean could lead to deadlock 严重 立即修改
Bad practice - Unchecked type in generic call 严重 立即修改
Bad practice - Method may fail to close database resource on exception 严重 立即修改
Correctness - int value cast to double and then passed to Math.ceil 严重 需修改可暂缓
Multithreaded correctness - Inconsistent synchronization 严重 立即修改
Dodgy - Check for oddness that won't work for negative numbers 严重 立即修改
Correctness - Invocation of toString on an anonymous array 严重 立即修改
Correctness - Store of null value into field annotated NonNull 严重 立即修改
Dodgy - Redundant comparison of non-null value to null 严重 立即修改
Dodgy - Class extends Struts Action class and uses instance variables 严重 可忽略
Dodgy - Non serializable object written to ObjectOutput 严重 立即修改
Correctness - Method performs math using floating point precision 严重 可忽略
Correctness - Self comparison of field with itself 严重 需修改可暂缓
Multithreaded correctness - Synchronization on interned String could lead to deadlock 严重 立即修改
Multithreaded correctness - Method does not release lock on all paths 严重 立即修改
Correctness - Check to see if ((...) & 0) == 0 严重 立即修改
Correctness - No previous argument for format string 严重 立即修改
Dodgy - Class extends Servlet class and uses instance variables 严重 可忽略
Correctness - Method call passes null for nonnull parameter (ALL_TARGETS_DANGEROUS) 严重 立即修改
Correctness - Illegal format string 严重 立即修改
Correctness - Nonsensical self computation involving a variable (e.g., x & x) 严重 可忽略
Correctness - Invocation of hashCode on an array 严重 立即修改
Multithreaded correctness - Constructor invokes Thread.start() 严重 立即修改
Multithreaded correctness - Condition.await() not in loop 严重 立即修改
Correctness - Useless control flow to next line 严重 需修改可暂缓
Performance - Inefficient use of keySet iterator instead of entrySet iterator 严重 需修改可暂缓
Correctness - Unnecessary type check done using instanceof operator 严重 立即修改
Correctness - Class overrides a method implemented in super class Adapter wrongly 严重 可忽略
Dodgy - int division result cast to double or float 严重 可忽略
Correctness - Integer shift by an amount not in the range 0..31 严重 立即修改
Bad practice - equals() method does not check for null argument 严重 立即修改
Security - A prepared statement is generated from a nonconstant String 严重 可忽略
Correctness - Don't use removeAll to clear a collection 严重 立即修改
Dodgy - Useless control flow 严重 立即修改
Correctness - Bad comparison of signed byte 严重 立即修改
Bad practice - Clone method may return null 严重 立即修改
Multithreaded correctness - Field not guarded against concurrent access 严重 立即修改
Correctness - Value is null and guaranteed to be dereferenced on exception path 严重 需修改可暂缓
Multithreaded correctness - Static Calendar 严重 立即修改
Correctness - Null pointer dereference 严重 立即修改
Bad practice - Method may fail to close stream on exception 严重 立即修改
Multithreaded correctness - Wait not in loop 严重 立即修改
Correctness - File.separator used for regular expression 严重 可忽略
Bad practice - Class inherits equals() and uses Object.hashCode() 严重 可忽略
Correctness - Useless assignment in return statement 严重 立即修改
Bad practice - Static initializer creates instance before all static final fields assigned 严重 立即修改
Correctness - JUnit assertion in run method will not be noticed by JUnit 严重 立即修改
Correctness - Method attempts to access a result set field with index 0 严重 立即修改
Correctness - Using pointer equality to compare different types 严重 可忽略
Bad practice - Non-serializable value stored into instance field of a serializable class 严重 立即修改
Correctness - Method call passes null for nonnull parameter 严重 立即修改
Dodgy - Remainder of 32-bit signed random integer 严重 可忽略
Bad practice - serialVersionUID isn't final 严重 可忽略
Correctness - instanceof will always return false 严重 立即修改
Dodgy - Redundant nullcheck of value known to be non-null 严重 立即修改
Correctness - Value required to have type qualifier, but marked as unknown 严重 立即修改
Correctness - Use of class without a hashCode() method in a hashed data structure 严重 立即修改
Correctness - Method attempts to access a prepared statement parameter with index 0 严重 立即修改
Correctness - TestCase defines setUp that doesn't call super.setUp() 严重 可忽略
Correctness - Bad constant value for month 严重 立即修改
Correctness - Call to equals() comparing different interface types 严重 立即修改
Dodgy - Load of known null value 严重 立即修改
Dodgy - Invocation of substring(0), which returns the original value 严重 立即修改
Correctness - Check for sign of bitwise operation 严重 可忽略
Bad practice - Random object created and used only once 严重 立即修改
Correctness - Value that might not carry a type qualifier is always used in a way requires that type qualifier 严重 立即修改
Dodgy - Vacuous comparison of integer value 严重 立即修改
Correctness - Exception created and dropped rather than thrown 严重 立即修改
Correctness - Non-virtual method call passes null for nonnull parameter 严重 立即修改
Dodgy - Method uses the same code for two switch clauses 严重 需修改可暂缓
Correctness - Integer multiply of result of integer remainder 严重 可忽略
Bad practice - Class defines hashCode() and uses Object.equals() 严重 需修改可暂缓
Correctness - TestCase implements a non-static suite method 严重 需修改可暂缓
Class defines equal(Object); should it be equals(Object)? 严重 需修改可暂缓
Correctness - TestCase defines tearDown that doesn't call super.tearDown() 严重 需修改可暂缓
Dodgy - Redundant nullcheck of value known to be null 严重 可忽略
Performance - Method invokes inefficient Number constructor; use static valueOf instead 严重 需修改可暂缓
Unchecked/unconfirmed cast of return value from method 严重 可忽略
Performance - Private method is never called 严重 立即修改
Correctness - Format string placeholder incompatible with passed argument 严重 立即修改
Correctness - Value that might carry a type qualifier is always used in a way prohibits it from having that type qualifier 严重 立即修改
"eval" and "arguments" should not be bound or assigned 严重 立即修改
Property names should not be duplicated within an object literal 严重 立即修改
"future reserved words" should not be used as identifiers 严重 立即修改
Function argument names should be unique 严重 立即修改
Function call arguments should not start on new line 严重 立即修改
Do not use octal numbers 严重 立即修改
"switch" statements should not contain non-case labels 严重 立即修改

 

 

end