Sonar在检查java代码隐患中的作用

Sonar作为一个非常实用的代码质量检查工具,可以在各个维度对整个工程进行一个量化,如代码的测试覆盖率、代码内聚性指标、代码复杂度、代码的重复性检查、包之间的依存度以及代码冲突性等,可以非常直观的通过图标看到这些数据,关于sonar的安装和使用在本博的另一篇文章(《代码质量检查工具Sonar结合hudson、maven使用》)有详细描述,本文主要介绍sonar能够检查出的代码隐患。

  • Avoid Decimal Literals In Big Decimal Constructor 应避免使用Decimal(0.5)这样的做法,因为这样是错误的不精确的
  • Avoid Rethrowing Exception 不应当在catch语句中重新抛出另外的异常
  • Avoid Throwing Null Pointer Exception 不应该抛出空指针异常
  • Boolean Instantiation 不需要实例化布尔变量,只需=Boolean.True or =Boolean.Flase
  • Close Resource 有未关闭的资源,需要使用finally语句块确保安全
  • Collapsible If Statements 如果有多条if语句连续出现,可以使用短路条件if(A && B && ......)提高效率
  • Compare Objects With Equals 比较两个对象应该使用equal而不是等于
  • Cyclomatic Complexity 通常来讲,这个方法或者类太长了,需要分解
  • Dont Import Java Lang Java.Lang是默认引入的不需要显示引入
  • Empty Finalizer或Empty Finally Block或Empty If Stmt或Empty Statement或Empty Static Initializer或Empty Switch Statements或Empty Synchronized Block或Empty Try Block或Empty While Stmt:这个是非常常见的代码问题,if、switch、finally、try等内部是空的,很有可能是码农忘记处理了
  • Equals Hash Code 方法equal重写了但是hashcode未重写
  • Equals Null   和null比较用==而不是用equals
  • If Else Stmts Must Use Braces或If Stmts Must Use Braces 编码时if或者else不写大括号,很容易出现问题
  • Magic Number 魔术数,指的是一个数字无端的出现在代码中,但是却不知道其含义,很常见
  • Naming - *** 通常是类、方法、变量的命名不规范
  • Replace Vector With List 应使用List来代替Vector提高效率
  • Security - Array is stored directly 通常是数组类型的参数使用时,没有使用clone,方法直接改变了引用所指的对象
  • Singular Field 仅在某方法中使用的变量不应该声明为实例变量
  • Unconditional If Statement 通常是If语句永远为真或者永远为假
  • Unnecessary Case Change 使用equalsIgnoreCase()更高效
  • Unused Private Field或Unused formal parameter或Unused local variable或Unused private method没 有用到的变量、参数、方法
  • Useless Operation On Immutable 在方法体中修改了某值意图想传出来,但实际上操作的是一个新的对象或者值,如改变基本类型的参数

以上是部分常见的隐患类型,还有不少其他的没有写入。


原文地址:https://www.cnblogs.com/javawebsoa/p/3100537.html