java代码缺陷自动分析工具之FindBugs介绍

合集下载

Java静态检测工具的简单介绍 - Sonar、Findbugs

Java静态检测工具的简单介绍 - Sonar、Findbugs

Java静态检测工具的简单介绍- Sonar、Findbugs2010-11-04 13:55:54标签:sonar休闲职场Java静态检测工具的简单介绍 from:/?p=9015静态检查:静态测试包括代码检查、静态结构分析、代码质量度量等。

它可以由人工进行,充分发挥人的逻辑思维优势,也可以借助软件工具自动进行。

代码检查代码检查包括代码走查、桌面检查、代码审查等,主要检查代码和设计的一致性,代码对标准的遵循、可读性,代码的逻辑表达的正确性,代码结构的合理性等方面;可以发现违背程序编写标准的问题,程序中不安全、不明确和模糊的部分,找出程序中不可移植部分、违背程序编程风格的问题,包括变量检查、命名和类型审查、程序逻辑审查、程序语法检查和程序结构检查等内容。

”。

看了一系列的静态代码扫描或者叫静态代码分析工具后,总结对工具的看法:静态代码扫描工具,和编译器的某些功能其实是很相似的,他们也需要词法分析,语法分析,语意分析...但和编译器不一样的是他们可以自定义各种各样的复杂的规则去对代码进行分析。

静态检测工具:1.PMD1)PMD是一个代码检查工具,它用于分析 Java 源代码,找出潜在的问题:1)潜在的bug:空的try/catch/finally/switch语句2)未使用的代码:未使用的局部变量、参数、私有方法等3)可选的代码:String/StringBuffer的滥用4)复杂的表达式:不必须的if语句、可以使用while循环完成的for循环5)重复的代码:拷贝/粘贴代码意味着拷贝/粘贴bugs2)PMD特点:1)与其他分析工具不同的是,PMD通过静态分析获知代码错误。

也就是说,在不运行Java程序的情况下报告错误。

2)PMD附带了许多可以直接使用的规则,利用这些规则可以找出Java源程序的许多问题3)用户还可以自己定义规则,检查Java代码是否符合某些特定的编码规范。

3)同时,PMD已经与JDeveloper、Eclipse、jEdit、JBuilder、BlueJ、CodeGuide、NetBeans、Sun JavaStudio Enterprise/Creator、IntelliJ IDEA、TextPad、Maven、Ant、Gel、JCreator以及Emacs 集成在一起。

FindBugs

FindBugs

FindBugs运用Apache BCEL 库分析类文件(class文件)而不是源代码,将字节码与一组缺陷模式进行对比以发现可能的问题。FindBugs的检测器已增至300多条,被分为不同的类型,
常见的类型如下:
· 正确性(Correctness):这种归类下的问题在某种情况下会导致bug,比如错误的强制类型转换等。
重新启动Eclipse 。
我使用的是MyEclipse8.5可能路径和大家的不太一样,我是放到了路径Genuitec/MyEclipse 8.5/dropins下面
3、在Eclipse中使用FindBugs
重新启动eclipse
打开FindBugs视图
当此项没有选中,你只能每次在需要的时候自己去运行FindBugs来检查你的代码。
2 Detector Configuration选择项
在这里你可以选择所要进行检查的相关的Bug Pattern条目,你可以根据需要选择或去掉相应的 检查条件。
3 Minimum priority to report选择项
这个选择项是让你选择哪个级别的信息进行显示,有Low、Medium、High三个选择项可以选择,很类似于Log4J的级别设置啦。 比如:
你选择了High选择项,那么只有是High级别的提示信息才会被显示。
你选择了Medium选择项,那么只有是Medium和High级别的提示信息才会被显示。
你选择了Low选择项,那么所有级别的提示信息都会被显示。
· 最佳实践反例(Bad practice):这种类别下的代码违反了公认的最佳实践标准,比如某个类实现了equals方法但未实现hashCode方法等。
· 多线程正确性(Multபைடு நூலகம்threaded correctness):关注于同步和多线程问题。

白盒测试的静态分析工具推荐辅助测试的利器

白盒测试的静态分析工具推荐辅助测试的利器

白盒测试的静态分析工具推荐辅助测试的利器白盒测试是一种软件测试方法,它通过测试程序内部的结构、设计和实现来评估系统的质量。

为了提高白盒测试的效率和准确性,静态分析工具成为了不可或缺的辅助工具。

本文将推荐一些常用的白盒测试的静态分析工具,帮助测试人员提高测试效率和测试质量。

一、FindBugsFindBugs是一个基于静态分析原理的开源工具,用于发现Java代码中的潜在缺陷。

它利用Java字节码层面的分析技术,能够对代码中的常见错误、异常控制流、并发问题等进行检测。

FindBugs提供了丰富的规则集合,可以根据项目需求进行配置和扩展。

该工具还能够与主流的集成开发环境(IDE)进行整合,帮助开发人员及时发现和修复代码缺陷。

二、PMDPMD也是一款开源的静态分析工具,主要用于检测Java代码中的潜在问题和不良实践。

它通过静态分析代码,识别出代码中的潜在缺陷、可维护性问题、性能问题等。

PMD提供了丰富的规则集,开发人员可以根据项目需求进行配置和定制。

除了Java,PMD还支持其他编程语言,如C/C++、JavaScript等。

使用PMD可以帮助测试人员发现并修复代码中的问题,提高代码质量和可维护性。

三、CheckstyleCheckstyle是一个用于Java代码规范检查的工具,它可以帮助开发人员遵循一致的编码规范,提高代码的可读性和可维护性。

Checkstyle 支持多种常见的编码规范,例如Google Java Style、Sun Code Conventions等。

该工具通过静态分析代码,识别出代码中不符合规范的部分,并给出相应的警告和建议。

测试人员可以利用Checkstyle来保证测试代码的规范性和质量。

四、SonarQubeSonarQube是一个用于代码质量管理的开源平台,旨在帮助开发团队提高代码质量和可维护性。

SonarQube支持多种编程语言,如Java、C/C++、C#等,提供了丰富的代码质量度量指标和规则集。

代码审计工具Findbugs自动检查CheckList及配置方法

代码审计工具Findbugs自动检查CheckList及配置方法

代码审计工具Findbugs自动检查CheckList及配置方法
代码审计工具Findbugs是一个应用比较广泛的开源代码审计工具,如果开发团队利用好了这个工具,能够很大程度上提高软件产品的安全性。

而且重要的是Free。

首先,介绍一下安全审计配置文件的位置,网上都没有这方面的资料,我自己找了几个小时才找到。

这个配置文件不在安装文件夹,也不再Eclipse软件的文件夹,而是在具体项目的工作空间workspace中,具体位置是:workspace\.metadata\.plugins\edu.umd.cs.findbugs.plugin.eclipse\.fbprefs。

(以点开始的文件夹,还这么多层目录,很隐蔽!!!)
这个文件中,选中要审计的项目其配置值会是“TURE”,配置为不审计的项会是“FALSE”。

我们可以通过在工作中逐渐确定哪些安全项一定要检查,哪些不需要检查,确定之后,整个开发团队使用同一个配置文件,从而实现标准化、自动化地审查开发团队的代码。

代码质量度量和分析的工具和方法

代码质量度量和分析的工具和方法

代码质量度量和分析的工具和方法代码质量度量和分析是软件开发过程中的重要环节之一,它可以帮助开发团队评估代码的质量,及时发现潜在的问题,并提供改进的方向。

本文将介绍常见的代码质量度量和分析的工具和方法。

一、静态代码分析工具静态代码分析工具是通过检查源代码的文本内容来分析代码质量的工具。

下面是几个常见的静态代码分析工具:1. SonarQube:SonarQube是一款开源的静态代码分析工具,它可以检查代码的各类规范性问题、代码复杂度、代码重复、代码注释等。

SonarQube支持多种编程语言,如Java、C#、C++等。

2. Checkstyle:Checkstyle是一个用于检查Java代码规范性问题的工具,它可以帮助开发团队遵循统一的编码规范,提高代码可读性和可维护性。

3. FindBugs:FindBugs是一个用于检查Java代码缺陷的工具,它可以自动查找可能导致程序崩溃、性能下降或安全漏洞的问题。

FindBugs基于静态分析技术,通过检查字节码来发现潜在问题。

4. PMD:PMD是一个用于检查Java代码质量的工具,它可以检查代码的可读性、性能、安全性等方面的问题。

PMD提供了多种规则,可以根据项目的需求灵活配置。

二、代码复杂度分析工具代码复杂度是衡量代码难度和可维护性的一个重要指标,较高的复杂度常常意味着代码更加难以理解和维护。

下面是几个常见的代码复杂度分析工具:1. Cyclomatic Complexity:圈复杂度是一种用于度量代码复杂度的指标,它基于代码中的控制流程图。

可以使用一些工具,例如Checkstyle或SonarQube来检查代码的圈复杂度,并根据结果识别优化的机会。

2. McCabe Complexity:麦卡比复杂度也是一种度量代码复杂度的指标,它通过计算代码中的路径数来评估代码的复杂度。

相对于圈复杂度,麦卡比复杂度能更精确的度量代码的复杂度。

三、漏洞扫描工具在开发过程中,可能会存在一些安全漏洞,如跨站脚本攻击(XSS)、SQL注入、逻辑漏洞等。

代码静态检查工具与应用介绍

代码静态检查工具与应用介绍

代码静态检查工具与应用介绍代码的质量直接关系到软件的性能和可靠性。

为了提高代码质量,开发人员常常采用代码静态检查工具来检测潜在的代码缺陷和错误。

本文将介绍常用的代码静态检查工具及其应用,帮助读者更好地理解和应用这些工具。

一、什么是代码静态检查工具?代码静态检查工具是一类软件工具,通过扫描源代码来检查潜在的编程错误、不合规范的代码和潜在的安全隐患。

它可以在代码编写的早期发现问题,帮助开发人员提前修复错误,从而提高代码质量。

二、常用的代码静态检查工具1. FindBugs:FindBugs是一个基于Java字节码的静态分析工具,用于查找Java程序中的潜在缺陷。

它可以检测出空指针引用、资源未释放、不必要的对象创建等问题,并提供详细的问题报告。

2. PMD:PMD是一个针对Java源代码的静态规则检查工具。

它可以帮助开发人员发现代码中的潜在问题,如未使用的变量、无效的方法重写、复杂的表达式等。

PMD提供了多种规则,可以根据项目需求进行配置和定制。

3. ESLint:ESLint是用于JavaScript代码的静态检查工具,它能帮助开发人员发现代码中的潜在问题并提供修复建议。

ESLint支持可配置的规则集,可以根据项目需求进行灵活的配置。

4. Checkstyle:Checkstyle是一个用于Java代码的静态规则检查工具。

它可以帮助开发人员遵循编码规范,并提供统一的代码风格。

Checkstyle支持自定义规则和可配置的检查选项,以满足项目的需求。

三、代码静态检查工具的应用1. 代码质量控制:代码静态检查工具能够帮助开发人员发现代码缺陷和不规范的编码风格,并及时提供修复建议。

通过使用这些工具,可以规范代码质量,提高代码的可读性和可维护性。

2. 安全漏洞检测:代码静态检查工具能够帮助开发人员发现潜在的安全隐患,如SQL注入、跨站脚本攻击等。

通过及时修复这些问题,可以提高软件的安全性和可靠性。

3. 性能优化:代码静态检查工具还可以检测不合理的代码结构和低效的算法,帮助开发人员发现性能瓶颈,并提供相应的优化建议。

findbugs 用法

findbugs用法FindBugs是一款由加州大学伯克利分校的Java开发者团队开发的静态代码分析工具,主要用于发现Java代码中的潜在错误和漏洞。

本文将向您介绍FindBugs的基本用法,帮助您更好地利用这款工具提高代码质量。

一、FindBugs简介FindBugs是一款免费的开源工具,它通过分析Java代码的语法、数据流、异常处理等方面,发现潜在的错误和漏洞。

FindBugs可以帮助开发者发现一些不易被人工发现的错误,提高代码质量,减少软件缺陷。

二、安装FindBugs要使用FindBugs,您需要先将其安装到您的系统中。

FindBugs支持Windows、Linux和MacOSX等操作系统。

安装过程相对简单,您可以从FindBugs官方网站下载最新版本的FindBugs,并根据安装指南进行安装。

三、使用FindBugs进行代码分析安装完成后,您可以使用FindBugs对Java代码进行静态分析。

以下是使用FindBugs进行代码分析的基本步骤:1.打开FindBugs分析器界面,将要分析的Java代码文件上传到分析器中。

2.选择要进行静态分析的选项,如是否包含测试代码等。

3.等待分析器进行分析,生成报告。

4.查看分析报告,了解代码中的潜在错误和漏洞。

以下是一些使用FindBugs的常见用法示例:1.查找未使用的变量:FindBugs可以检测到未使用的变量,这可能是由于开发者疏忽或无意中留下的漏洞。

2.查找空指针引用:FindBugs可以检测到可能出现的空指针引用错误,这可能导致程序崩溃或出现不可预期的行为。

3.查找内存泄漏:FindBbugs可以检测到可能的内存泄漏问题,如对象引用未被释放等。

4.查找线程安全问题:FindBugs可以检测到线程安全问题,如并发修改共享数据等。

五、优化FindBugs结果使用FindBugs分析后,您可能会发现一些潜在的问题和漏洞。

对于这些问题和漏洞,您可以采取以下优化措施:1.修复错误:对于发现的错误和漏洞,您应该尽快修复它们,以确保代码的质量和稳定性。

JAVA静态代码质量分析工具FindBugs介绍PPT课件

些检查,不做哪些检查)。
Findbugs提供了方便操作的可视化界面,同 时也可以作为Eclipse的一个插件来使用,而 我们使用得最多的还是作为Eclipse的插件来
使用。
FindBugs和其他工具的区别
Checkstyle和PMD是根据样式(style) 来 改进代码质量的。
FindBugs分析引擎它直接操作类文件(class 文 件)而不是源代码。我们可以通过命令行 、各种构建工具(如Ant、Cruise Control、 Hudson及Maven等)、独立的Swing GUI或是 以Eclipse和NetBeans IDE插件的方式来运行 FindBugs。输出结果既可以是XML的,也可以
Enable bug categories选择项 Correctness关于代码正确性相关方面的; Performance关于代码性能相关方面的; Internationalization关于代码国际化相关方面; Multithreaded correctness关于代码多线程正确
安装了Findbugs插件后。右击点击你要检查的项 目选择【Find Bugs】->【Find Bugs】进行检
查。
要查看Findbugs检查出了哪些Bug,可以选择 Windows菜单->Show View->Bug Explorer,打
开Bug Explorer面板。
如果想要查看某个Bug详细的信息,则可以选择 Windows菜单->Open Perspective,然后选择 FindBugs就可以打开FindBugs的Properties面 板,在这个面板里面可以看到最详尽的Bugs信息

FindBugs的配置
选择你的项目,右键 => Properties => FindBugs => ❖Run FindBugs Automatically开关 当此项选中后,FindBugs将会在你修改Java类时 自动运行,如你设置了Eclipse自动编译开关后, 当你修改完Java文件保存,FindBugs就会运行, 并将相应的信息显示出来。当此项没有选中,你 只能每次在需要的时候自己去运行FindBugs来检 查你的代码。

sonarqube findbugs 实现原理

sonarqube findbugs 实现原理SonarQube FindBugs 是一个开源的代码静态分析工具,它主要用于在 Java 代码中找出潜在的错误和漏洞。

FindBugs 使用静态分析技术对代码进行扫描,不需要运行时环境,也不需要编译后的字节码。

它基于字节码分析技术,通过对类文件(.class 文件)进行分析,以发现代码中的错误。

以下是 SonarQube FindBugs 实现原理的详细说明:一、下载和安装首先,需要从 SonarQube 官网下载 FindBugs 的 ZIP 文件,并解压到适当的位置。

然后,通过配置 SonarQube 的启动脚本(例如StartSonar.bat),将 FindBugs 集成到 SonarQube 中。

二、架构和组成FindBugs 的架构包括三个主要组件:FindBugs UI、FindBugs Plugin 和 FindBugs Engine。

FindBugs UI 用于展示分析结果和错误信息,FindBugs Plugin 是将 FindBugs 集成到 SonarQube 中的插件,FindBugs Engine 是执行实际分析的引擎。

三、工作原理FindBugs 使用静态分析技术对 Java 代码进行扫描。

它通过读取类文件(.class 文件)中的字节码信息,分析其中的指令和数据流,以发现潜在的错误和漏洞。

FindBugs 使用一组规则(称为检查器)来检查代码中的问题。

这些规则涵盖了常见的编程错误和安全漏洞,例如空指针异常、资源泄露、数据竞争等。

四、检查器的工作方式FindBugs 使用了一种称为“静态单赋值”(SSA)的中间表示形式来分析代码。

在这种表示形式中,每个变量只有一个赋值点,这有助于提高分析的精度。

FindBugs 通过遍历代码中的每个节点,对每个节点的操作进行静态单赋值分析,以确定可能存在的问题。

五、结果展示FindBugs 分析完成后,将结果展示在 SonarQube UI 中。

代码质量管理工具推荐与比较(四)

代码质量管理工具推荐与比较在现代软件开发的过程中,代码的质量是保障软件稳定性和可维护性的重要因素之一。

为了提高代码的质量,许多开发团队都采用了各种不同的代码质量管理工具。

本文将对一些常用的代码质量管理工具进行推荐与比较。

静态代码分析工具静态代码分析工具是一种自动检查代码中潜在问题和错误的工具。

它通过对代码进行静态分析,发现代码中可能存在的潜在风险,并给出相应的建议和修复方案。

以下是几种常用的静态代码分析工具:1. SonarQube:SonarQube 是一个开源的静态代码分析工具,支持多种编程语言。

它可以帮助开发者发现代码质量问题,如代码冗余、安全漏洞、代码复杂度等,并提供实时的质量指标和可视化报告。

2. PMD:PMD 是一个用于 Java 代码的静态代码分析工具。

它可以检查代码中的常见问题,如未使用的变量、未处理的异常、冗余代码等。

PMD 提供了丰富的规则集,并可以根据项目的需要进行自定义配置。

3. ESLint:ESLint 是一个用于 JavaScript 代码的静态代码分析工具。

它支持多种规则集,并可以根据项目的需要进行配置。

ESLint 可以帮助开发者发现代码中可能存在的错误和不规范之处,并提供相应的修复建议。

代码测试工具代码测试工具可以帮助开发者自动化执行代码测试,并生成测试报告和覆盖率分析。

以下是几种常用的代码测试工具:1. JUnit:JUnit 是一个用于 Java 代码测试的工具。

它提供了一系列注解和断言方法,帮助开发者编写和执行单元测试。

JUnit 的测试结果可以通过控制台输出或生成 HTML 报告来进行查看。

2. pytest:pytest 是一个用于 Python 代码测试的工具。

它支持丰富的测试模式和断言方法,并提供了详细的测试报告和覆盖率分析。

pytest 还支持与其他测试框架的集成,如 Django、Flask 等。

3. NUnit:NUnit 是一个用于 .NET 代码测试的工具。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1 FindBugs是什么?FindBugs 是一个java bytecode静态分析工具,它可以帮助java工程师提高代码质量以及排除隐含的缺陷。

FindBugs检查类或者 JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题。

有了静态分析工具,就可以在不实际运行程序的情况对软件进行分析。

FindBugs不是通过分析类文件的形式或结构来确定程序的意图,而是通常使用 Visitor 模式进行分析。

2 FindBugs可以做什么?FindBugs提供了35个检测器来检测字节码中可能的缺陷。

可以做的事情主要有:2.1 找出 hash equals 不匹配找与 equals() 和 hashCode() 的实现相关的几个问题。

这两个方法非常重要,因为几乎所有基于集合的类---List、Map、Set 等都调用它们。

一般来说,这个检测器寻找两种不同类型的问题:①当一个类重写对象的 equals() 方法,但是没有重写它的 hashCode 方法,或者相反的情况时。

②定义一个 co-variant 版本的 equals() 或 compareTo() 方法。

例如, Bob 类定义其equals() 方法为布尔 equals(Bob) ,它覆盖了对象中定义的 equals() 方法。

因为 Java 代码在编译时解析重载方法的方式,在运行时使用的几乎总是在对象中定义的这个版本的方法,而不是在 Bob 中定义的那一个(除非显式将 equals() 方法的参数强制转换为 Bob 类型)。

因此,当这个类的一个实例放入到类集合中的任何一个中时,使用的是 Object.equals() 版本的方法,而不是在 Bob 中定义的版本。

在这种情况下, Bob 类应当定义一个接受类型为Object 的参数的 equals() 方法。

2.2 检测:忽略方法返回值这个检测器查找代码中忽略了不应该忽略的方法返回值的地方。

这种情况的一个常见例子是在调用 String 方法时,例如:1 String aString = "bob";2 b.replace('b', 'p');3 if(b.equals("pop"))这个错误很常见。

在第 2 行,程序员认为他已经用 p 替换了字符串中的所有 b。

确实是这样,但是他忘记了字符串是不可变的。

所有这类方法都返回一个新字符串,而从来不会改变消息的接收者。

2.3 检测:Null 指针对 null 的解引用(dereference)和冗余比较这个检测器查找两类问题。

它查找代码路径将会或者可能造成 null 指针异常的情况,它还查找对 null 的冗余比较的情况。

例如,如果两个比较值都为 null,那么它们就是冗余的并可能表明代码错误。

FindBugs 在可以确定一个值为 null 而另一个值不为 null 时,检测类似的错误,例如:1 Person person = aMap.get("bob");2 if (person != null) {3 person.updateAccessTime();4 }5 String name = person.getName();在这个例子中,如果第 1 行的 Map 不包括一个名为“bob”的人,那么在第 5 行询问 person 的名字时就会出现 null 指针异常。

因为 FindBugs 不知道 map 是否包含“bob”,所以它将第 5 行标记为可能 null 指针异常。

2.4 检测:初始化之前读取字段这个检测器寻找在构造函数中初始化之前被读取的字段。

这个错误通常是由使用字段名而不是构造函数参数引起的,例如在构造函数中读取未初始化的字段:1 public class Thing {2 private List actions;3 public Thing(String startingActions) {4 StringTokenizer tokenizer = new StringTokenizer(startingActions);5 while (tokenizer.hasMoreTokens()) {6 actions.add(tokenizer.nextToken());7 }8 }9 }在这个例子中,第 6 行将产生一个 null 指针异常,因为变量 actions 还没有初始化。

2.5 命名检查对标准 Java 命令规范的测试:变量名称不应太短;方法名称不应过长;类名称应当以小写字母开头;方法和字段名应当以小写字母开头,等等。

2.6 未使用的代码检查查找从未使用的私有字段和本地变量、执行不到的语句、从未调用的私有方法,等等。

2.7 嵌套检查例如: switch 语句应当有 default 块,应当避免深度嵌套的 if 块,不应当给参数重新赋值,不应该对 double 值进行相等比较。

2.8 导入语句检查检查 import 语句的问题,比如同一个类被导入两次或者被导入 ng 的类中。

2.9 JUnit 测试检查查找测试用例和测试方法的特定问题,例如方法名称的正确拼写,以及 suite() 方法是不是static 和 public。

2.10 字符串检查找出处理字符串时遇到的常见问题,例如重复的字符串标量,调用 String 构造函数,对String 变量调用 toString() 方法。

2.11 括号检查检查 for、 if、 while 和 else 语句是否使用了括号。

2.12 代码尺寸检查测试过长的方法、有太多方法的类以及重构方面的类似问题。

2.13 终结函数检查因为在 Java 语言中, finalize() 方法不是那么普遍,它们的使用规则虽然很详细,但是人们对它们相对不是很熟悉。

这类检查查找 finalize() 方法的各种问题,例如空的终结函数,调用其他方法的 finalize() 方法,对 finalize() 的显式调用,等等。

2.14 克隆检查用于 clone() 方法的新规则。

凡是重写 clone() 方法的类都必须实现 Cloneable, clone() 方法应该调用super.clone(),而clone() 方法应该声明抛出CloneNotSupportedException 异常,即使实际上没有抛出异常,也要如此。

2.15 耦合检查查找类之间过度耦合的迹象,比如导入内容太多;在超类型或接口就已经够用的时候使用子类的类型;类中的字段、变量和返回类型过多等。

2.16 异常检查针对异常的检查:不应该声明该方法而抛出 ng.Exception 异常,不应当将异常用于流控制,不应该捕获 Throwable,等等。

2.17 日志检查查找 java.util.logging.Logger 的不当使用,包括非终状态(nonfinal)、非静态的记录器,以及在一个类中有多个记录器。

2.18 Open—Close检查检查文件或通讯方面,是否忘记Close的情况。

2.19 其它检查其它缺陷清单可参见:缺陷清单2.20 构建自己的规则集可以构建自己的规则集3 准备使用FindBugsFindBugs目前最新版本是0.9.3 。

文件名是:findbugs-0.9.3.zip(Windows)或findbugs-0.9.3.tar.gz(Unix)。

(下载网页)也可以到StarTeam取相应安装文件到本地,将它解压缩到所选的目录中,安装就完成了。

要运行 FindBugs,需要一个版本 1.4 或者更高的 Java Development Kit (JDK)。

安装完后,要增加两个环境变量:FINDBUGS_HOME,例如:FINDBUGS_HOME =D:\findbugs-0.9.3JAVA_HOME,例如:JAVA_HOME=D:\j2sdk1.4.2_06在 FindBugs 主目录中,有几个值得注意的目录。

文档在 doc 目录中,但是对我们来说更重要的是bin 目录,该包含了运行 FindBugs 的批处理文件。

4 运行 FindBugs像如今的大多数数工具一样,可以以多种方式运行 FindBugs——从 GUI、从命令行、使用Ant、作为 Eclipse 插件程序和使用 Maven。

这里将重点提及从 GUI 运行 FindBugs,简要提及使用Ant 和命令行运行。

4.1 FindBugs UI使用 FindBugs UI 很直观。

使用 FindBugs UI 的一个好处是对每一个检测到的问题提供了说明,图 1 显示了缺陷 Test的说明。

图一:项目Test的缺陷说明对每一种缺陷模式提供了类似的说明。

窗口下面的 Source code 选项卡很有用。

如果告诉FindBugs 在什么地方寻找代码,它就会在转换到相应的选项卡时突出显示有问题的那一行。

图一中的上部有根据不同类别来检查缺陷的选项,选项有(By Class、By Package、By Bug Type、By Bug Category)。

图二是【file】选项,主要功能有:创建新项目、打开/关闭项目、储存项目、储存Bugs信息、装载Buugs信息图三是【View】选项,这些选项很有用,可以切换不同模式的视图。

图四是【Settings】选项,是对检测的缺陷模式进行选择。

图五是【创建新项目】选项4.2 使用 FindBugs UI步骤第一次使用(1)依照图五【创建新项目】选项说明,先创建新项目,输入被检查的class或jar 路径、java源文件路径及程序运行依赖的class或jar路径(2)按【FingBugs】按钮开始检查(3)如果出现下图六的警告说明程序运行依赖的class或jar路径不对或依赖文件不完整,应依据警告信息完善。

(4)按【OK】后即进入上图一的错误信息显示(5)选择【file】储存新建的项目(6)选择【file】储存新扫描的Bugs信息(xml文件)非第一次使用(1)选择【file】装载上次新建的项目并运行(2)也可以选择【file】装载上次储存的Bugs信息来查看值得一提的还有在将 FinBugs 作为 Ant 任务或者在命令行中运行 FindBugs 时,选择 xml 作为 ouput 选项,可以将上一次运行的结果装载到 UI 中。

这样做是同时利用基于命令行的工具和 UI 工具的优点的一个很好的方法。

4.3 FindBugs 作为 Ant 任务如何在 Ant 编译脚本中使用 FindBugs?首先将 FindBugs Ant 任务拷贝到 Ant 的 lib 目录中,这样 Ant 就知道新的任务。

将 FIND_BUGS_HOME\lib\FindBugs-ant.jar 拷贝到ANT_HOME\lib。

相关文档
最新文档