软件构造Lab4实验总结—spotbugs

在实验四中要求使用spotbugs发现并修改软件中的bug,故我在本篇文章中简要记录一下spotbugs的使用的以及一些常规的bug及其处理。
1、简介:
SpotBugs是Findbugs的继任者,用于对代码进行静态分析,查找相关的漏洞。
 目前SpotBugs 3.1.3 自带检测器,其中有90余种Bad practice,155余种Correctness,9种Experimental, 2种 Internationalization,17种Malicious code vulnerability,46种Multithreaded correctness,4种 Bogus random noise,37种Performance,11种 Security,87种Dodgy。
 Bad practice 不佳实践:常见代码错误,用于静态代码检查时进行缺陷模式匹配(如重写equals但没重写hashCode,或相反情况等)
 Correctness 可能导致错误的代码(如空指针引用、无限循环等)
 Experimental 实验性
 Internationalization 国际化相关问题(如错误的字符串转换等)
 Malicious code vulnerability 可能受到的恶意攻击(如访问权限修饰符的定义等)
 Multithreaded correctness 多线程的正确性(如多线程编程时常见的同步,线程调度问题等)
 BogusMultithreaded correctness 多线程的正确性(如多线程编程时常见的同步,线程调度问题等)
 Performance 运行时性能问题(如由变量定义,方法调用导致的代码低效问题等)
 Security 安全问题(如HTTP,SQL,DB等)
 Dodgy code 导致自身错误的代码(如未确认的强制转换、冗余的空值检查等)
注: SpotBugs 需要当前的JDK环境为 1.8以上,但可以对1.0~1.9的代码来进行检查。
2、插件下载:
Eclipese中从Help->marketplace搜索spotbugs进行安装
IDEA中从File->Settings->Plugins搜索spotbugs进行安装
如果安装过慢或安装失败的话,原因有可能是使用了移动的网络,换一个运营商试试吧~
3、常见Bug及其修改方法的记录
(1)、NM_METHOD_NAMING_CONVENTION
原因:错误的命名习惯
修改:类名首字母大写,方法名首字母小写。
(2)、DLS_DEAD_LOCAL_STORE
原因:初始化一个本地变量之后却没有使用
修改:直接去掉该变量即可
(3)、DM_BOXED_PRIMITIVE_FOR_PARSING
原因:对于一个字符串的装箱与拆箱,应该使用效率更高的parseXXX静态方法,避免使用XXX.valueOf方法
修改:例如将Integer.valueOf改为Integer.parseInt
(4)、DM_DEFAULT_ENCODING
原因:在初始化一个输入流时未指定解码方式
修改:对于InputStream(),Scanner(),传参时加入解码方式即可,如"UTF-8"
(5)、RCN_REBUNDANT_NULLCHECK_OF_NONNULL_VALUE
原因:对于之前获取的对象没有进行空检查
修改:先判断非空,再进行后续操作
(6)、UC_UESLESS_OBJECT
原因:测试中存在无用的对象
修改:直接删除就好
(7)、ES_COMPARING_STRINGS_WITH_EQ
原因:使用==或!=比较字符串对象
修改:改为equals方法
(8)、EQ_COMPARETO_USE_OBJECT_EQUALS
原因:compareTo方法中,如果返回值为0,应该等同于equals返回true
修改:equals和compareTo满足当且仅当equals返回true时,compareTo的值应返回零。
我在此处仅记录几个常见的bug以及其修改方法,对于更多的bug,建议直接参考spotbugs的官方文档说明:http://spotbugs.readthedocs.io/en/latest/bugDescriptions.html###

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值