静态代码⾛查的IntelliJIDEA安装使⽤FindBugs
前⾔
bug⽆处不在,但是我们总希望少⼀点bug,项⽬越来越⼤,开发⼈员越来越多代,码审查⼯作会变得越来越复杂,对代码质量控制难度也与⽇俱增,尽管经验丰富的程序员能审查能检查出⼤部分问题,但也得耗费巨⼤的⼈⼒成本,并且⼤多数⼤家⼯作都⽐较饱和,并不是每天都能坚持提交代码到SVN库前都能进⾏审查、所以我们可以通过⼀些必要的检查⼯具来去发现程序潜在的bug,减少静态Bug数量,培养程序员的编码习惯,减少代码review的代价。
FindBugs的简介
FindBugs 是⼀个使⽤静态分析来 ** 查 Java 代码中的错误 ** 的程序。它是免费软件;当前版本的 FindBugs 是 3.0.1
但是FindBugs 运⾏需要 1.7 或更⾼版本的 JRE(或 JDK)。⽬前⽀持集成idea的插件的版本是1.01
IntelliJ IDEA 安装 FindBugs 插件
包含FindBugs-IDEA-1.0.1.zip和findbugs-3.0.1.zip
1. Ctrl+Alt+S 快捷键打开设置选项
2. 选择 Plugins
3. 点击底部  按钮打开插件中⼼
4.
5.
6. 安装完成
FindBugs的使⽤
1. 插件⾯板按钮说明
从左到右,从上到下依次
分析选中的 Java ⽂件
分析在光标所在的类
分析选中的包
分析选中的模块 (点击时会询问是否同时分析 test 包中的类)
分析整个项⽬ (点击时会询问是否同时分析 test 包中的类)
⾃定义分析的类
分析被修改的类 (搭配 SVN,Git 使⽤)
分析 changelist 中的类 (搭配 SVN,Git 使⽤)
停⽌分析
根据 BUG 类型分组
根据类分组
根据包分组
根据 BUG 严重级别分组
————————————————
我们是使⽤ BUG 严重级别进⾏分组如下图
Of Concren 建议, 如果遵循能更好的完善代码
Troubling 不好的, 可能会引发不良后果
Scary 严重问题, 在某种情况下⼀定会出现问题
Scariest ⾮常严重, 已经影响到当前程序功能
可以按照严重级别倒序进⾏修复, 如果时间允许, 可以将 Of Concren 中的问题也⼀并修复
下⾯对具体提⽰的 BUG 进⾏分析 (黄⾊编号)
1.Random object created and used only once (Random 对象创建后只使⽤⼀次)
该⽅法每次运⾏都会创建⼀个新的 Random 对象, 执⾏⼀次后就会被回收. 但是在多线程情况获取随机数
⽅法也能正常使⽤, 所以可以定义⼀个 Random 对象常量, 然后使⽤该常量对象进⾏⽅法调⽤. 能减少创建对象的性能开销
2.Class defines equals() and uses Object.hashCode() (覆写了 equals ⽅法但是没有覆写 hashCode ⽅法)
在 Set,Map 中会使⽤对象的 hashCode ⽅法, 如果覆写了 equals ⽅法但是没有覆写 hashCode ⽅法会导致在 Set,Map 对象中出现问题
3.Inefficient use of keySet iterator instead of entrySet iterator (keySet 迭代器低效, 应该使⽤ entrySet 进⾏替换)
如果需要获取 Map 中的 key 和 value, 使⽤ Set() ⽅法返回 Set<Map.Entry<K, V>> 对象, 然后迭代该 Set, 在使⽤ Entry 对象获取 key 和 value 更为⾼效
4.Method ignores return value (⽅法忽略返回值)
intellijideaString 对象是不可变的, 当调⽤ im() 后, 是返回⼀个新的 String 对象, 不会对调⽤者的内容进⾏改动
5.int value cast to float and then passed und (将 int 值转换为 float,然后传递给 und)
6.Call to static DateFormat (调⽤静态的 DateFormat 对象)
DateFormat 对象是线程不安全的, 如果多线程调⽤同⼀个 DateFormat 对象会导致结果异常
FindBugs 只是⼀款静态代码分析⼯具, 虽然分析⼤多数的问题, 但是如果希望编写更为健壮的程序, 还需进⾏更多的测试操作, 切不可认为FindBugs 没有分析出问题便认为没有问题了

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。