场景:
前几天收到了一封邮件,生成环境出现了“/by zero”错误,这个错误一位同事足足经过两天的排查才找到了原因,能否在上线前就尽量规避一些错误呢?
那个问题产生的原因如下:
if(Math.abs(rowRecord.getBenefitmoney())==(Math.abs(rowRecord.getAmortmoney()==null?0d:rowRecord.getAmortmoney())-Math.abs(rowRecord.getRenewalmoney()==null?0d:rowRecord.getRenewalmoney()))){
return true;
}
简单来说是:两个double型类型相加减精度问题,比如 1.3+2.3=3.59999999996 而不是3.6
对于此问题我们通过findbugs工具可以在上线前检查出来,看如下结果:
我通过findbugs工具查了一下代码的其他部分,发现默认的级别有350多个bug
,大部分还是可信的bug,把检查级别调整到最严格状态竟然测出了3000多个bug.
有些很隐蔽的bug我们平时写的时候没有注意,但通过工具可以帮我们及时发现出来,避免到了上线阶段才困扰我们。
看一些例子吧:
1、double类型的数用了equals与字符串比较。
2、&&前后逻辑有问题
3、可能存在空指针问题的代码
4、仔细看看这几行代码
第2311行是不是忘了为isSuccess赋值,
是不是应该写成这样
isSuccess =
this
.
contractperiodDao
.deleteAllRows(perbillCertifEntity
附件中是findbugs工具的eclipse插件,感兴趣的同学可以看下哦,希望这款工具能给你的代码提升质量,避免上线后花很多时间排查错误。
findbugs插件2.x能在eclipse3.6x以下使用,但findbugs3.x不能再eclipse3.6x以下使用,如果插件安装不上请检查eclipse版本.
myeclipse7.X 对应的是 eclipse 3.4X
myeclipse8.X 对应的是 eclipse 3.5X
myeclipse9.X 对应的是 eclipse 3.6X