(本文基本上出自FindBugs)
阻碍风险
逻辑正确性风险
这些缺陷模式的出现可能意味着程序员错误地描述了代码逻辑,从而导致程序行为出错。例如:
- 不可能的类型转换。
- 永远为假的
instanceof操作 - 对
null调用equals方法 - 对不同类型的对象进行相等性比较
多线程正确性风险
这些缺陷模式的出现可能意味着程序员对多线程环境编程不熟悉,在程序运行中可能随机引发错误。例如:
- 对
Boolean值同步可能导致死锁 notify()或wait()不配对- 对
readObject()方法同步 - 错误的静态变量缓式初始化
关键风险
易受恶意代码攻击
这类缺陷模式表示代码没有足够的封装或是放松了已有的封装,在极端情况下可能遭受恶意代码的攻击,或引入不易诊断的错误。例如:
- 以返回可修改对象的形式暴露内部细节
public访问级的finalize()方法- 非
final的成员变量 - 在成员变量中保存可修改的容器
安全性风险
这类缺陷模式可能意味着程序员没有充分考虑安全性需求,可能降低系统的安全性水平。例如:
- 在代码中硬编码密码
- HTTP响应分拆漏洞
- JSP跨站脚本漏洞
- SQL注入漏洞
主要风险
性能风险
这类缺陷模式可能导致系统性能水平不必要地降低。例如:
- 不必要的原生变量装箱/拆箱
- 显式调用垃圾收集
- 调用低效的浮点数构造器
URL的性能缺陷
不佳编程实践
这类缺陷模式指示出不够好的编程习惯,会给维护带来困难,特殊情况下有可能导致程序行为错误。例如:
- 用
==或!=进行字符串比较 clone()方法没有调用super.clone()- 丢弃异常
- 用
removeAll()方法清空容器
