其实提高代码质量—FindBugs代码审查工具的问题并不复杂,但是又很多的朋友都不太了解,因此呢,今天小编就来为大家分享提高代码质量—FindBugs代码审查工具的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!
FindBugs 是一种静态分析工具,用于检查类或JAR 文件,将字节码与一组缺陷模式进行比较,以发现可能的问题。它可以帮助我们简单、高效、全面地发现程序代码中的bug、异味和潜在风险。针对各种问题,还提供了简单的修改意见,供我们重构时参考;通过使用它,我们可以在一定程度上减少我们代码评审的工作量,提高评审效率。通过findbugs找到bug,然后自己重构代码,可以培养我们的编码意识和水平,形成良好的习惯,提高开发和编码能力。
2.安装FindBugs
点击“帮助-安装新软件”,如下图:
在“名称”中输入findBugs,在“位置”中输入:http://findbugs.cs.umd.edu/eclipse
3. 使用方法
安装插件后,选择指定的包或类查找bug
打开“窗口”—“显示视图”—“Bug Explore”,可以打开Bug列表。
发现的错误有三种颜色:
黑虫标志属于机密。
红色错误表示代码发现后必须修改的严重错误。
橙色错误表示应尽可能修复的潜在警告错误。
双击bug项目,会在右侧编辑窗口自动打开相关代码文件,并连接到代码片段。点击行号旁边的小bug图标后,eclipse下方的输出区域会提供详细的bug描述、修改建议等信息。我们可以根据这些信息进行更改。
4. 问题发现实例
忽略方法返回值
该检测器会查找代码中方法返回值被忽略但不应被忽略的位置。一个常见的例子是调用String 方法时:
忽略返回值的示例
字符串aString=’鲍勃’; b.replace(‘b’, ‘p’); if(b.equals(‘pop’)) 这个错误很常见。在第2 行,程序员认为他已将字符串中的所有b 替换为p。确实如此,但他忘记了字符串是不可变的。所有此类方法都会返回一个新字符串,并且不会更改消息的收件人。
空指针示例
Person person=aMap.get(‘bob’); if (person !=null) { person.updateAccessTime();} 字符串名称=person.getName();在此示例中,如果第1 行中的Map 不包含一个名为“bob”的人,则在第5 行询问该人的姓名,则会出现空指针异常。因为FindBugs 不知道map 是否包含“bob”,所以它将第5 行标记为可能的空指针异常。
初始化前读取字段
该检测器查找在构造函数中初始化之前读取的字段。此错误通常是——,但并不总是——,这是由于使用字段名称而不是构造函数参数引起的。
读取构造函数中未初始化的字段
公共类事物{私有列表操作;公共事物(字符串startingActions){ StringTokenizer tokenizer=new StringTokenizer(startingActions); while (tokenizer.hasMoreTokens()) { actions.add(tokenizer.nextToken()); } }}在此示例中,第6 行将生成空指针异常,因为变量actions 尚未初始化。
命名检查
针对标准Java 命令规范进行测试:变量名称不应太短;方法名不宜太长;类名应以小写字母开头;方法和字段名称应以小写字母等开头。
未使用的代码检查
查找从未使用过的私有字段和局部变量、无法执行的语句、从未调用过的私有方法等等。
嵌套检查
例如:switch语句应该有default块,应该避免深度嵌套的if块,不应该重新分配参数,不应该比较double值是否相等。
进口报关单检查
检查import 语句是否有问题,例如同一个类被导入两次或被导入到java.lang 类中。
JUnit 测试检查
查找测试用例和测试方法的具体问题,例如方法名称的正确拼写以及suite() 方法是否是静态和公共的。
字符串检查
了解使用字符串时遇到的常见问题,例如重复的字符串标量、调用String 构造函数以及对String 变量调用toString() 方法。
括号检查
检查for、if、while 和else 语句中是否使用括号。
代码大小检查
测试方法太长,类包含太多方法,以及重构时的类似问题。
最终功能检查
因为finalize()方法在Java语言中并不是那么常见,虽然它们的使用规则很详细,但是人们对它们还是比较陌生。此类检查会查找Finalize() 方法的各种问题,例如空终结器、调用其他方法的Finalize() 方法、对Finalize() 的显式调用等。
克隆检查
联轴器检查
寻找类之间过度耦合的迹象,例如导入过多;当超类型或接口就足够时使用子类类型;类中的字段、变量和返回类型过多。
异常检查
日志检查
查找java.util.logging.Logger 的不当使用,包括非最终、非静态记录器以及在一个类中拥有多个记录器。
打开—关闭检查
检查文件或通讯以查看是否忘记关闭。
其他测试
FindBugs 网站上提供了完整的错误列表和描述。
构建您自己的规则集
原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/126005.html
用户评论
打个酱油卖个萌
作为一个程序员,我一直都在尝试提高自己的代码质量。最近学习了FindBugs这个工具,感觉很棒!它能帮我快速找到一些潜在的问题,比如空指针异常、内存泄漏等等,让我在编写和调试代码时更自信!
有12位网友表示赞同!
作业是老师的私生子
想跟作者说:FindBugs真的太棒啦!我之前遇到过很多诡异的BUG,用它扫描一遍就能轻松找出来。以前debug花了好多时间,现在效率简直提升了好几个档次!强烈推荐给所有想提高代码质量的小伙伴们!
有10位网友表示赞同!
陌然淺笑
确实,高质量代码是每个程序员追求的目标。FindBugs这个工具是一个很好的辅助手段,能帮助我们快速定位潜在的 BUG,并改进代码质量。建议大家可以学习一下的使用方法,它能帮你节省很多时间和精力。
有5位网友表示赞同!
余温散尽ぺ
FindBugs虽然好用,但我觉得它有时候可能会出现误判的情况。对于一些比较复杂的代码逻辑,需要结合实际情况进行判断,不能完全信任工具给出的结果。
有12位网友表示赞同!
殃樾晨
我觉得写出高质量的代码其实更重要的是理解算法和数据结构,而不是仅仅依靠工具。使用FindBugs更多的是作为辅助手段,真正重要的是要掌握扎实的编程基础。
有20位网友表示赞同!
优雅的叶子
这个FindBugs听起来很能帮到我!我平时在开发项目的时候经常遇到一些意想不到的问题,希望能通过它提前预警,避免浪费时间 Debugging。
有8位网友表示赞同!
泡泡龙
代码审查工具很多啦,为啥要选 FindBugs?有什么特别之处吗?感觉名字不太好记…
有12位网友表示赞同!
执拗旧人
作为一个资深程序员,我认为FindBugs是一个非常不错的工具。它能帮助我们更快速地发现潜在的 BUG,从而提高代码质量。当然,也不能完全依赖工具,还是要注重自身的代码审阅习惯和经验积累。
有11位网友表示赞同!
像从了良
虽然FindBugs能够帮我们找一些潜在的问题,但它不能完全覆盖所有可能的错误。对于一些非常复杂的逻辑或者新的编程技术,可能还需要依赖人工审查才能保证代码质量。
有8位网友表示赞同!
花菲
提高代码质量不仅仅是依靠工具,更需要良好的开发习惯和规范的编码风格。FindBugs只是辅助手段,发挥最大的作用需要开发者与之结合,不断改进自己的代码编写能力。
有19位网友表示赞同!
念旧情i
FindBugs 这款工具我用过!它能帮你快速找到很多潜在的问题,比如空指针异常、内存泄漏等等,确实可以有效提高代码质量! 强烈推荐给所有想提高代码质量的小伙伴们!
有7位网友表示赞同!
爱到伤肺i
对于初学者来说,FindBugs是个非常有用的工具,可以帮助我们学习并掌握一些编程方面的知识。当然,熟练使用 FindBugs 需要一定的实践经验和理解能力。
有17位网友表示赞同!
一尾流莺
虽然FindBugs的功能强大,但我个人觉得它对代码注释的识别还不够完善。有时候会把一些重要的解释信息误判为错误,这可能会给开发者带来一些困惑。
有17位网友表示赞同!
繁华若梦
提高代码质量是一个持续的学习和改进的过程,FindBugs只是其中一个重要的工具。建议大家在使用 FindBugs 的同时,也要关注开源社区上的相关讨论,不断提升自己的编程能力和水平。
有19位网友表示赞同!
太难
我觉得FindBugs这个工具还是挺不错的,特别是对于一些大型项目的代码维护来说,能够帮助我们更有效率地识别问题,加快调试速度
有11位网友表示赞同!
逃避
除了FindBugs之外,还有很多优秀的代码审查工具可供选择。建议大家根据自己的实际需求和项目特点进行对比,选择最适合的工具来提高代码质量。
有15位网友表示赞同!