• 测试技术
  • 博客
  • 视频
  • 开源
  • 论坛
  • 沙龙
  • 下载
  • 杂志
  • 招聘

字号: | 推荐给好友 上一篇 | 下一篇

Java 理论与实践: 消除 bug

发布: 2008-6-13 13:55 | 作者: 不详 | 来源: 领测软件测试网编辑整理 | 查看: 35次 | 进入领测软件测试网论坛讨论

领测软件测试网 软件测试技术门户/z pk:t+L

r)uq;Y;LX 软件测试技术门户b:K-v F+l*n

y7xV2M*{ pP(E9eSs幸运的是,FindBugs 拥有大量的检测器,它们可以帮助识别错误同步的类。 Inconsistent Synchronization 检测器很可能是 FindBugs 所使用的最复杂的检测器;它必须分析整个程序,而不仅仅是单个方法,使用数据流分析来确定什么时候加锁,并使用直观推断来推出一个类想要提供线程安全保证。基本上,对于每个域,它都会查看该域的访问模式,并且如果大多数访问都是同步实现的,那么没有同步的访问将被标记为可能的错误。类似地,如果一个属性的设置函数是同步的,而获取函数不是,那么 Inconsistent Synchronization 检测器将生成一条警告。

kRk+f0dW Igd$G;t

bhEcC{5K除了 inconsistent synchronization 之外,FindBugs 还包含其他很多用于检测常见线程错误的检测器,如在加锁两次的情况下等待监视器(这虽然不一定是 bug,但是可能导致死锁),使用双检测加锁模式,不正确地初始化非易失性的域,对线程调用 run() 而不是启动线程,从构造函数中调用 Thread.start() ,或者没有将 wait() 包装到循环中就调用它。

/k} q2sT/i5ie