透明思考


Transparent Thoughts


代码风险分级

(本文基本上出自FindBugs

阻碍风险

逻辑正确性风险

这些缺陷模式的出现可能意味着程序员错误地描述了代码逻辑,从而导致程序行为出错。例如:

  • 不可能的类型转换。
  • 永远为假的instanceof操作
  • null调用equals方法
  • 对不同类型的对象进行相等性比较

多线程正确性风险

这些缺陷模式的出现可能意味着程序员对多线程环境编程不熟悉,在程序运行中可能随机引发错误。例如:

  • Boolean值同步可能导致死锁
  • notify()wait()不配对
  • readObject()方法同步
  • 错误的静态变量缓式初始化

关键风险

易受恶意代码攻击

这类缺陷模式表示代码没有足够的封装或是放松了已有的封装,在极端情况下可能遭受恶意代码的攻击,或引入不易诊断的错误。例如:

  • 以返回可修改对象的形式暴露内部细节
  • public访问级的finalize()方法
  • final的成员变量
  • 在成员变量中保存可修改的容器

安全性风险

这类缺陷模式可能意味着程序员没有充分考虑安全性需求,可能降低系统的安全性水平。例如:

主要风险

性能风险

这类缺陷模式可能导致系统性能水平不必要地降低。例如:

  • 不必要的原生变量装箱/拆箱
  • 显式调用垃圾收集
  • 调用低效的浮点数构造器
  • URL的性能缺陷

不佳编程实践

这类缺陷模式指示出不够好的编程习惯,会给维护带来困难,特殊情况下有可能导致程序行为错误。例如:

  • ==!=进行字符串比较
  • clone()方法没有调用super.clone()
  • 丢弃异常
  • removeAll()方法清空容器