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 在方法体中修改了某值意图想传出来,但实际上操作的是一个新的对象或者值,如改变基本类型的参数
以上是部分常见的隐患类型,还有不少其他的没有写入。
眼镜蛇