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 不只是一个质量数据报告工具,更是代码质量管理平台。支持的语言包括:Java、PHP、C#、C、Cobol、PL/SQL、Flex 等。
主要特点:
· 代码覆盖:通过单元测试,将会显示哪行代码被选中
· 改善编码规则
· 搜寻编码规则:按照名字,插件,激活级别和类别进行查询
· 项目搜寻:按照项目的名字进行查询
· 对比数据:比较同一张表中的任何测量的趋势
架构图:
下载与安装
下载地址:http://www.sonarqube.org/downloads/
我下载的是:sonar-3.7.3.zip
解压(D:\install\sonar-3.7.3)
进入解压缩目录,修改conf/sonar.properties文件,配置数据库连接
- ......
- # Permissions to create tables and indexes must be granted to JDBC user.
- # The schema must be created first.
- #sonar.jdbc.username: sonar
- #sonar.jdbc.password: sonar
- .......
- #----- MySQL 5.x
- # Comment the embedded database and uncomment the following line to use MySQL
- sonar.jdbc.url:jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true
- sonar.jdbc.username: root
- sonar.jdbc.password: 123
- ......
灰色背景的是新添加的,因为我使用的数据库是mysql
在bin(D:\install\sonar-3.7.3\bin)目录下有各种操作系统的可执行文件,我本地的操作系统是XP,所以进入D:\install\sonar-3.7.3\bin\windows-x86-32执行StartSonar.bat即可完成启动。
如果能访问说明成功了
配置maven
修改maven的配置文件E:\maven\apache-maven-3.1.1\conf\settings.xml,在profiles下添加以下代码
- <profile>
- <id>sonar</id>
- <activation>
- <activeByDefault>true</activeByDefault>
- </activation>
- <properties>
- <sonar.jdbc.url>jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8</sonar.jdbc.url>
- <sonar.jdbc.driver>com.mysql.jdbc.Driver</sonar.jdbc.driver>
- <sonar.jdbc.username>root</sonar.jdbc.username>
- <sonar.jdbc.password>123</sonar.jdbc.password>
- <sonar.host.url>http://localhost:9000</sonar.host.url>
- </properties>
- </profile>
在项目里加下以下插件:
- <plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>sonar-maven-plugin</artifactId>
- <version>2.2</version>
- </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上安装
- bin/windows-x86-32StartSonar.bat
3、 其它系统安装
- bin/[OS]/sonar.sh console
4、Maven工程中运行
- 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的数据库配置模板:
- sonar.jdbc.url : 数据库URL
- sonar.jdbc.driver : 驱动类
- sonar.jdbc.user : 用户名 默认sonar
- sonar.jdbc.password : 密码 默认sonar
Mysql示例:
- #sonar.jdbc.url: jdbc:derby://localhost:1527/sonar;create=true
- #sonar.jdbc.driver: org.apache.derby.jdbc.ClientDriver
- #sonar.jdbc.defaultTransactionIsolation: 1
- #sonar.jdbc.validationQuery: values(1)
- sonar.jdbc.url: jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8
- sonar.jdbc.driver: com.mysql.jdbc.Driver
- 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 的示例:
- sonar.web.host : 192.0.0.1
- sonar.web.port: 80
- sonar.web.context: /sonar
可以通过如下脚本启动Sonar服务器:
- linux/mac : bin/[YOUR PLATEFORM]/sonar.sh start
- OR
- 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环境变量:
- 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’指定服务器地址。
- <settings>
- <profiles>
- <profile>
- <id>sonar</id>
- <activation>
- <activeByDefault>true</activeByDefault>
- </activation>
- <properties>
- <!– mysql –>
- <sonar.jdbc.url>
- jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8
- </sonar.jdbc.url>
- <sonar.jdbc.driver>com.mysql.jdbc.Driver</sonar.jdbc.driver>
- <sonar.jdbc.username>sonar</sonar.jdbc.username>
- <sonar.jdbc.password>sonar</sonar.jdbc.password>
- <!– remote host –>
- <sonar.host.url>http://myserver:1234</sonar.host.url>
- </properties>
- </profile>
- </profiles>
- </settings>
注意: <sonar.host.url>属性不能以”/”结尾。否则,Maven Sonar插件将报找不到驱动类的错误。
同样,为了避免内存溢出,推荐增加内存堆栈的大小。设置MAVEN_OPTS环境变量:
- 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
相关推荐
SonarQube插件findbugs-3.10.0,支持sonar7.6到8.1版本。可以去这个网址自己下,就是太慢了,我下了好几次。 ...
myeclipse 和 eclipse 集成插件
在这个名为"sonar-pmd-p3c.zip"的压缩包中,我们看到了SonarQube与两个重要的静态代码分析引擎——PMD和P3C的集成应用。接下来,我们将深入探讨这三个组件以及如何结合使用它们来优化软件开发过程。 首先,让我们...
1. **Java**:推荐使用OpenJDK 1.8。 2. **MySQL**:推荐使用5.6或5.7版本。 3. **PHP、PHPUnit和Xdebug**:这些工具主要用于PHP项目的代码质量分析。 #### 三、系统环境配置 为了确保SonarQube能够正常运行,需要...
本文主要探讨的是当SonarScanner在连接SonarQube 7版本时遇到`sonar.java.binaries`问题的解决方案。 首先,问题的起因是由于SonarQube的Java插件版本升级导致的。在4.12版本之后,SonarQube要求用户明确指定`sonar...
SonarQube的FindBugs插件sonar-findbugs-plugin.jar(版本:4.0.1-SNAPSHOT),包含FindBugs Security Audit等规则,可以离线集成到sonarqube。
sonar的pmd插件,连不上国外网,就在这里下。
sonar的checkStyle插件,直接下载放到sonar的插件文件夹就可以用了。
sonar自定义规则findbugs插件: 版本:3.11.1 对应soanrqube版本:7.6-8.1都可以使用该版本(即从7.6开始的sonar版本到8.1都可以使用该插件)
`sonar-findbugs`插件是SonarQube与FindBugs集成的桥梁,它负责在SonarQube平台上运行FindBugs分析,并将结果展示在SonarQube的报告中。通过分析`sonar-findbugs`的源码,我们可以了解到以下几个关键知识点: 1. **...
sonar-findbugs-plugin.jar, sonar-findbugs-plugin.jar, sonar-findbugs-plugin.jar, sonar-findbugs-plugin.jar,
sonar-kotlin Features Integrates detekt for code analysis Default quality profile Detekt way Syntax highlighting Supports SonarQube 6.7.3 and up Supports detekt's yaml config and baseline.xml ...
《Sonar Code Quality Testing Essentials》是一本专为Java开发者和团队管理者设计的书籍,旨在帮助他们通过使用Sonar工具来提升代码质量。本书提供了详尽的步骤指南,并配以实际案例和必要的截图,确保读者能够快速...
它通过集成各种分析引擎,如PMD、Checkstyle、FindBugs等,为开发者提供了一站式的代码质量管理平台。在给定的标题"sonar5.4-PMD规则插件"中,我们关注的是SonarQube 5.4版本中针对PMD(Poor Man's Static Code ...
Sonarqube checkstyle插件包,用于SonarQube配置自定义的CheckStyle代码检查规则
利用java代码,调用sonar接口,实现在sonar里面创建,更改,用户,组,权限等一系列操作
sonar可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具来检测你的代码,帮助你发现代码的漏洞,Bug,异味等信息。 Sonar 不仅提供了对 IDE 的支持,可以在 Eclipse和 IntelliJ IDEA 这些工具里联机查看结果;...
阿里巴巴java开发规范集成sonar扫描
Sonar 的优势在于它的全面性和可扩展性,能够集成多种静态分析工具,如PMD、Checkstyle等,并提供了一个统一的界面来展示和管理所有检查结果。此外,Sonar 还支持持续集成,可以与Jenkins、Git等工具无缝对接,实现...
FindBugs 是一个静态分析工具,它检查类或者 JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题。有了静态分析工具,就可以在不实际运行程序的情况对软件进行分析,帮助提高代码质量以及排除隐含的缺陷。