预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共15页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

静态代码分析工具简介 什么是静态代码分析 静态代码分析是指无需运行被测代码,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性,找出代码隐藏的错误和缺陷,如参数不匹配,有歧义的嵌套语句,错误的递归,非法计算,可能出现的空指针引用等等。 在软件开发过程中,静态代码分析往往先于动态测试之前进行,同时也可以作为制定动态测试用例的参考。统计证明,在整个软件开发生命周期中,30%至70%的代码逻辑设计和编码缺陷是可以通过静态代码分析来发现和修复的。 但是,由于静态代码分析往往要求大量的时间消耗和相关知识的积累,因此对于软件开发团队来说,使用静态代码分析工具自动化执行代码检查和分析,能够极大地提高软件可靠性并节省软件开发和测试成本。 静态代码分析工具的优势 1.帮助程序开发人员自动执行静态代码分析,快速定位代码隐藏错误和缺陷。 2.帮助代码设计人员更专注于分析和解决代码设计缺陷。 3.显著减少在代码逐行检查上花费的时间,提高软件可靠性并节省软件开发和测试成本。 Java静态代码分析理论基础和主要技术 缺陷模式匹配:缺陷模式匹配事先从代码分析经验中收集足够多的共性缺陷模式,将待分析代码与已有的共性缺陷模式进行模式匹配,从而完成软件的安全分析。这种方式的优点是简单方便,但是要求内置足够多缺陷模式,且容易产生误报。 类型推断:类型推断技术是指通过对代码中运算对象类型进行推理,从而保证代码中每条语句都针对正确的类型执行。这种技术首先将预定义一套类型机制,包括类型等价、类型包含等推理规则,而后基于这一规则进行推理计算。类型推断可以检查代码中的类型错误,简单,高效,适合代码缺陷的快速检测。 模型检查:模型检验建立于有限状态自动机的概念基础之上,这一理论将被分析代码抽象为一个自动机系统,并且假设该系统是有限状态的、或者是可以通过抽象归结为有限状态。模型检验过程中,首先将被分析代码中的每条语句产生的影响抽象为一个有限状态自动机的一个状态,而后通过分析有限状态机从而达到代码分析的目的。模型检验主要适合检验程序并发等时序特性,但是对于数据值域数据类型等方面作用较弱。 数据流分析:数据流分析也是一种软件验证技术,这种技术通过收集代码中引用到的变量信息,从而分析变量在程序中的赋值、引用以及传递等情况。对数据流进行分析可以确定变量的定义以及在代码中被引用的情况,同时还能够检查代码数据流异常,如引用在前赋值在后、只赋值无引用等。数据流分析主要适合检验程序中的数据域特性。 现有主流Java静态分析工具 Checkstyle Checkstyle是SourceForge的开源项目,通过检查对代码编码格式,命名约定,Javadoc,类设计等方面进行代码规范和风格的检查,从而有效约束开发人员更好地遵循代码编写规范。 Checkstyle提供了支持大多数常见IDE的插件,文本主要使用Eclipse中的Checkstyle插件。如下图1所示,Checkstyle对代码进行编码风格检查,并将检查结果显示在Problems视图中。图中,代码编辑器中每个放大镜图标表示一个Checkstyle找到的代码缺陷。开发人员可通过在Problems视图中查看错误或警告详细信息。 图1.使用Checkstyle进行编码风格检查 此外,Checkstyle支持用户根据需求自定义代码检查规范,在下图2中的配置面板中,用户可以在已有检查规范如命名约定,Javadoc,块,类设计等方面的基础上添加或删除自定义检查规范。 图2.使用Checkstyle添加自定义代码检查规范 FindBugs FindBugs是由马里兰大学提供的一款开源Java静态代码分析工具。FindBugs通过检查类文件或JAR文件,将字节码与一组缺陷模式进行对比从而发现代码缺陷,完成静态代码分析。FindBugs既提供可视化UI界面,同时也可以作为Eclipse插件使用。文本将主要使用将FindBugs作为Eclipse插件。在安装成功后会在eclipse中增加FindBugsperspective,用户可以对指定Java类或JAR文件运行FindBugs,此时FindBugs会遍历指定文件,进行静态代码分析,并将代码分析结果显示在FindBugsperspective的bugsexplorer中,如下图3所示: 图3.使用FindBugs进行静态代码分析 图中BugExplorer中的灰色图标处为Bug类型,每种分类下红色图标表示bug较为严重,黄色的图标表示bug为警告程度。Propreties列出了bug的描述信息及修改方案。 此外,FindBugs还为用户提供定制BugPattern的功能。用户可以根据需求自定义FindBugs的代码检查条件,如下图4所示: 图4.使用FindBugs添加自定义代码检查规