Findbugs是一个静态分析工具,它检查类或者JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题。Findbugs自带检测器,其中有60余种Bad practice,80余种Correctness,1种 Internationalization,12种Malicious code vulnerability,27种Multithreaded correctness,23种Performance,43种Dodgy。
Bad practice 坏的实践
一些不好的实践,下面列举几个:
HE: 类定义了equals(),却没有hashCode();或类定义了equals(),却使用
Object.hashCode();或类定义了hashCode(),却没有equals();或类定义了hashCode(),却使用Object.equals();类继承了equals(),却使用Object.hashCode()。
SQL:Statement 的execute方法调用了非常量的字符串;或Prepared Statement是由一个非常量的字符串产生。
DE: 方法终止或不处理异常,一般情况下,异常应该被处理或报告,或被方法抛出。
Correctness 一般的正确性问题
可能导致错误的代码,下面列举几个:
NP: 空指针被引用;在方法的异常路径里,空指针被引用;方法没有检查参数是否null;null值产生并被引用;null值产生并在方法的异常路径被引用;传给方法一个声明为@NonNull的null参数;方法的返回值声明为@NonNull实际是null。
Nm: 类定义了hashcode()方法,但实际上并未覆盖父类Object的hashCode();类定义了tostring()方法,但实际上并未覆盖父类Object的toString();很明显的方法和构造器混淆;方法名容易混淆。
SQL:方法尝试访问一个Prepared Statement的0索引;方法尝试访问一个ResultSet的0索引。
UwF:所有的write都把属性置成null,这样所有的读取都是null,这样这个属性是否有必要存在;或属性从没有被write。
Internationalization 国际化
当对字符串使用upper或lowercase方法,如果是国际的字符串,可能会不恰当的转换。
Malicious code vulnerability 可能受到的恶意攻击
如果代码公开,可能受到恶意攻击的代码,下面列举几个:
FI: 一个类的finalize()应该是protected,而不是public的。
MS:属性是可变的数组;属性是可变的Hashtable;属性应该是package protected的。
Multithreaded correctness 多线程的正确性
多线程编程时,可能导致错误的代码,下面列举几个:
ESync:空的同步块,很难被正确使用。
MWN:错误使用notify(),可能导致IllegalMonitorStateException异常;或错误的
使用wait()。
No: 使用notify()而不是notifyAll(),只是唤醒一个线程而不是所有等待的线程。
SC: 构造器调用了Thread.start(),当该类被继承可能会导致错误。
Performance 性能问题
可能导致性能不佳的代码,下面列举几个:
DM:方法调用了低效的Boolean的构造器,而应该用Boolean.valueOf(…);用类似
Integer.toString(1) 代替new Integer(1).toString();方法调用了低效的float的构造器,应该用静态的valueOf方法。
SIC:如果一个内部类想在更广泛的地方被引用,它应该声明为static。
SS: 如果一个实例属性不被读取,考虑声明为static。
UrF:如果一个属性从没有被read,考虑从类中去掉。
UuF:如果一个属性从没有被使用,考虑从类中去掉。
Dodgy 危险的
具有潜在危险的代码,可能运行期产生错误,下面列举几个:
CI: 类声明为final但声明了protected的属性。
DLS:对一个本地变量赋值,但却没有读取该本地变量;本地变量赋值成null,却没有读取该本地变量。
ICAST: 整型数字相乘结果转化为长整型数字,应该将整型先转化为长整型数字再相乘。
INT:没必要的整型数字比较,如X <= Integer.MAX_VALUE。
NP: 对readline()的直接引用,而没有判断是否null;对方法调用的直接引用,而方法可能返回null。
REC:直接捕获Exception,而实际上可能是RuntimeException。
ST: 从实例方法里直接修改类变量,即static属性。
分享到:
相关推荐
FindBugs的BUG分类 FindBugs是一个静态代码分析工具,旨在检测Java代码中的错误和坏的实践。根据FindBugs的分类,BUG可以分为以下几类: 一、Bad practice 坏的实践 Bad practice是指一些不好的实践,可能会导致...
findbugs常见Bug以及处理办法 1、BUG级别总结 2、处理方法 无需处理 建议处理 必须处理 常见BUG 安全代码,代码优化
1. **广泛覆盖的错误类型**:FindBugs 1.3.9能够检测到多种类型的潜在问题,包括空指针异常、资源泄漏、并发问题、不安全的类型转换等,这些都基于其内置的大量bug模式。 2. **高精度报告**:与其他静态分析工具...
- **错误分类**:`FindBugs`将错误分为不同等级,包括`Possible Bug`、`Less Probable Bug`、`More Probable Bug`和`Very High Probability Bug`。等级越高,表示问题越严重,越需要优先处理。 - **错误详情**:...
1. 要显示FindBugs视图,依次点击“Windows”->“Show View”->“Other…”,然后选择“Bug Info”、“Bug Explorer”和“Bug Reviews”。 2. 对于项目的FindBugs配置,右键点击项目,选择“Properties”,然后找到...
Eclipse插件FindBugs是一个静态代码分析工具,它通过扫描Java代码,检测程序中的潜在bug、代码异味以及不符合编码规范的地方。以下是一些常见FindBugs错误的解释和修改建议。 1. EC_UNRELATED_TYPESBug 错误描述:...
FindBugs是一款用于检测Java代码中潜在bug的静态分析工具,它通过分析字节码来查找代码中不常见的bug模式。这些模式主要来源于开源社区的经验,每种模式都有一个唯一的Pattern ID,方便用户定位和修正。下面将详细...
FindBugs 使用说明 FindBugs 是一个静态分析工具,用于检查 Java 字节码,查找可能存在的 bug 和代码缺陷。它可以检查未关闭的数据库连接、缺少必要的 null 检查、多余的 null 检查、多余的 if 后置条件、相同的...
将原来的xml部分。防止出问题。将下载的xml覆盖。启动eclipse/IntelliJ/STS/...扫描一下就知道了。中文国际化覆盖率90%+后面再持续更新。
它能够帮助开发者在代码运行前找出潜在的bug,提高代码质量和可维护性。本篇文章将详细介绍FindBugs的安装过程以及如何在实际项目中使用。 一、安装FindBugs 1. 下载FindBugs 访问FindBugs的官方网站...
下面是对FindBugs配置及其说明的详细解释: **一、FindBugs配置** 在Eclipse或IntelliJ IDEA等集成开发环境中,FindBugs的配置通常在项目的`Project->Properties`菜单下。进入`Findbugs`配置界面,你可以找到以下...
《FindBugs修改说明》 FindBugs是一款开源的静态代码分析工具,它主要用于检测Java代码中的潜在问题,包括可能的错误、不好的编程习惯以及性能优化建议等。这款工具通过对代码进行深度分析,帮助开发者在运行时之前...
- 分析完成后,FindBugs会在当前视图中标注出潜在的bug,并给出相应的问题提示。 2. **查看FindBugs报告** - 分析结果会显示在“Bug Explorer”视图中。在这个视图中,你可以看到所有检测到的问题列表。 - 对于...
### FindBugs安装与基本使用指南 #### 一、FindBugs简介 FindBugs是一款强大的静态代码分析工具,能够帮助开发者发现Java程序中的潜在错误和编程缺陷。它通过分析程序的字节码来查找可能导致错误的行为模式,从而...
描述中提到的"用于findbugs安装配置,及findbugs结果导出分析文档",意味着这个压缩包不仅提供了FindBugs的基础软件,还可能包含配置文件、示例、或者说明文档,帮助用户安装、配置FindBugs,并理解其分析结果。...
2. 分类和严重性:Findbugs将检测到的问题分为多个类别,如多线程问题、性能问题、潜在的空指针异常等,并根据问题的严重程度赋予不同的等级,便于优先处理。 3. 详细报告:通过生成HTML报告,Findbugs不仅指出问题...
4. 展开`BUG`分类,双击具体错误,查看错误代码。例如,如果发现是空指针异常(NP)错误,应修正为如下的安全检查: ```java if (user == null || StringUtil.isBlank(user.getIwUserId())) { return null; } `...
FindBugs是一个匹配编译代码模式,而非使用bug数据库的工具。当提供源代码时,FindBugs还可高亮显示检测出bug的代码行。 在它的3.0.1版本中,FindBugs继续保持着数以百计的bug描述。根据bug的严重程度,FindBugs将...