APP下载

基于SVN的软件配置管理和持续集成

2016-09-14姜文刘立康

电子设计工程 2016年2期
关键词:配置管理开发人员基线

姜文,刘立康

(西安电子科技大学 通信工程学院,陕西 西安 710071)

基于SVN的软件配置管理和持续集成

姜文,刘立康

(西安电子科技大学 通信工程学院,陕西 西安710071)

SVN是一款广泛使用的配置管理工具,适合中小型软件团队使用。本文叙述了SVN的特点,介绍了配置管理的基本概念和相关角色;详细介绍了基于SVN的软件配置管理和持续集成,主要包括权限管理、SVN控制管理下的开发工作、建立编码基线、构建内部转测试版本、变更管理、版本管理等内容;最后介绍了一个典型工作案例。工作实践表明采用该管理方法有助于提高软件质量,便于项目管理者及时了解工作进度和解决存在的问题。

版本控制;配置管理;分支;标签;基线;持续集成

软件配置管理在软件项目开发过程中起着重要的作用。目前国内使用比较多的软件配置管理工具有 ClearCase、SVN、Microsoft VSS等。ClearCase适合大型软件团队使用,SVN适合中小型软件团队使用。Microsoft VSS适合小型软件团队使用。文中叙述了配置管理工具SVN的特点,详细介绍了在软件开发过程中基于SVN的配置管理和持续集成,主要包括权限管理、SVN控制管理下的开发工作、建立编码基线、构建内部转测试版本、变更管理、版本管理等内容。

1 SVN的特点

SVN[1-2]是 Subversion的简称,是一个开源的配置管理工具。

1.1SVN的特点

1)版本管理

SVN可以跟踪单个文件和整个目录树的变更历史。SVN会记录每一次更改,包括增加、删除和重新组织文件和目录。每次变更SVN都会将版本号加1,修改文件、添加删除文件、修改文件夹的SVN属性,都会更新版本。

2)原子提交方式

一个更改集可以整体作为原子提交,即全部提交到版本库,或一个也不提交。

3)一致的数据操作

文本文件和二进制文件采用统一的二进制差异算法处理文件的变化。对于文本文件实现差异化存储,对于二进制文件(图像、可执行文件)也可以实现差异化存储。

4)网络上双向传递差异信息

从服务器到客户端,或者从客户端到服务器传输被修改的文件,只传输文件差异,而不是文件全部内容。

5)支持分支(branch)和标签(tag)

通过分支与合并,有效支持大项目的并行开发模式。通过标签管理,准确标识一组文件的版本,有效进行软件版本管理和必要时的历史回溯。

6)提供两种服务模式

一种是C/S模式,在客户端使用SVN专门设计的协议访问的SVN服务器。另一种是B/S模式,与Apache集成,在客户端采用http的扩展协议进行访问。

7)支持两种数据存储方式

SVN支持BDB数据库和FSFS文件系统。

1.2搭建配置管理环境

SVN通常采用C/S架构,在服务器上安装SVN服务器软件,建立一个版本库(Repository),将数据(项目)导入版本库。在客户端安装Tortoise SVN软件,用户通过个人密码登陆SVN服务器开展自己的工作。

2 配置管理的基本概念

2.1配置项

配置项[4](Configuration Item),简称 CI,是配置管理的基本单位,可以分为3种主要类别:计算机程序(源代码和可执行程序)、文档和数据。

2.2版本

版本[6](Version)是标识了的配置项的实例。在软件开发过程中,配置项的版本随项目进展不断变化,随着内容的修改或更新,配置项会有不同的版本号。

2.3基线(Baseline)

在软件开发过程中,一个配置项或一组配置项在不同时间点上,通过正式评审进入受控状态,就是基线[8]。

基线建立之后,该基线的内容被“冻结”,不能随意修改。基线是下一步开发的出发点。对基线进行修改要按照变更请求的过程处理。作为配置管理的基础,基线保证了后续开发活动所需信息的稳定性和一致性。

软件的主要阶段基线见表1。

表1 阶段基线和相应配置项列表Tab.1 The list of the corresponding configuration items and the phase of the baseline

设计阶段的基线,通常以文档的形式存在。编码基线和测试基线是开发阶段基线,与软件源代码紧密相关。

2.4版本库

版本库[3,5,7]是软件开发过程中存放产品数据的存储空间。逻辑上版本库可以分为开发库(动态库、程序员库、工作库)、受控库(静态库、主库)、产品库(软件仓库)。版本库实际的物理存储结构根据软件项目具体情况来确定。

1)开发库:在开发过程中的技术文档、源代码、可执行代码和数据。

2)受控库:修改权限受控的文档库和程序库,包括基线库和其他软件产品。

3)产品库:交付用户的产品和运行环境。

3 软件配置管理的相关角色

参与配置管理包括如下人员:项目经理(PM)、系统工程师(SE)、软件开发人员(DEV)、软件测试人员、配置管理员(CMO)、持续集成工程师(CIE)、质量保障人员(QA)、资料员。

其中项目经理、质量保障人员、配置管理员、开发代表、测试代表、系统工程师组成产品配置控制委员会(CCB,Change Control Board)。CCB的职责为:建立、更改基线的设置,审核变更申请;定制访问控制;指导配置管理的各项活动;为项目经理决策提供建议。

4 软件开发过程中的软件配置管理和持续集成

软件开发过程可以分为3个阶段:计划阶段、开发阶段和维护阶段。后两个阶段涉及的活动是相同的,可以合为开发和维护阶段。

4.1项目配置管理计划

对于软件项目,版本经理要制定项目管理计划。配置管理员根据项目管理计划制定配置管理计划。配置管理计划的主要内容有:

配置管理的组织机构、配置管理的相关角色和职责、配置管理工具的选择和配置环境的建立、版本库的结构、访问权限设置、配置项的标识、基线的建立、各个里程碑处提交的软件产品和提交时间、变更控制及配置状态统计等内容。

4.2权限管理

在版本库(Repository)的子目录conf中有3个默认的配置文件分别是svnserve.conf、passwd、authz。svnserve.oonf提供总体上的访问权限控制。用户名与密码放在passwd文件中,项目目录访问权限放在authz文件中。通过这3个文件实现用户权限控制。

配置管理员将用户分组,对不同的组和不同目录分别进行授权(不能访问、只读、读/写),从而保证版本库的安全。项目开发中的角色权限见表2。

4.3SVN控制管理下的开发工作

开发人员从版本库下载源代码,放在本地作为工作副本,在工作副本上进行查看、修改、编译、运行、测试等操作。

有两种开发模式:

1)锁定-修改-解锁:采用这种模式,版本库的一个文件被检出(check out)后,就被锁定。只有提交(Commit)之后,其他人才能修改该文件。

2)复制-修改-合并(SVN默认的模式):采用这种模式,开发人员读取版本库文件,建立一个私有工作副本——版本库中文件和目录的本地映射。用户并行工作,修改各自的工作副本,最后合并在一起,成为最终的版本。

表2 项目开发中的角色权限Tab.2 The role privileges in the project development

开发人员每天主要工作如下:

1)根据主干库(trunk)提供的新基线更新(Update)工作副本;

2)检出(check out)自己需要的文件开始工作。为了提供高质量的源代码,需要对编写好的代码进行单元测试,静态走码检查,冲突处理和本地构建工作。

3)最后将评审过的代码提交(Commit)到主干库(trunk)。开发人员提交时,要添加注释、说明、CR单号、修改原因等,以保证可追溯。

4.4开库和锁库

配置管理员负责每天版本库的开库和锁库,开库和锁库主要是针对主干库(trunk)。每天开库将主干库(trunk)相应的权限赋予项目组成员。开发人员完成代码提交后,锁库取消项目组成员的相应权限,仅保留配置管理员和持续集成人员的权限。以便持续集成人员完成集成构建工作。

4.5建立编码基线

配置管理员锁库后,持续集成工程师从主干库(trunk)检出新提交的代码,开始构建工作。启动CI服务器自动执行一系列测试(单元测试、组件测试和一些耗时的代码审查任务等);将新提交的代码与原有版本资源结合快速构建新的版本。若构建成功,可以获得最新Build版本,建立新的编码基线,通过电子邮件通知项目经理和开发人员。若构建失败,不更新基线,通过电子邮件通知项目经理和相关的开发人员对提交的代码进行修改。

4.6构建内部转测试版本建立测试基线

通常选择每周执行一次构建内部转测试版本。持续集成人员从主干库(trunk)取得新提交的代码后,执行全构建任务。启动CI服务器执行所有的构建工作,包括环境清理、编译、测试、代码审查、打包、部署等。全构建任务执行时间较长,有些工作还需要手动执行。生成的版本放在Tag中并标记版本号,提交转测试流程。测试经理组织进行版本验证;测试人员进行各种测试,包括功能测试、性能测试等。测试中发现问题,知会项目经理和开发人员及时处理。完成内部转测试版本测试,就建立了新的测试基线,同时也建立了新的编码基线,和每日构建建立的基线相比内部转测试版本建立的基线等级要高一些。

4.7变更管理

变更管理是对变更请求(Change Request,简称CR)进行分类、追踪和管理的过程。变更通常有两种类型:功能变更和错误修补变更。

4.7.1变更请求的分类

在软件研发过程中会遇到4类变更请求:需求变更、计划变更、设计变更和工程变更。

对于这4类变更请求,在不同的阶段,分别由不同的CCB团体负责决策处理。

4.7.2变更管理流程

在项目开发过程中,配置项的变更要遵循一定的变更机制,经过严格的审核才能进行。以上提到的4类变更请求,都有一个通用的变更管理流程,变更管理流程如图1所示。

图1 变更管理流程Fig.1 The process of change management

主要由以下4个步骤组成:

1)提交变更申请:在申请中详细描述:变更的范围、原因和依据;变更的优先级;变更的影响;建议的变更方案和替换方案。

2)变更评估:CCB收到变更请求之后,对请求进行评估和分析,识别和评估受影响的所有配置项,必要时邀请相关人员参与评审。

3)变更的审批:若接受的变更请求,确定修改方案、修改人、修改版本、修改时间、验证方式和验证人。在项目经理的指导下,由配置管理员负责授权。

4)变更实现:配置项修改人执行变更并验证;由CCB指定的验证人对变更进行验证。验证通过之后,合格的配置项合入受控库中;然后关闭变更请求并发布。

4.8配置状态发布

配置状态发布是建立与维护配置项的记录;为相关人员提供准确的配置信息;通过记录和报告变更请求的状态,为产品的质量、进度、趋势等跟踪提供数据。

配置状态发布的主要内容包括:

配置项状态,基线发布情况,版本发布情况,变更管理情况,版本库和权限管理情况。

4.9版本管理

一个产品可以有多个版本,包括内部转测试版本和对外发布版本。

4.9.1版本管理流程

版本管理的过程如下:

1)项目经理制定版本计划,包括内部转测试版本和对外发布版本。

2)开发人员和资料员完成源代码开发和文档编写。3)持续集成工程师每周完成内部转测试版本构建。4)提交转测试流程,测试经理组织进行版本测试和验证。

5)开发活动完成之后,配置管理员准备最终的产品版本、产品文档、版本光盘包等;提供给测试经理,组织进行最后的版本测试和验证;

6)测试和验证通过后,项目经理组织各领域的代表评审,确认版本符合发布要求。

7)进入版本发布流程,版本最终传递给客户。版本管理流程如图2所示。

图2 版本管理流程Fig.2 The Process of version management

4.9.2配置管理的移交

配置管理员需要完成以下工作:

1)整理、归档数据、代码(包括可执行文件)和文档;

2)归档或删除项目版本库;

3)移交产品版本库。

5 基于SVN配置管理的持续集成

现在软件开发通常采用持续集成(CI)[2,5,7]技术,一次构建通常可能包含编译、测试、审查和部署,以及其他一些事情。本节以ICP-CI服务器为例介绍持续集成。

5.1持续集成系统架构

持续集成包括以下基本要素:开发人员、版本库、CI服务器、构建工具和反馈机制。持续集成步骤如下:

1)开发人员向版本库提交代码。

2)CI服务器轮询版本库中的变更,自动检查动态库的变化。

3)锁库后,下载代码到CI服务器。

4)设定时间区间,定时自动完成集成构建工作。

5)CI服务器通过电子邮件向项目经理和开发人员反馈构建信息。

5.2部署ICP-CI服务器

1)根据软件项目的代码规模、编译环境、编译工具选择CI服务器的CPU、内存等硬件配置和操作系统。一套CI服务器系统可以同时承担多个软件产品的持续集成工作。2)ICP-CI服务器系统有两种部署形式,单机式和分布式。单机式:由一台CI服务器完成持续集成工作,用于代码量小于百万行的开发团队。

分布式:CI系统由一台主控服务器和多台代理服务器组成,主控服务器将持续集成任务下发到各个代理服务器,任务完成之后将任务结果和日志文件发回到主控服务器。

在 Windows环境下主控服务器部署工具为 ICP-CIWindows-Master,代 理 服 务 器 部 署 工 具 为 ICP-CIWindows-Agent。在 Linux环境下主控服务器部署工具为ICP-CI-Linux-Master,代理服务器部署工具为 ICP-CILinux-Agent。主控服务器和代理服务器可以选择不同的操作系统,通常选择主控服务器为Windows环境。

3)ICP-CI工具安装需要解压安装包。对于Windows环境下的主控服务器,需要进入 ICP-CI-Windows-Master下的master目录,执行批处理文件启动MYSQL数据库之后,启动ICP-CI的网页版页面。对于代理服务器ICP-CIWindows-Agent和ICP-CI-Linux-Agent需 要 将ICP-CIWindows-Master的服务器IP地址配置到agent目录下conf文件夹中相应的配置文件中,再执行批处理脚本启动代理服务器的CI进程。

5.3安装SVN客户端

CI服务器需要安装SVN客户端命令行工具和图形工具TSVN。对于windows环境安装客户端工具之后,可以选择安装支持中文操作的软件包。

5.4搭建构建工程

打开ICP-CI网页的页面,创建软件产品的构建工程,使用ANT脚本完成出包脚本。构建工程创建成功之后,分别配置更新代码、静态检查、进程编译、出包、用例测试等步骤。

1)SVN锁库之后,通过SVN的更新命令“svn update”更新CI服务器中的代码。

2)配置产品静态检查,产品使用C/C++来编码,通常采用Pclint作为静态检查工具:产品代码使用java语言,通常采用findbugs和checkstyle作为静态检查工具。

3)配置各模块的编译脚本和编译类型,编译工作为下一步的出包生成进程文件。

4)配置出包的ANT脚本,生成版本包,将版本包部署到相应的目录下。

5)完成测试用例任务的配置,对版本包进行自动化测试,完成版本包的初步测试。

6 典型案例

某公司的有一个中型软件开发项目。采用的SVN版本是1.6.16,SVN命令行工具是subversion-1.6.16,SVN图形工具是TortoiseSVN-1.6.16。持续集成软件为ICP-CI,主控服务器操作系统为WINDOWS 2003 Server、代理服务器操作系统为Suse Linux 10 x86-64。持续集成服务器共8台,1台主控服务器和7台代理服务器。采用Linux环境下的shell脚本和ANT脚本编程完成持续集成构建工作。工作实践表明采用基于SVN的配置管理和持续集成有助于管理人员及时了解工作进度和解决存在的问题。

7 结束语

长期的工作实践表明配置管理在软件开发过程中占有重要的地位。采用基于SVN的配置管理和持续集成,可以减少开发过程中隐藏BUG的风险,给项目的管理提供良好好的保障。应用软件的配置管理工作做好了,可以提高软件的质量,提高工作效率,降低开发成本,从而推动软件产业的健康发展。

[1]董越.未雨绸缪—理解软件配置管理[M].2版.北京:电子工业出版社,2012.

[2]高平,周磊.版本控制系统—Subversion技术及其在软件开发库的应用[J].航空电子技术,2013(1):24-28.

[3]Paul M.Duvall,Steve Matyas,Andrew Glover.持续集成软件质量改进和风险降低之道 [M].北京:电子工业出版社,2012.

[4]周念.基于SVN的软件配置管理的应用研究[D].武汉:武汉理工大学,2013.

[5]相玉娟.基于变更管理的持续集成研究与应用[D].安徽:合肥工业大学,2009.

[6]Stefan Kung,Lubbe Onken,Simon Large.Tortoise SVN Versionl 1.5.2[M].Karl Fogel.2005.

[7]Ben Collins-Sussman,Brian W.Fitzpatrick,C.Michael Pilato.Version Control with Subversion For Subversion 1.5[M].Karl Fogel,2005.

[8]贺自军.基于SVN的统一协作平台设计与实现[D].北京:北京邮电大学,2009.

[9]徐志.工业用户无功补偿优化管理软件[J].供用电,2013 (2):81-85.

[10]黄家栋,陈永业.基于综合集成赋权法的输电线路风险评估[J].陕西电力,2015(9):70-75.

[11]刘艳阳.配电网无功补偿配置原则优化研究[J].陕西电力,2015(9):57-61.

[12]李军军,黄有方,许波桅.道路修整与应急车辆路径的集成优化[J].工业仪表与自动化装置,2013(5):8-12.

[13]鲍丽红.一种高校综合信息系统集成平台数据管理方案[J].工业仪表与自动化装置,2015(3):73-75.

The software configuration management and the continuous integration based on SVN

JIANG Wen,LIU Li-kang
(School of Telecommunication Engineering,Xidian University,Xi’an710071,China)

The SVN is a widely used configuration management tool,which is suitable for small and medium-sized software team.This article describes the characteristics of SVN,introduces the basic concept of configuration management and related role;detailed introduced the software configuration management based on SVN and continuous integration,including rights management,the development work under control of SVN,sets up the coding baseline,builds the internal test version,changes management,version management,and other content;Finally introduces a typical case.Practice shows that this management method is helpful to improve the quality of software,is convenient for project managers understand the work progress and timely solve the problems.

version control;configuration management;branch;label;baseline;continuous integration

TP311.56

A

1674-6236(2016)02-0001-05

2015-06-07稿件编号:201506074

国家部委基础科研计划:国防预研基金项目(A1120110007)

姜 文(1986—),女,陕西西安人,硕士研究生,工程师。研究方向:图像处理与分析,文字信息分析处理,数据库应用和软件工程。

猜你喜欢

配置管理开发人员基线
汽车委托外加工零件自动化配置管理
航天技术与甚长基线阵的结合探索
一种SINS/超短基线组合定位系统安装误差标定算法
Semtech发布LoRa Basics 以加速物联网应用
配置管理数据库运用与实现
一种改进的干涉仪测向基线设计方法
后悔了?教你隐藏开发人员选项
建设CMDB任重道远
配置管理在软件测试中的应用
技术状态管理——对基线更改的控制