您好,欢迎访问上海畔游网络科技有限公司官方网站!我司跻身上海网站建设公司百强之列,是专业的上海网页设计公司、上海网站制作公司,如需建站,敬请联系:021-60528088 热线电话:136-5168-1887

新闻资讯

上海畔游科技网络科技有限公司
首页 » 新闻资讯 » 行业新闻

简述静态代码分析及主流的Java 静态分析工具

发布日期:2018-09-11

 

什么是静态代码分析

静态代码分析是指无需运行被测代码,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性,找出代码隐藏的错误和缺陷,如参数不匹配,有歧义的嵌套语句,错误的递归,非法计算,可能出现的空指针引用等等。

在软件开发过程中,静态代码分析往往先于动态测试之前进行,同时也可以作为制定动态测试用例的参考。统计证明,在整个软件开发生命周期中,30%至70%的代码逻辑设计和编码缺陷是可以通过静态代码分析来发现和修复的。

但是,由于静态代码分析往往要求大量的时间消耗和相关知识的积累,因此对于软件开发团队来说,使用静态代码分析工具自动化执行代码检查和分析,能够极大地提高软件可靠性并节省软件开发和测试成本。

那在什么情况下需要进行静态程序分析呢?

静态程序分析往往作为一个多人参与的项目中代码审查过程的一个阶段,因编写完一部分代码之后就可以进行静态分析,分析过程不需要执行整个程序,这有助于在项目早期发现以下问题:变量声明了但未使用、变量类型不匹配、变量在使用前未定义、不可达代码、死循环、数组越界、内存泄漏等。

静态代码分析工具的优势

1.帮助程序开发人员自动执行静态代码分析,快速定位代码隐藏错误和缺陷。

2.帮助代码设计人员更专注于分析和解决代码设计缺陷。

3.显著减少在代码逐行检查上花费的时间,提高软件可靠性并节省软件开发和测试成本。

Java静态代码分析理论基础和主要技术

缺陷模式匹配:缺陷模式匹配事先从代码分析经验中收集足够多的共性缺陷模式,将待分析代码与已有的共性缺陷模式进行模式匹配,从而完成软件的安全分析。这种方式的优点是简单方便,但是要求内置足够多缺陷模式,且容易产生误报。

类型推断:

类型推断技术是指通过对代码中运算对象类型进行推理,从而保证代码中每条语句都针对正确的类型执行。这种技术首先将预定义一套类型机制,包括类型等价、类型包含等推理规则,而后基于这一规则进行推理计算。类型推断可以检查代码中的类型错误,简单,高效,适合代码缺陷的快速检测。

模型检查:

模型检验建立于有限状态自动机的概念基础之上,这一理论将被分析代码抽象为一个自动机系统,并且假设该系统是有限状态的、或者是可以通过抽象归结为有限状态。模型检验过程中,首先将被分析代码中的每条语句产生的影响抽象为一个有限状态自动机的一个状态,而后通过分析有限状态机从而达到代码分析的目的。模型检验主要适合检验程序并发等时序特性,但是对于数据值域数据类型等方面作用较弱。

数据流分析:

数据流分析也是一种软件验证技术,这种技术通过收集代码中引用到的变量信息,从而分析变量在程序中的赋值、引用以及传递等情况。对数据流进行分析可以确定变量的定义以及在代码中被引用的情况,同时还能够检查代码数据流异常,如引用在前赋值在后、只赋值无引用等。数据流分析主要适合检验程序中的数据域特性。

现有主流Java静态分析工具

Checkstyle

Checkstyle是SourceForge的开源项目,通过检查对代码编码格式,命名约定,Javadoc,类设计等方面进行代码规范和风格的检查,从而有效约束开发人员更好地遵循代码编写规范。

Checkstyle提供了支持大多数常见IDE的插件,文本主要使用Eclipse中的Checkstyle插件。如下图1所示,Checkstyle对代码进行编码风格检查,并将检查结果显示在Problems视图中。图中,代码编辑器中每个放大镜图标表示一个Checkstyle找到的代码缺陷。开发人员可通过在Problems视图中查看错误或警告详细信息。

FindBugs

FindBugs是由马里兰大学提供的一款开源Java静态代码分析工具。FindBugs通过检查类文件或JAR文件,将字节码与一组缺陷模式进行对比从而发现代码缺陷,完成静态代码分析。FindBugs既提供可视化UI界面,同时也可以作为Eclipse插件使用。文本将主要使用将FindBugs作为Eclipse插件。在安装成功后会在eclipse中增加FindBugsperspective,用户可以对指定Java类或JAR文件运行FindBugs,此时FindBugs会遍历指定文件,进行静态代码分析,并将代码分析结果显示在FindBugsperspective的bugsexplorer中。

PMD

PMD是由DARPA在SourceForge上发布的开源Java代码静态分析工具。PMD通过其内置的编码规则对Java代码进行静态检查,主要包括对潜在的bug,未使用的代码,重复的代码,循环体创建新对象等问题的检验。PMD提供了和多种JavaIDE的集成,例如Eclipse,IDEA,NetBean等。本文主要使用PMD以插件方式与Eclipse集成。如下图5所示:在ViolationsOverview视图中,按照代码缺陷严重性集中显示了PMD静态代码分析的结果。

Jtest

Jtest是Parasoft公司推出的一款针对Java语言的自动化代码优化和测试工具,Jtest的静态代码分析功能能够按照其内置的超过800条的Java编码规范自动检查并纠正这些隐蔽且难以修复的编码错误。同时,还支持用户自定义编码规则,帮助用户预防一些特殊用法的错误。Jtest提供了基于Eclipse的插件安装。Jtest支持开发人员对Java代码进行编码规范检查,并在Jtask窗口中集中显示检查结果。

代码签名证书是保护开发者的劳动成果,给自己开发的软件签名的证书,保证代码在签名之后不被恶意篡改。用户可通过对代码的数字签名来标识软件来源,辨别软件开发者的真实身份。数安时代(GDCA)的代码签名证书支持多种代码签名,已通过WEBTRUST国际认证。