0引言
在Java软件开发过程中,开发团队往往要花费大量的时间和精力发现并修改代码缺陷。Java 静态代码分析(static code analysis)工具能够在代码构建过程中帮助开发人员快速、有效的定位代码缺陷并及时纠正这些问题,从而极大地提高软件可靠性并节省软件开发和测试成 本。目前市场上的 Java 静态代码分析工具种类繁多且各有千秋,因此本文将分别介绍现有 4 种主流 Java 静态代码分析工具 (Checkstyle,FindBugs,PMD,Jtest),并从功能、特性等方面对它们进行分析和比较,希望能够帮助 Java 软件开发人员了解静态代码分析工具,并选择合适的工具应用到软件开发中。
1何为静态代码分析
静态代码分析是指无需运行被测代码,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性,找出代码隐藏的错误和缺陷,如参数不匹配,有歧义的嵌套语句,错误的递归,非法计算,可能出现的空指针引用等等。
在软件开发过程中,静态代码分析往往先于动态测试之前进行,同时也可以作为制定动态测试用例的参考。统计证明,在整个软件开发生命周期中,30% 至 70% 的代码逻辑设计和编码缺陷是可以通过静态代码分析来发现和修复的。
但是,由于静态代码分析往往要求大量的时间消耗和相关知识的积累,因此对于软件开发团队来说,使用静态代码分析工具自动化执行代码检查和分析,能够极大地提高软件可靠性并节省软件开发和测试成本。
2.静态分析优势
1. 帮助程序开发人员自动执行静态代码分析,快速定位代码隐藏错误和缺陷。
2. 帮助代码设计人员更专注于分析和解决代码设计缺陷。
3. 显著减少在代码逐行检查上花费的时间,提高软件可靠性并节省软件开发和测试成本。
3.静态分析主要技术
- 缺陷模式匹配:缺陷模式匹配事先从代码分析经验中收集足够多的共性缺陷模式,将待分析代码与已有的共性缺陷模式进行模式匹配,从而完成软件的安全分析。这种方式的优点是简单方便,但是要求内置足够多缺陷模式,且容易产生误报。
- 类型推断:类型推断技术是指通过对代码中运算对象类型进行推理,从而保证代码中每条语句都针对正确的类型执行。这种技术首先将预定义一套类型机制,包括类 型等价、类型包含等推理规则,而后基于这一规则进行推理计算。类型推断可以检查代码中的类型错误,简单,高效,适合代码缺陷的快速检测。
- 模型检查:模型检验建立于有限状态自动机的概念基础之上,这一理论将被分析代码抽象为一个自动机系统,并且假设该系统是有限状态的、或者是可以通过抽象归 结为有限状态。模型检验过程中,首先将被分析代码中的每条语句产生的影响抽象为一个有限状态自动机的一个状态,而后通过分析有限状态机从而达到代码分析的 目的。模型检验主要适合检验程序并发等时序特性,但是对于数据值域数据类型等方面作用较弱。
- 数据流分析:数据流分析也是一种软件验证技术,这种技术通过收集代码中引用到的变量信息,从而分析变量在程序中的赋值、引用以及传递等情况。对数据流进行 分析可以确定变量的定义以及在代码中被引用的情况,同时还能够检查代码数据流异常,如引用在前赋值在后、只赋值无引用等。数据流分析主要适合检验程序中的 数据域特性。
4.主流的静态分析工具——Java
Checkstyle FindBugs PMD Jtest sonarqube(原名sonar)
移动应用Java Android App静态分析:Infer(from Google)
http://8453383.iteye.com/blog/1428816 http://blog.chinaunix.net/uid-301743-id-5081405.html
5SonarQube和Jenkins的集成
Window下详见:http://blog.csdn.net/wuxuehong0306/article/details/50847893
Linux下:
5.1 Job方式
和普通Job配置一致,但将Sonar插件运行的脚本配置其中,即可完成与5.2一样的功能
5.2插件方式
Jenkins和Sonar集成的原理大概是这样的,Jenkins在其插件管理中心,下载sonar插件并进行配置,与sonar关联上。然后Jenkins在完成一次集成构建后,就会通知sonar进行源代码分析的操作。大家都知道Jenkins在构建的过程中是有从SVN下载源码这一步操作的,而sonar就是对Jenkins下载好的源码进行解析,将代码的质量等各种参数以图形化的页面展示给用户。
下面就来介绍Jenkins和Sonar如何集成和协调工作的。
插件安装
1、 在线安装:
选中Jenkins的系统管理->管理插件->可选插件栏,搜索SonarQube Plugin,点击直接安装即可。
不过这种在线安装一般行不通,因为要访问Google进行下载。
所以咱们采用离线安装方式。
2、 离线安装:
①. 首先下载SonarQube Plugin插件:https://wiki.jenkins-ci.org/display/JENKINS/SonarQube+plugin,下载完是sonar.hpi文件。
②. 选中Jenkins的系统管理->管理插件->高级->上传插件
将刚才下载的插件sonar.hpi,上传至Jenkins,并根据提示重启Jenkins即可。
重启后到 插件管理->已安装->查看SonarQube Plugin是否存在
出现上图插件,则表示安装成功。
SonarQube Plugin配置
找到系统管理->系统设置->SonarQube栏, 进行下列设置即可。
进行一次项目分析
选择一条可以成功构建的项目,修改其配置。
增加构建后操作步骤->SonarQube 即可。
添加配置后,项目的页面会出现SonarQube的标志
然后点击立即构建,构建完成后,Jenkins会通知sonar进行代码质量分析,登陆sonar查看
已经多出了刚才配置的项目,这样咱们就可以很方便的进行代码走查,分析代码质量了。咱们距离自动化环境又进了一步。
相关推荐
SonarQube和Jenkins是两种常用的工具,它们在持续集成流程中扮演着重要的角色。 SonarQube是一款强大的静态代码分析平台,用于代码质量管理。它不仅能够检测代码中的错误、漏洞和复杂性,还支持多种编程语言,如...
将SonarQube与Jenkins集成,可以实现自动化代码审查,确保在代码合并前就发现并修复问题,从而提高开发效率和代码质量。 首先,我们需要安装和配置SonarQube。下载最新稳定版的SonarQube服务器,根据操作系统选择...
本文将详细介绍 SonarQube 的安装、配置、Sonar Scanner 的安装、LDAP 集成和 Jenkins 集成的过程。 SonarQube 安装 SonarQube 的安装需要满足以下预置条件: 1. 已安装 JAVA 环境 2. 已安装 MySQL 数据库 首先...
Git+SonarQube+Jenkins环境配置流程详细讲解了如何组建由Git、SonarQube、Jenkins集成的代码开发系统;详细讲解了下载、搭建、配置等关键步骤,可根据文档内容进行安装配置。SonarQube 是一个开源的代码分析平台, ...
本文将详细介绍如何使用 GitLab、Harbor、SonarQube、Jenkins 和 Maven 实现 DevOps。DevOps 是一种软件开发方法,它将技术团队、运维、测试等团队紧密结合,实现自动生成化流程,从而提高软件开发效率和质量。在...
《Windows环境下搭建集成开发环境:Tomcat + Jenkins + SVN + SonarQube》 本文将详细介绍如何在Windows操作系统上搭建一套完整的集成开发环境,包括Tomcat服务器、Jenkins持续集成工具、Subversion(SVN)版本控制...
下载解压后放~/.jenkins/plugins/目录,具体的与jenkins集成可以参照文章https://blog.csdn.net/musuny/article/details/102700390
Jenkins+Maven+Windows+svn+sonarqube持续集成平台搭建图文指南
本教程将详细讲解如何使用Jenkins、SonarQube和MySQL进行集成安装和配置,特别是针对C和C++代码的检测。首先,我们需要理解这三个组件的基本功能。 Jenkins 是一个开源持续集成(CI)服务器,它允许开发者频繁地...
git+gerrit+jenkins+sonar持续集成环境大家资料,具体搭建步骤请参考本人博客。 里面还有一些插件,方便大家少走弯路
#### 七、与Jenkins集成 为了将SonarQube集成到Jenkins中,需要完成以下步骤: 1. **安装Jenkins插件**: - 在Jenkins中安装“SonarQube Scanner”插件。 2. **配置Jenkins任务**: - 创建一个新的Jenkins任务,...
k8s(二次开发)环境jenkins集成SonarQube,包含启动yaml文件,以及配置jenkins构建的job语法
文档中提到的集成工作流程,体现了现代软件开发中持续集成和持续部署的理念,强调了代码质量管理的重要性。通过这样的集成环境,开发者能够及时发现和修复代码问题,提高代码质量和团队开发效率。
本文将详细介绍如何使用Jenkins集成SonarQube和Sonar-Scanner,实现自动化部署测试并进行深度的代码质量管理。 一、Jenkins简介与安装 Jenkins是一款开源的持续集成(CI)工具,能够自动化各种任务,如构建、测试和...
【正文】 JaCoCo,全称Java Code Coverage Library,是一个专为Java开发的开源覆盖率工具。JaCoCo能够提供详尽的代码...结合Jenkins和SonarQube,我们可以实现持续集成和质量控制,进一步提升软件开发的效率和可靠性。
jenkins中使用例子: #定义sonar项目名称 sonar_url=bus-pub #邮件接收人 send1=111111111@qq.com send2=222222222@qq.com send3= #重新下载对应项目扫描报告 rm -f ${JOB_NAME}.pdf wget ...
### GitLab + Jenkins + SonarQube 敏捷开发持续集成环境 #### 一、敏捷宣言与持续集成 ...通过上述步骤,可以构建一个基于 GitLab、Jenkins 和 SonarQube 的敏捷开发持续集成环境,提高软件项目的开发效率和质量。
文档"sonarqube使用说明.docx"很可能详细阐述了如何配置和使用SonarQube,包括安装步骤、配置Maven插件、设置Jenkins集成以及解读分析报告等内容。它可能会涵盖以下知识点: 1. SonarQube的安装与启动:包括下载、...