4种代码扫描工具分析
静态代码分析工具清单

静态代码分析⼯具清单SAST,即静态应⽤程序安全测试,通过静态代码分析⼯具对源代码进⾏⾃动化检测,从⽽快速发现源代码中的安全缺陷。
本⽂是⼀个静态源代码分析⼯具清单,收集了⼀些免费开源的项⽬,可从检测效率、⽀持的编程语⾔、第三⽅⼯具集成等⼏因素来综合考虑如何选择SAST⼯具。
1、RIPS⼀款不错的静态源代码分析⼯具,主要⽤来挖掘PHP程序的漏洞。
项⽬地址:2、SonarQube⼀款企业级源代码静态分析⼯具,⽀持Java、PHP、C#、Python、Go等27种编程语⾔,⽽且能够集成在IDE、Jenkins、Git等服务。
项⽬地址:https://3、CodeQL⼀个免费开源的语义代码分析引擎和查询⼯具,以⼀种⾮常新颖的⽅式组织代码与元数据,可以通过像SQL查询⼀样检索代码,并发现其中的安全问题。
git项⽬地址:https:///github/codeql-cli-binaries4、Find Security Bugs⼀个⽤于 Java Web 应⽤程序安全审计的 SpotBugs 插件。
项⽬地址:https://find-sec-bugs.github.io/5、VCG(VisualCodeGrepper)⼀种适⽤于 C++、C#、VB、PHP、Java、PL/SQL 和 COBOL 的⾃动化代码安全审查⼯具。
项⽬地址:https:///projects/visualcodegrepp/6、FindBugs⼀款静态分析⼯具,检查程序潜在bug,在bug报告中快速定位到问题的代码上。
项⽬地址:7、Cobra⼀款源代码安全审计⼯具,⽀持检测多种开发语⾔源代码中的⼤部分显著的安全问题和漏洞。
项⽬地址:https:///WhaleShark-Team/cobra8、Hades⼀个静态代码脆弱性检测系统,⽀持java源码的审计项⽬地址:https:///zsdlove/Hades9、Bandit⼀个专门⽤于查找Python代码中常见安全问题的⼯具。
白盒测试分析代码质量和复杂度的关键工具

白盒测试分析代码质量和复杂度的关键工具当今软件开发行业日新月异,各种类型的软件层出不穷。
为了确保软件产品的质量和稳定性,对代码的测试变得尤为重要。
白盒测试作为一种重要的测试方式,通过检查和分析代码内部结构与逻辑,可以有效地评估代码的质量和复杂度。
在白盒测试中,有一些关键工具在分析代码质量和复杂度方面发挥着重要的作用。
一、静态代码分析工具静态代码分析工具是白盒测试中常用的工具之一。
它通过对源代码进行扫描和分析,可以自动检测出潜在的编码错误、代码风格不符合规范等问题。
静态代码分析工具可以对代码进行全面的检查,帮助开发人员及时发现并修复问题,提高代码的可读性和可维护性。
1. SonarQubeSonarQube是一种开源的静态代码分析工具,被广泛应用于软件开发领域。
它支持多种编程语言,包括Java、C++、C#等,并提供了一系列插件和规则集,可以检查代码的质量、复杂度以及安全性等方面的问题。
SonarQube可以为开发团队提供实时的代码质量报告,帮助开发人员及时发现和解决问题。
2. CheckstyleCheckstyle是一个针对Java代码的静态代码分析工具。
它可以检查代码是否符合一定的编码规范,如命名规范、代码格式等。
Checkstyle 提供了丰富的配置选项,可以根据开发团队的需求进行灵活的配置。
通过使用Checkstyle,开发人员可以统一代码的风格,提高代码的可读性和可维护性。
二、代码复杂度分析工具除了代码质量的分析,代码复杂度的评估也是白盒测试的重要方面。
代码复杂度分析工具通过对代码的结构和逻辑进行分析,可以衡量代码的复杂程度,并给出相应的指标。
代码复杂度分析工具可以帮助开发人员找出过于复杂的代码,优化代码结构,提高代码的可理解性和可维护性。
1. PMDPMD是一种开源工具,用于检测代码中的问题和潜在的错误。
它支持多种编程语言,如Java、C/C++、Ruby等。
PMD提供了多个内置规则集,可以检测代码的复杂度、重复代码、未使用的变量等问题。
VSCode的代码比较工具介绍

VSCode的代码比较工具介绍在软件开发过程中,版本控制是一个重要的环节。
而在进行版本控制时,常常需要进行代码的比较操作,以便了解代码的变化和差异。
VSCode作为一款强大的代码编辑器,提供了多种代码比较工具,方便开发者进行代码的比较和合并。
本文将介绍VSCode中几种常用的代码比较工具,并对其特点和使用方法进行说明。
1. 默认的内建比较工具VSCode自带了一个内建的代码比较工具,通过点击源代码文件右键,选择“比较”选项,即可在侧边栏中显示代码的差异。
这个内建的比较工具提供了基本的比较功能,能够显示两个文件之间的差异,并提供行级别的对比。
用户可以通过直观地查看差异来了解代码修改的内容。
2. Git集成的代码比较工具在进行版本控制时,开发者常常会使用Git进行代码管理。
VSCode与Git集成紧密,在默认情况下,VSCode会使用Git作为代码比较工具。
用户可以通过VSCode的源代码管理功能来比较不同版本的代码,在控制台中显示差异。
这种方法能够直接与版本控制工具结合,方便进行代码的比较和合并操作。
3. Beyond Compare插件除了默认的比较工具外,VSCode还支持各种插件扩展。
其中一个比较受欢迎的插件是Beyond Compare,它是一款功能强大的文件和目录比较工具。
通过安装Beyond Compare插件,用户可以将其作为VSCode的代码比较工具,实现高级的代码对比功能。
Beyond Compare 提供了可视化的比较界面,能够直观地展示代码差异,并支持高级的代码合并操作。
4. Diff插件另一个常用的VSCode插件是Diff,它提供了一种简单而直观的比较方式。
用户只需在VSCode中打开两个文件,然后在文件选项中选择“Diff”选项,即可在编辑器中显示两个文件的差异。
这个插件非常适合对比小段代码或者单个文件的差异,操作简单快捷。
5. 跨平台支持VSCode作为跨平台编辑器,几乎支持所有主流操作系统,包括Windows、MacOS和Linux。
代码质量评估的工具介绍

代码质量评估的工具介绍代码质量是衡量软件开发中代码的可维护性、可测试性、可读性、可扩展性等方面的一个重要指标。
为了评估代码的质量,开发人员可以使用各种代码质量评估工具来帮助他们自动化地检查代码,并提供有关代码潜在问题和改进的建议。
这篇文章将介绍一些常用的代码质量评估工具。
1. SonarQube:SonarQube是一个开源的代码质量管理平台,它提供了一套强大的静态代码分析工具,可以帮助开发人员识别潜在的技术债务和代码缺陷。
SonarQube支持多种编程语言,包括Java、C#、C++、JavaScript 等,并提供了一套丰富的规则集,以帮助开发人员检查代码的可读性、可维护性和安全性等方面的问题。
2. Checkstyle:Checkstyle是一个用于Java代码的静态代码分析工具,它可以强制执行一组编码规范,并帮助开发人员识别代码中的潜在问题。
Checkstyle支持各种代码规范,包括Sun编码规范、Google编码规范等,并提供了丰富的检查规则和自定义配置选项,以满足不同项目的需求。
3. PMD:PMD是一个用于静态代码分析的开源工具,它可以帮助开发人员查找代码中的潜在问题,并提供相应的修复建议。
PMD支持多种编程语言,包括Java、JavaScript、PL/SQL等,并提供了丰富的规则集,以帮助开发人员检查代码的可读性、性能、安全性等方面的问题。
4. FindBugs:FindBugs是一个用于静态代码分析的开源工具,它可以帮助开发人员查找Java代码中的潜在问题,并提供相应的修复建议。
FindBugs使用一组预定义的规则来检查代码,包括空指针引用、资源泄漏、不良代码实践等,并提供了可自定义的规则配置选项。
5. ESLint:ESLint是一个用于JavaScript代码的静态代码分析工具,它可以帮助开发人员查找代码中的潜在问题,并提供相应的修复建议。
ESLint支持各种代码规范,包括ES5、ES6等,并提供了丰富的规则集,以帮助开发人员检查代码的可读性、可维护性、安全性等方面的问题。
七种Python代码审查工具推荐

七种Python代码审查⼯具推荐⽬录1. DeepSource2. Codacy3. SonarQube4. Veracode5. Checkmarx6. Coverity7. CodeScene⼩结虽然Python语⾔可谓⽬前最为灵活的开发语⾔之⼀,但是开发⼈员往往会滥⽤其灵活性,甚⾄会违反相关的标准。
因此,Python代码也经常会出现如下常见质量问题:导⼊了⼀些未曾⽤到的模块函数在各种调⽤中缺少参数缺少适当的格式缩进在圆括号、⽅括号或⼤括号的前后缺少恰当的空格显然,上述问题不但会影响代码的可读性,⽽且会使得代码的审查⼯作变得更为复杂。
为此,我们需要通过诸如PyLint或Flake8之类的静态分析⼯具来解决此问题,并减少各种可能出现的误报现象。
与此同时,随着软件开发团队规模的扩⼤,许多开发⼈员经常需要使⽤静态代码分析⼯具(Static Code Analysis Tool),在开发的早期阶段,协助团队尽早地识别出各种代码级别的错误,以及反模式(anti-patterns)上的漏洞。
总体⽽⾔,静态代码分析⼯具会在每次提交或提取请求时,分析⽬标程序代码,并在软件产品的实际部署与发布之前,发现程序代码在质量、安全性、以及样式等各类问题。
在本⽂中,我将向您介绍适合开发者的七种最佳Python代码审查⼯具,以⽅便您根据实际开发项⽬做出选择。
1. DeepSourceDeepSource针对各种通⽤编程语⾔(例如Python、Javascript、Golang等),提供了静态代码分析。
在实际使⽤中,DeepSource会⽣成⼀个能够被嵌⼊在存储库中的配置⽂件,以便对代码进⾏持续分析。
由于提供了⾃定义的功能,因此我们可以使⽤DeepSource来轻松地开展,针对Python代码的静态分析。
DeepSource的主要功能包括:可以通过单个⽂件配置,来进⾏持续分析⽀持诸如Black和AutoPep8之类的风格代码排版⼯具能够对每个拉取请求进⾏质量检查提供对于常见问题的⾃动修复可嵌⼊到Travis CI之类的CI/CD管道中,以提⾼测试覆盖率与其他各种静态代码分析⼯具相⽐,DeepSource提供了较低的误报率和解决⽤时。
内存泄漏的检测定位和解决经验总结

内存泄漏的检测定位和解决经验总结内存泄漏是指在程序运行过程中,分配的内存一直没有被释放,导致内存的使用量越来越大,最终耗尽系统资源,造成程序崩溃。
内存泄漏是一种常见的程序缺陷,需要及时发现和解决。
一、检测内存泄漏的方法有以下几种:1. 静态代码检查:通过静态代码分析工具进行检查,工具可以扫描代码中的内存分配和释放情况,并发现潜在的内存泄漏问题。
常用的静态代码检查工具包括Coverity、PMD等。
2. 动态代码检查:通过运行时检查工具对程序进行监控,记录内存分配和释放的情况,检查是否有未释放的内存。
常用的动态代码检查工具包括Valgrind、Dr.Memory等。
3. 内存使用分析工具:通过监控程序的内存使用情况,包括内存的分配与释放,内存占用量等信息,来判断是否存在内存泄漏。
常用的内存使用分析工具有Google Performance Tools、Eclipse Memory Analyzer 等。
二、定位内存泄漏的方法有以下几种:1.添加日志:在程序中添加日志跟踪内存的分配与释放情况,当发现内存没有被释放时,通过日志定位问题的位置。
可以通过添加打印语句或者使用专门的日志工具来完成日志记录。
2. 使用内存调试工具:内存调试工具可以跟踪程序中的内存分配和释放情况,并将未被释放的内存标记出来。
通过分析工具提供的报告,可以定位内存泄漏的位置。
常用的内存调试工具有Valgrind、Dr.Memory等。
3. 内存堆栈分析:当程序出现内存泄漏时,通过分析内存堆栈可以得到导致内存泄漏的代码路径。
可以使用工具来进行内存堆栈分析,例如Eclipse Memory Analyzer。
三、解决内存泄漏的方法有以下几种:1. 显式释放内存:在程序中显式地调用释放内存的函数,确保内存被正确地释放。
例如,在使用动态内存分配函数malloc或new分配内存后,必须使用free或delete释放内存。
2. 自动垃圾回收:使用编程语言或框架提供的垃圾回收机制,自动释放不再使用的内存。
国内外主流静态分析类工具汇总

国内外主流静态分析类工具汇总静态分析是一种在代码编译或运行之前检测和识别代码缺陷、漏洞和错误的方法。
它可以帮助开发人员减少代码中的错误,并提高软件的质量和安全性。
以下是一些国内外主流的静态分析类工具:1. SonarQube:SonarQube是一个用于源代码的连续质量控制平台,它通过静态代码分析来检测代码中的错误、坏味道和安全漏洞。
SonarQube支持多种常用编程语言,并提供了丰富的插件和指标来帮助开发人员改进代码质量。
2. PVS-Studio:PVS-Studio是一个用于C、C++、C#和Java的静态代码分析工具,它可以帮助开发人员找出代码中的潜在错误、漏洞和低效率问题。
PVS-Studio可以检测常见的编码错误,如空指针解引用和无效的类型转换。
3. FindBugs:FindBugs是一个用于Java代码的静态分析工具,它可以检测代码中的错误和潜在问题,如空指针引用、资源未关闭和不良的程序实践。
FindBugs使用一些静态分析技术来分析字节码,并提供了一组规则来检测常见的编程错误。
4. Checkstyle:Checkstyle是一个用于Java代码的静态代码分析工具,它通过检查代码中的编码风格问题来帮助开发人员提高代码质量。
Checkstyle可以检测不良的编程风格,如缩进错误、变量命名不规范和不当使用注释等。
5. ESLint:ESLint是一个用于JavaScript代码的静态代码分析工具,它可以帮助开发人员发现和修复代码中的错误和编码问题。
ESLint支持自定义规则和插件,并提供了一些默认规则来检测常见的编码错误,如未使用的变量和不良的语法习惯。
6. Coverity:Coverity是一种用于C、C++、Java和C#代码的静态代码分析工具,它可以帮助开发人员识别和修复代码中的错误和潜在问题。
Coverity使用一些静态分析技术来检测内存泄漏、空指针引用和逻辑错误等。
7. Clang Static Analyzer:Clang Static Analyzer是一个用于C、C++和Objective-C代码的静态分析工具,它可以帮助开发人员发现代码中的错误和潜在问题。
恶意代码防范与排查

恶意代码防范与排查恶意代码是指具有破坏性或非法目的的计算机程序或脚本,它们可以对用户信息、系统安全和网络稳定造成严重威胁。
为了确保计算机和网络的安全,我们需要采取一系列的措施来防范和排查恶意代码。
本文将探讨恶意代码的种类、防范策略以及排查工具的使用。
一、恶意代码的种类恶意代码的种类多种多样,每种恶意代码都有其特定的功能和攻击手段。
以下是一些常见的恶意代码类型:1. 病毒:病毒是一种能够通过复制自身来感染其他文件或程序的恶意代码。
它可以破坏文件、系统、甚至整个网络。
2. 木马:木马是一种隐藏在正常程序中的恶意代码,它可以在用户不知情的情况下获取用户的敏感信息、控制用户的计算机或者安装其他恶意软件。
3. 蠕虫:蠕虫是一种能够自我复制并通过网络传播的恶意代码。
它可以快速传播,并根据自身的设计目标执行特定的攻击。
4. 特洛伊木马:特洛伊木马是一类具有隐藏功能的恶意代码,它通常包装成吸引人的程序或文件,但实际上会在用户不知情的情况下执行破坏性的操作。
二、恶意代码的防范策略为了防止恶意代码的感染和传播,我们可以采取以下防范策略:1. 安装防病毒软件:选择信誉良好的安全软件,并保持其及时更新。
这样可以及时发现并清除计算机中的病毒和恶意软件。
2. 慎重打开附件和链接:不要随意打开来自陌生人或者不可信来源的附件和链接,这很可能是恶意代码的传播途径之一。
3. 更新系统和软件:及时安装系统和软件的更新补丁,这些补丁通常会修复已知的漏洞,防止恶意代码利用这些漏洞进行攻击。
4. 配置防火墙和安全策略:通过配置防火墙和安全策略,可以限制程序和数据的访问权限,减少受到恶意代码攻击的风险。
5. 定期备份数据:定期进行数据备份,可以在恶意代码感染或系统崩溃时恢复数据,减少数据损失。
三、恶意代码的排查工具除了采取防范策略,我们还可以借助专业的恶意代码排查工具来检测和清除已感染的计算机。
1. 杀毒软件:杀毒软件是一种常用的恶意代码排查工具,它可以扫描计算机中的文件和系统,检测是否存在恶意代码,并提供清除和修复功能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
简介本文首先介绍了静态代码分析的基本概念及主要技术,随后分别介绍了现有4 种主流Java 静态代码分析工具(Checkstyle,FindBugs,PMD,Jtest),最后从功能、特性等方面对它们进行分析和比较,希望能够帮助Java 软件开发人员了解静态代码分析工具,并选择合适的工具应用到软件开发中。
引言在Java 软件开发过程中,开发团队往往要花费大量的时间和精力发现并修改代码缺陷。
Java 静态代码分析(static code analysis)工具能够在代码构建过程中帮助开发人员快速、有效的定位代码缺陷并及时纠正这些问题,从而极大地提高软件可靠性并节省软件开发和测试成本。
目前市场上的Java 静态代码分析工具种类繁多且各有千秋,因此本文将分别介绍现有4 种主流Java 静态代码分析工具(Checkstyle,FindBugs,PMD,Jtest),并从功能、特性等方面对它们进行分析和比较,希望能够帮助Java 软件开发人员了解静态代码分析工具,并选择合适的工具应用到软件开发中。
静态代码分析工具简介什么是静态代码分析静态代码分析是指无需运行被测代码,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性,找出代码隐藏的错误和缺陷,如参数不匹配,有歧义的嵌套语句,错误的递归,非法计算,可能出现的空指针引用等等。
在软件开发过程中,静态代码分析往往先于动态测试之前进行,同时也可以作为制定动态测试用例的参考。
统计证明,在整个软件开发生命周期中,30% 至70% 的代码逻辑设计和编码缺陷是可以通过静态代码分析来发现和修复的。
但是,由于静态代码分析往往要求大量的时间消耗和相关知识的积累,因此对于软件开发团队来说,使用静态代码分析工具自动化执行代码检查和分析,能够极大地提高软件可靠性并节省软件开发和测试成本。
静态代码分析工具的优势1. 帮助程序开发人员自动执行静态代码分析,快速定位代码隐藏错误和缺陷。
2. 帮助代码设计人员更专注于分析和解决代码设计缺陷。
3. 显著减少在代码逐行检查上花费的时间,提高软件可靠性并节省软件开发和测试成本。
Java 静态代码分析理论基础和主要技术•缺陷模式匹配:缺陷模式匹配事先从代码分析经验中收集足够多的共性缺陷模式,将待分析代码与已有的共性缺陷模式进行模式匹配,从而完成软件的安全分析。
这种方式的优点是简单方便,但是要求内置足够多缺陷模式,且容易产生误报。
•类型推断:类型推断技术是指通过对代码中运算对象类型进行推理,从而保证代码中每条语句都针对正确的类型执行。
这种技术首先将预定义一套类型机制,包括类型等价、类型包含等推理规则,而后基于这一规则进行推理计算。
类型推断可以检查代码中的类型错误,简单,高效,适合代码缺陷的快速检测。
•模型检查:模型检验建立于有限状态自动机的概念基础之上,这一理论将被分析代码抽象为一个自动机系统,并且假设该系统是有限状态的、或者是可以通过抽象归结为有限状态。
模型检验过程中,首先将被分析代码中的每条语句产生的影响抽象为一个有限状态自动机的一个状态,而后通过分析有限状态机从而达到代码分析的目的。
模型检验主要适合检验程序并发等时序特性,但是对于数据值域数据类型等方面作用较弱。
•数据流分析:数据流分析也是一种软件验证技术,这种技术通过收集代码中引用到的变量信息,从而分析变量在程序中的赋值、引用以及传递等情况。
对数据流进行分析可以确定变量的定义以及在代码中被引用的情况,同时还能够检查代码数据流异常,如引用在前赋值在后、只赋值无引用等。
数据流分析主要适合检验程序中的数据域特性。
现有主流Java 静态分析工具CheckstyleCheckstyle 是SourceForge 的开源项目,通过检查对代码编码格式,命名约定,Javadoc,类设计等方面进行代码规范和风格的检查,从而有效约束开发人员更好地遵循代码编写规范。
Checkstyle 提供了支持大多数常见IDE 的插件,文本主要使用Eclipse 中的Checkstyle 插件。
如下图1 所示,Checkstyle 对代码进行编码风格检查,并将检查结果显示在Problems 视图中。
图中,代码编辑器中每个放大镜图标表示一个Checkstyle 找到的代码缺陷。
开发人员可通过在Problems 视图中查看错误或警告详细信息。
图1. 使用Checkstyle 进行编码风格检查此外,Checkstyle 支持用户根据需求自定义代码检查规范,在下图2 中的配置面板中,用户可以在已有检查规范如命名约定,Javadoc,块,类设计等方面的基础上添加或删除自定义检查规范。
图2. 使用Checkstyle 添加自定义代码检查规范FindBugsFindBugs 是由马里兰大学提供的一款开源Java 静态代码分析工具。
FindBugs 通过检查类文件或JAR 文件,将字节码与一组缺陷模式进行对比从而发现代码缺陷,完成静态代码分析。
FindBugs 既提供可视化UI 界面,同时也可以作为Eclipse 插件使用。
文本将主要使用将FindBugs 作为Eclipse 插件。
在安装成功后会在eclipse 中增加FindBugs perspective,用户可以对指定Java 类或JAR 文件运行FindBugs,此时FindBugs 会遍历指定文件,进行静态代码分析,并将代码分析结果显示在FindBugs perspective 的bugs explorer 中,如下图3 所示:图3. 使用FindBugs 进行静态代码分析图中Bug Explorer 中的灰色图标处为Bug 类型,每种分类下红色图标表示bug 较为严重,黄色的图标表示bug 为警告程度。
Propreties 列出了bug 的描述信息及修改方案。
此外,FindBugs 还为用户提供定制Bug Pattern 的功能。
用户可以根据需求自定义FindBugs 的代码检查条件,如下图4 所示:图4. 使用FindBugs 添加自定义代码检查规范PMDPMD 是由DARPA 在SourceForge 上发布的开源Java 代码静态分析工具。
PMD 通过其内置的编码规则对Java 代码进行静态检查,主要包括对潜在的bug,未使用的代码,重复的代码,循环体创建新对象等问题的检验。
PMD 提供了和多种Java IDE 的集成,例如Eclipse,IDEA,NetBean 等。
本文主要使用PMD 以插件方式与Eclipse 集成。
如下图5 所示:在ViolationsOverview 视图中,按照代码缺陷严重性集中显示了PMD 静态代码分析的结果。
图5. 使用PMD 进行静态代码分析PMD 同样也支持开发人员对代码检查规范进行自定义配置。
开发人员可以在下图6 中的面板中添加、删除、导入、导出代码检查规范。
图6. 使用PMD 添加自定义代码检查规范JtestJtest 是Parasoft 公司推出的一款针对Java 语言的自动化代码优化和测试工具,Jtest 的静态代码分析功能能够按照其内置的超过800 条的Java 编码规范自动检查并纠正这些隐蔽且难以修复的编码错误。
同时,还支持用户自定义编码规则,帮助用户预防一些特殊用法的错误。
Jtest 提供了基于Eclipse 的插件安装。
Jtest 支持开发人员对Java 代码进行编码规范检查,并在Jtask 窗口中集中显示检查结果,如下图7 所示:图7. 使用Jtest 进行静态代码分析同时,Jtest 还提供了对用户定制代码检查配置甚至自定义编码规则的支持,这一功能使得开发人员可以基于不同场景定制所需要的编码规范,如图8 所示:图8. 使用Jtest 添加自定义代码检查规范Java 静态分析工具对比本章节将从以下几个方面对上述Java 静态分析工具进行比较:应用技术及分析对象下表1 列出了不同工具的分析对象及应用技术对比:表1. 不同工具的分析对象及应用技术对比Java 静态分析工具分析对象应用技术Checkstyle Java 源文件缺陷模式匹配FindBugs 字节码缺陷模式匹配;数据流分析PMD Java 源代码缺陷模式匹配Jtest Java 源代码缺陷模式匹配;数据流分析内置编程规范Checkstyle:•Javadoc 注释:检查类及方法的Javadoc 注释•命名约定:检查命名是否符合命名规范•标题:检查文件是否以某些行开头•Import 语句:检查Import 语句是否符合定义规范•代码块大小,即检查类、方法等代码块的行数•空白:检查空白符,如tab,回车符等•修饰符:修饰符号的检查,如修饰符的定义顺序•块:检查是否有空块或无效块•代码问题:检查重复代码,条件判断,魔数等问题•类设计:检查类的定义是否符合规范,如构造函数的定义等问题FindBugs:•Bad practice 坏的实践:常见代码错误,用于静态代码检查时进行缺陷模式匹配•Correctness 可能导致错误的代码,如空指针引用等•国际化相关问题:如错误的字符串转换•可能受到的恶意攻击,如访问权限修饰符的定义等•多线程的正确性:如多线程编程时常见的同步,线程调度问题。
•运行时性能问题:如由变量定义,方法调用导致的代码低效问题。
PMD:•可能的Bugs:检查潜在代码错误,如空try/catch/finally/switch 语句•未使用代码(Dead code):检查未使用的变量,参数,方法•复杂的表达式:检查不必要的if 语句,可被while 替代的for 循环•重复的代码:检查重复的代码•循环体创建新对象:检查在循环体内实例化新对象•资源关闭:检查Connect,Result,Statement 等资源使用之后是否被关闭掉Jtest•可能的错误:如内存破坏、内存泄露、指针错误、库错误、逻辑错误和算法错误等•未使用代码:检查未使用的变量,参数,方法•初始化错误:内存分配错误、变量初始化错误、变量定义冲突•命名约定:检查命名是否符合命名规范•Javadoc 注释:检查类及方法的Javadoc 注释•线程和同步:检验多线程编程时常见的同步,线程调度问题•国际化问题:•垃圾回收:检查变量及JDBC 资源是否存在内存泄露隐患错误检查能力为比较上述Java 静态分析工具的代码缺陷检测能力,本文将使用一段示例代码进行试验,示例代码中将涵盖我们开发中的几类常见错误,如引用操作、对象操作、表达式复杂化、数组使用、未使用变量或代码段、资源回收、方法调用及代码设计几个方面。
最后本文将分别记录在默认检查规范设置下,不同工具对该示例代码的分析结果。
以下为示例代码Test.java。
其中,代码的注释部分列举了代码中可能存在的缺陷。