在持续集成中使用 Rational BuildForge 和 Rational Software Analyzer 集成来提升代码质量
 

2010-02-22 作者:孙志刚 来源:ibm

 
本文内容包括:
本文从实践出发介绍如何在项目开发过程中将 Rational BuildForge 和Rational Software Analyzer 纳入 CI 来进行代码自动化分析,进而帮助开发者尽早发现缺陷提升代码质量。文章详细介绍了如何使用 RSAR CLI,配置 RSAR 与 BuildForge 的集成来进行周期性代码自动分析以及对代码分析报告的解读。本文对计划在项目开发过程中使用 BuildForge 和 RSAR 集成来进行代码分析的读者是一个良好的参考。

持续集成简介

持续集成(Continuous Integration,CI)是为持续进行软件自动化构建,帮助开发者尽早发现和解决缺陷从而进行高质量交付的一套开发原则和实践。持续集成不仅仅是指软件构建的过程,更是一个旨在提升软件质量的流程自动化框架,例如自动化的版本构建,单元测试,代码静态分析,版本部署及验证等。在如今敏捷方法大行其道的软件开发市场,阶段性交付已被业界所认可,在这种模式下持续集成可以发挥它最大的产能。

自动化是持续集成所强调的重点所在,自动化也是符合软件开发的趋势,通过计算机将人工劳动力从重复低级的工作中解脱出来投入到更智慧的工作中去,从而提高效率降低错误风险。提升软件质量是持续集成的终极目标,持续集成本身并没有限定通过何种方式来提升软件质量,它自身也是一个开放性的框架,任何对提升软件质量好的实践均有可能纳入其中,但是它确实建议了很多也被业界公认的实践,例如将单元测试,代码分析纳入发布流程等。

常言道:工欲善其事,必先利其器。企业在实施持续集成之前首先需要选择合适的工具来支撑,目前业界常用的 CI 工具包括 Apache's Continuum、Cruise Control 和 IBM 的 BuildForge 等。

本文我们将着重介绍如何在持续集成中使用 Rational BuildForge 和 Rational Software Analyzer 集成来自动化代码分析,并将此纳入版本交付流程。

Rational BuildForge 产品概述

项目构建

在介绍 BuildForge 之前先让我们了解下项目构建,项目构建是软件整个生命周期一个非常重要的环节,它直接决定了开发工作是如何最终交付给最终用户的。传统上项目构建是指将项目代码进行编译、打包最终形成可交付程序包的过程。然而在软件开发理论日益成熟的今天,项目构建已远远超出了前述过程。为了尽可能减少缺陷提高软件质量,在项目构建过程中往往会伴随一系列的过程来帮助开发者尽早发现和修复代码缺陷,从而降低软件维护成本。典型这些辅助过程包括代码静态分析、单元测试等。

如今敏捷开发方法已被 IT 业界所认可和接受,在敏捷开发中项目一般会分为若干个 sprint 来开发进行阶段性交付,每次交付都是一次构建过程。由于敏捷项目的这种阶段性交付特点,更凸显自动化构建的重要性,所谓自动化构建就是构建过程能够自动完成,不需人工干预。自动化构建不仅可以保证构建流程的可重复性,更能规范从开发到交付的流程。本文着重介绍的 Rational BuildForge 就是一款提供自动化构建能力的优秀工具。

Rational BuildForge 产品

IBM® Rational® BuildForge® ( 以下简称 BuildForge) 是专门用于构建和发布流程管理的软件,它通过提供自动化构建和发布管理来加速软件系统的交付。BuildForge 不仅仅是一个构建工具更是一个发布流程管理工具,一个自动化从开发到交付整个软件开发生命周期的框架。通过集成多种工具,BuildForge 可以将复杂的交付流程进行分解进而标准化、自动化,从而提供一个可重复的、可靠的应用开发生命周期流程。

BuildForge 产品提供有标准版,企业版,企业增强版三个版本,分别用于不同规模的企业环境。

BuildForge 自动化构建能力

BuildForge 提供了强大的项目构建能力,在 BuildForge 中构建过程用项目来阐述,项目也是 BuildForge 的最小可执行单元。一个项目就是一组流程步骤的组合,一个无论多么复杂的流程也可以分解以后通过组合流程步骤来表示。每个项目包含若干有序或并行的执行步骤,每个步骤都是通过调用特定的命令完成特定的逻辑或功能,执行步骤中调用的命令可以是系统 shell 命令或各种应用程序提供的命令比如 ant 命令等。每个流程步骤均可根据步骤执行结果来定义下一步动作,比如步骤失败则停止整个项目执行并发送通知,成功则执行下一步骤等。

在 BuildForge 中对一个项目或步骤执行的环境抽象为命令、环境变量、服务器等。命令即是步骤所要完成的目标,比如从 CVS 检出代码。环境变量是将一个敏感或常变信息抽象表示,这样在步骤定义中引用这些环境变量,将来这些信息有变更,只需简单修改下环境变量就可以了。服务器同样如此,项目流程步骤中的命令可以在分布式计算机上执行不一定是在 BuildForge 所在计算机,服务器就是为了达到这个目的,在项目或步骤定义时并不用直接指定在哪个服务器上执行,可以通过指定属性由 BuildForge 从所有可用服务器中进行选择。这些抽象有效地提高了流程的可维护性,在变更发生时极大大地降低开发者工作量。

在 BuildForge 中创建构建项目非常简单,登录 BuildForge 控制台然后选择项目 --> 添加项目按钮,填充必要的项目信息如项目名字,选择器、环境、失败通知等,完成之后系统会自动跳转到填充项目步骤界面,输入步骤名字和步骤执行命令等,开发者可以继续添加其他的项目步骤直至完成构建项目。

笔者所在项目使用 BuildForge 来进行管理产品从开发到版本交付的端到端发布流程管理,其中的构建流程定义如下:

(1) 初始化构建环境,从 CVS 检出最新的 ant 脚本;

(2) 从 CVS 检出项目代码;

(3) 调用 ant 脚本完成项目代码的编译;

(4) 对代码进行静态分析

(5) 对 java 代码运行单元测试;

(6) 对 SQL 脚本运行单元测试;

(7) 将编译后的代码进行打包;

(8) 自动部署产品;

(9) 部署验证;

(10) 发送构建通知;

典型的 BuildForge 构建项目配置:

图 1. BuildForge 构建项目配置
图 1. BuildForge 构建项目配置

查看图 1 大图

不难看出上述项目构建过程表示很好的遵循了持续集成的思想,大部分步骤都是通过调用 ant 命令来完成,自动化的完成了项目构建并通过代码静态分析,单元测试的执行从而尽早发现代码缺陷降低维护成本。

Rational Software Analyzer 产品概述

IBM® Rational® Software Analyzer( 以下简称 RSAR) 是一款使用简单且功能强大的软件分析工具,用于在软件开发生命周期内进行代码静态分析,可以帮助开发者在软件开发早期进行代码审查,缺陷识别,在开发早期实施代码质量策略从而降低缺陷修复成本,提高软件可维护性,提升软件质量。

RSAR 可以给开发者提供完整的代码分析解决方案,包括代码审查,代码结构识别,数据流分析以及软件度量等。它还提供了丰富且友好的分析报告,开发者可以通过代码分析报告多角度了解代码质量。因此 RSAR 是企业在持续集成中用于代码分析的理想工具。

RSAR 产品提供有开发版、企业版两种版本,分别面向不同用户。开发版主要是面向中小用户,代码分析工作主要通过手工在 GUI 来进行,没有自动化需求。企业版和开发版在代码分析方面功能是相同的,只是企业版提供了自动化功能,用户除了通过 GUI 方式手工进行代码分析外还可以通过命令行接口来进行自动化代码从而提升效率减少人为干预。

由于本文重点介绍 RSAR 在持续集成中的应用,所以我们主要针对 RSAR 企业版进行介绍,下文中 RSAR 均指企业版。下面我们首先简单了解 RSAR GUI 的工作方式,之后介绍 RSAR 命令行接口的一些知识。

RSAR GUI 手工代码分析

这里首先了解下如何使用 RSAR 用户界面进行代码分析。RSAR 通过规则匹配来进行代码分析,它内嵌了丰富的检查规则,同时对规则定制提供了良好的支持,开发者可以根据自己实际情况来对规则进行启用或禁用。

安装完成后运行 RSAR,选择合适的工作空间进入 RSAR 工作台,然后在项目或源代码上右击在弹出菜单中选择 Software Analyzer-->Software Analyzer Configurations 打开代码分析配置对话框。在运行代码分析前,开发者需要在配置对话框中指定代码分析的范围:工作空间、工作集、项目。然后在规则页面选择代码分析的规则。

这里选择在项目级别进行代码分析,不对规则进行定制采用默认规则在配置对话框中直接点击 Analyze 按钮启动代码分析,代码分析启动之后会在工作台显示代码分析结果视图,该视图里详细列出了启用规则在代码分析范围上所发现的代码缺陷,开发者可以通过单击缺陷直接导航到缺陷所在的代码行进行修复。

图 2. 定制 RSAR 代码分析规则
图 2. 定制 RSAR 代码分析规则

图 3. RSAR 代码分析结果
图 3. RSAR 代码分析结果

查看图 3 大图

RSAR 企业版中的命令行接口

RSAR 企业版对命令行接口 (Command Line Interface, 简称 CLI) 操作提供了良好的支持,开发者可以通过命令的形式来实现代码分析,这也为 RSAR 用于软件开发持续集成提供了保证。企业可以将自动化的代码分析纳入持续集成流程,从而在开发早期开始实施软件质量策略。在通过命令行来进行代码分析时规则文件必须通过 GUI 导出。

为更好的理解 RSAR CLI 使用,这里举个典型的 RSAR 命令行应用:

"c:\Program Files\IBM\RSAREE\eclipse.exe"
   -nosplash -application com.ibm.rsaz.analysis.commandline.AnalyzeApplication 
   -data C:\dsw\dbConnReport -directory C:\dsw\dbConnReport/src 
   -rulefile C:\buildforgeprojects\ruleset.dat 
   -reportDirectory "C:\Program Files\IBM\RSAREE\tomcat\webapps\ROOT\rsar\reports" 
   -projectname dbConnReport 

命令中第一个参数是 RSAR 安装后的 eclipse 可执行程序 ; application 参数指定应用程序的类型这个参数对于 RSAR 是固定的字符串;data 参数指定 RSAR 的工作空间 ; directory 参数指定要分析的代码路径 ;rulefile 参数指定用于代码分析的规则文件,可以从 RSAR GUI 导出;reportDirectory 参数指定代码分析报告的生成路径;projectname 参数用于在分析报告显示。

配置 BuildForge 与 RSAR 集成

集成先决条件

首先需要安装这两款产品,BuildForge 分管理控制台和代理两个安装程序,代理程序用于分布式执行作业。RSAR 和 BuildForge 管理控制台可以安装在同一台计算机上或者是分布式计算机上,只要安装了 RSAR 的计算机上安装有 BuildForge 代理就可以实现集成。这里对这两款产品的安装不做过多叙述,请参考具体的产品安装指南操作,一点提示是在安装完 BuildForge 管理控制台之后可能需要手工执行 %BuildForge%/db2/db2_post_install.bat 文件以完成 BuildForge 数据库的配置。本文以 RSAR 和 BuildForge 管理控制台,BuildForge 代理均安装在本地为例来讲解它们的集成过程。

RSAR 与 BuildForge 集成准备

在配置 BuildForge 和 RSAR 集成之前,首先需要了解 BuildForge 与外界应用程序集成的机制,这里介绍几个 BuildForge 与外界应用程序集成的必备概念:

适配器:是 BuildForge 与外界应用程序集成的接口,BuildForge 项目通过适配器来与外界程序交换信息以实现特定的功能目标。适配器需要 BuildForge 环境变量的支撑来执行外界应用程序命令,同时适配器必须通过点命令 (.source, .defect, .test, or .pack.) 或者适配器链接来添加到 BuildForge 项目中。RSAR 代码分析是 .source 类型适配器。

适配器模板:适配器是适配器模板实例,在创建适配器时必须关联到一个适配器模板。适配器模板本质是一个由外界应用程序提供的 XML 格式文件,其中包含了应用程序运行所必须的环境参数、命令以及报告格式定义等。RSAR 提供了两种模板文件用于与 BuildForge 集成,位于 %RSAREE%/interface 目录下:RSAR_StaticDirs.xml 用于在配置好的静态代码路径上运行代码分析,RSAR_UserDirScript.xml 用于在通过用户脚本来确定代码路径上运行代码分析,相对前者是动态指定代码路径。

环境变量:在 BuildForge 中可以将一些环境,版本等相关的属性定义为环境变量并在 BuildForge 项目中引用他们,这样即使在后续过程中属性值有变动也不需要修改 BuildForge 项目定义,只需要简单修改环境变量即可。在 RSAR 模板文件中以 <env> 定义的元素均需要在 BuildForge 中以环境变量的形式加以定义。在项目运行过程中,系统会用环境变量来替换模板文件中的相应元素。

服务器:在 BuildForge 中服务器资源是一台可以运行作业的计算机。任何计算机只要安装了 BuildForge 代理就可以作为 BuildForge 中的服务器资源使用,当然前提条件是 BuildForge 所在机器有权限访问这台分布式的计算机。BuildForge 项目实际并不直接与特定的服务器资源关联,而是通过 BuildForge 选择器来选择可用的服务器资源来运行项目。

选择器:选择器是将 BuildForge 中的服务器资源根据属性定义了划分,这样 BuildForge 项目不需要直接和特定服务器关联,而是通过选择器来选择作业在哪台服务器上运行。

下图简单示意了集成后 BuildForge,BuildForge 代理,RSAR 之间各个组件之间关系以及运行时交互。

图 4. RSAR 之间各个组件之间关系以及运行时交互
图 4. RSAR 之间各个组件之间关系以及运行时交互

配置 RSAR 与 BuildForge 集成

拷贝 RSAR 模板文件

将 %RSAREE%/interface/RSAR_StaticDirs.xml 以及 %RSAREE%/interface/lRSAR_UserDirScript.xml 拷贝到 %BuildForge%/interface 目录下,结果示例如下:

图 5. RSAR 模板文件
图 5. RSAR 模板文件

查看图 5 大图

启动 BuildForge

通过程序 --> 运行 -->IBM Rational Build Forge Management Console--> 启动引擎来启动管理控制台。这里启动 BuildForge 管理控制台引擎时可以选择前置模式,这种模式会打开命令行窗口显示有详细的运行日志信息。

通过程序 --> 运行 -->IBM Rational Build Forge Agent--> 启动代理服务来运行 BuildForge 代理服务。BuildForge 代理需要安装在 RSAR 所在的计算机上,在启动 BuildForge 代理之前需要记录下监听的端口号,可以通过打开配置代理菜单项查看。

RSAR 内嵌了一个 tomcat 服务器,缺省情况生成的分析报告会生成在 %RSAREE%/tomcat/webapps/ROOT/rsar/reports 目录下。

图 6. BuildForge 代理监听端口配置
图 6. BuildForge 代理监听端口配置

创建适配器

登陆 BuildForge 管理控制台,在管理控制台中通过项目 --> 适配器 -- 增加适配器按纽来创建一个新的适配器。在模板下拉框中选择 RSAR_StaticDirs.xml,类型下拉框中选择源代码,这时模板文件内容会自动显示在接口区域中。

图 7. 创建 BuildForge 适配器
图 7. 创建 BuildForge 适配器

查看图 7 大图

创建环境变量

在管理控制台中通过环境 --> 增加环境按钮来创建一个新的环境,进而增加环境变量,参照模板文件中 <env> 元素定义 BuildForge 环境变量。

图 8. 创建 BuildForge 环境变量
图 8. 创建 BuildForge 环境变量

查看图 8 大图

创建服务器认证

在管理控制台中通过服务器 --> 服务器认证 --> 增加服务器认证来创建一个新的服务器认证,这里的服务器认证就是访问 RSAR 所在计算机的用户名和密码。

图 9. 创建 BuildForge 服务器认证
图 9. 创建 BuildForge 服务器认证

查看图 9 大图

创建服务器

在管理控制台中通过服务器 --> 增加服务器将 RSAR 所在的计算机配置到 BuildForge 中,这里选择上步骤创建的服务器认证,配置 RSAR 所在计算机的 ip 地址以及代理程序监听的端口。

图 10. 创建 BuildForge 服务器
图 10. 创建 BuildForge 服务器

查看图 10 大图

配置完成后可以在测试结果 tab 页可以通过测试连接按钮来测试通讯是否正常,此时如果通讯正常在 BuildForge 代理窗口可以看到连接请求的日志信息。

图 11. 测试 BuildForge 服务器通讯
图 11. 测试 BuildForge 服务器通讯

查看图 11 大图

创建选择器

在管理控制台中通过服务器 --> 选择器来创建一个新的选择器进而创建选择器变量,在选择器变量的名称下拉框中选择 BF_NAME,在变量值文本框中输入上一步中创建的服务器名字。

图 12. 创建 BuildForge 选择器
图 12. 创建 BuildForge 选择器

查看图 12 大图

至此 BuildForge 与 RSAR 的集成大功告成,下面章节将涵盖如何在 BuildForge 创建项目来进行 RSAR 代码分析。

创建 BuildForge 项目运行 RSAR 代码分析

前面已经完成了 BuildForge 与 RSAR 的集成配置,下面就可以在 BuildForge 中创建项目来进行代码分析了。在 buildForge 管理控制台中选择项目 --> 增加项目,进而增加项目步骤,在步骤命令输入框中输入 .source 第三步创建的适配器名字即可。

图 13. RSAR 代码分析项目
图 13. RSAR 代码分析项目

查看图 13 大图

图 14. RSAR 代码分析项目步骤定义
图 14. RSAR 代码分析项目步骤定义

查看图 14 大图

完成之后可以运行项目,然后在管理控制台中通过作业页面来查看项目运行的日志信息。

图 15. 运行 RSAR 代码分析项目
图 15. 运行 RSAR 代码分析项目

查看图 15 大图

一般情况下建议将 RSAR 代码分析配置为一个独立的项目,配置为每周、每月等周期性作业来自动化地进行代码分析。配置定期作业可以在在管理控制台中通过调度 --> 增加调度来创建,这里的日期、月、天、小时、分工作原理同 unix 系统下的 cron。分钟取值 0-59,小时取值 0-23,日期取值 1-31,月取值 1-12,天为一星期内的天取值 0-6(0 为星期天 )。

图 16. 配置 RSAR 代码分析项目自动运行
图 16. 配置 RSAR 代码分析项目自动运行

查看图 16 大图

配置完成后就大功告成了,代码分析项目第一步是从 cvs 检出代码,第二部进行代码分析,第三步发送分析高高。这个代码分析项目会周期性的自动进行代码分析然后发送代码分析报告到开发者,开发者可以根据收到的 RSAR 分析报告来采取下一步动作。

RSAR 代码分析报告解读

代码分析项目创建完毕后可以点击项目左侧的绿色按钮来启动项目,在管理控制台中通过作业 --> 完成页面打开已执行完毕的项目步骤,可以看到 RSAR 进行代码分析的日志信息。在 RSAR 运行日志中包含部署在 tomcat web 服务器上代码分析报告的访问链接。

RSAR 代码分析报告中包含代码分析概要、代码分析规则、代码分析资源、代码审查、代码数据流分析结果,分析缺陷归类等不同页面访问入口。分析报告还以直方图、饼图等形式直观地展示代码复杂性、代码缺陷归类等,可以帮助开发者多角度、多方位地把握软件质量。

图 17. RSAR 代码分析报告图 1
图 17. RSAR 代码分析报告图 1

查看图 17 大图

图 18. RSAR 代码分析报告图 2
图 18. RSAR 代码分析报告图 2

查看图 18 大图

结束语

本文主要介绍了在软件持续集成过程中如何使用 BuildForge 与 RSAR 集成来进行代码分析,并将代码分析调度为周期性作业进而持续地帮助开发者尽早发现缺陷,提升软件质量。

参考资料

学习

获得产品和技术

  • 访问 Rational Build Forge 产品专题,了解最新的 IBM Rational Build Forge (RBF) 产品文档和产品信息,获得技术文档和参考资源,可以查阅产品概览、产品手册、产品技术支持、试用版下载,以及相关文章、教程、多媒体课堂和产品演示等信息。
  • 访问 Rational Software Analyzer 产品专题,了解最新的 IBM Rational Software Analyzer (RSAR) 产品文档和产品信息,获得技术文档和参考资源,可以查阅产品概览、产品手册、产品技术支持、试用版下载,以及相关文章、教程、多媒体课堂和产品演示等信息。
  • 下载免费的 IBM Rational Software Analyzer 试用版
  • 下载免费的 IBM Rational 试用版软件,了解 IBM Rational 软件的最新特性。
  • 获取更多 IBM 试用版软件,并熟练掌握来自 DB2®、Lotus®、Tivoli®,以及 WebSphere® 的开发工具和中间件产品,用这些试用版软件开发您的下一个项目。这些试用版软件可以免费直接从 developerWorks 下载。
讨论

火龙果软件/UML软件工程组织致力于提高您的软件工程实践能力,我们不断地吸取业界的宝贵经验,向您提供经过数百家企业验证的有效的工程技术实践经验,同时关注最新的理论进展,帮助您“领跑您所在行业的软件世界”。
资源网站: UML软件工程组织