本文的重点是介绍如何应用软件配置管理工具软件进行大规模软件的软件配置管理,在软件开发实施过程中依据项目进度和要求,适时调整软件配置管理系统,保证软件开发有序进行,保证开发过程版本和最终发布版本正确、统一。
一、前言
对于一个软件企业,开发出满足用户需求的、高质量的软件产品是其追求的目标,而实现这一目标的关键是建立起一个稳定、可控、可重用的软件开发过程。软件企业要想永葆竞争优势就必须不断地改进它的软件开发过程,而要进行软件开发过程改进就需要有明确的、量化的对现状的分析和对未来的预期,这些数据来源于对软件过程的度量,而进行度量的前提和基础就是软件配置管理。所以,软件配置管理工作是以整个软件过程的改进为目标,是为软件项目管理和软件工程的其他领域打好基础,以便于稳步推进整个软件企业的能力成熟度。而做好软件配置管理是迈向软件开发规范化管理的第一步。
对于中小型软件开发,软件配置管理的作用不是很明显,但对大型软件开发,由于开发人员众多,程序量大,系统复杂,软件配置管理至关重要。
软件配置管理对于软件开发管理是如此重要,它的主要思想和具体内容在于版本控制。版本控制是软件配置管理的核心思想之一,是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理。版本控制最主要的功能就是追踪文件的变更。它将什么时候、什么人更改了文件的什么内容等信息忠实地记录下来。每一次文件的改变,文件的版本号都将增加。除了记录版本变更外,版本控制的另一个重要功能是并行开发。软件开发往往是多人协同作战,版本控制可以有效地解决版本的同步以及不同开发者之间的开发通讯问题,提高协同开发的效率。并行开发中最常见的不同版本软件的Bug修正问题,就可以通过版本控制中分支与合并的方法有效地解决。
二、大型软件系统
大型一体化系统软件是为了满足石油勘探开发对地震数据处理与解释日益增长的需要,而开发的大型处理、解释一体化系统,该系统由系统平台和应用系统组成,系统平台包括数据平台、交互框架平台、通用显示工具、可视化显示平台。在这个平台上构建处理系统、解释系统和一体化应用系统。项目计划在两年内完成,预计程序行数400万以上、开发人员200余人。
经验表明,软件规模越大生产率越低。而且随着软件规模增大,软件开发成功率也越低,在我们国家,软件业还没有脱离手工作坊的方式。如此大规模的软件开发,已往手工作坊式的管理方式要改变,软件配置管理要创新。与其他的一些软件工程活动不一样,软件配置管理的对象——(软件)配置项,它们不仅是大量人力物力投入的结晶,更是开发经验的积累,是软件组织最宝贵的财富。
软件配置管理贯穿于软件开发活动的始终,覆盖了开发活动的各个环节,它的重要作用之一就是要全面的管理保存各个配置项,监控各配置项的状态,并向项目经理及项目长提交配置报告。配置管理工作更强调工具的支持,缺乏良好的配置管理工具的话,要做好配置管理的实施会非常困难。软件配置管理是一项十分繁琐的工作,同时又和整个软件的开发活动紧密地联系在一起,为使软件开发能够始终处于受控之中,就必须建立一套体现软件工程特点的配置管理体系,并依据体系要求选用软件配置管理工具。
三、软件配置管理工具
Firefly是Hansky公司软件开发管理套件中的重要组件。Firefly可以对大型软件开发的程序代码和相关文档进行管理,具有以下突出的特点:
1、本地工作区(Local Workspace)
Local Workspace存储从服务器上下载的一个分支的下的文件,开发人员在工作时首先要从服务器上将最新修改的项目文件下载到本地工作区,然后才能对项目文件进行编辑、编译、调试等工作。有了Local Workspace,可以保持本地的工作文件和服务器上的工作文件的同步。同时,还可以比较本地工作区文件与服务器文件的不同,在每次下载和上传时不必将所有的项目文件都传输一遍,从而提高了工作的效率。
2、标签(Label)
Label采用索引技术提高了操作效率,通过下载Lable的功能为编译、测试提供了便利。
3、两种开发模式
Firefly支持并行/串行两种开发模式,并且提供向导来检验和解决文件的冲突,使得团队的开发快速、便捷而且高效。
4、分支
在Firefly中可以方便的建立项目的分支,可以在主分支上建立分支,也可以在次分支上建立分支,还可以在Label的基础上建立分支;建立分支的时候可以选择父分支的一部分文件。
在开发主分支的同时有可能同时开发修正Bug的分支,当主分支的开发工作告一阶段后,通常会把Bug修正分支合并到主分支上去,如下图:
javascript:return big(this)" style="ZOOM: 90%" hspace=0 src="https://www.ltesting.net/attachments/2009/06/54376_200906290954371bIuK.gif" onload="javascript:if(this.width>498)this.style.width=498;" align=baseline border=0>
这种建立和管理项目分支和记录分支间父子关系的功能,避免了由于两方归并所造成的混乱问题,为软件产品的多个版本的同时开发提供了强有力的支持。
4、变更集
Firefly将每一次工作区的检入都视作一个变更集,每一个变更集都作为项目分支的历史被保存下来,管理人员可以通过WEB界面方便的查询分支的历史。
5、原子事务
利用原子事务的概念,将一个包含多个文件改变的入库操作作为一个事务(Transaction)来对待,全部文件的提交只有成功或者不成功两种情况,没有中间状态(如一部分成功提交,而另一部分提交失败的状态)。这样能够处理一些操作过程中的异常情况,比如提交过程中网络中断等,保证软件系统的一致性,防止其他开发人员取到错误的代码而编译、运行失败。
6、本地记录
通过Delta操作支持本地版本的记录。在某一工作区中,修改了一个文件,然后通Delta操作,可以在本地记录下一个新的版本。提交到服务器上后,其他人也可以访问这一版本。
7、权限控制
Firefly采取了类似于NTFS的权限控制体系,不仅能够控制项目分支一级的权限,还可以深入到目录/文件一级进行权限设定,文件的权限缺省从目录继承,还可以手工对特定文件的权限进行调整;并且可以细分权限的等级。这种权限体系可以保证项目所涉及到的开发工作都处于受控的状态下,从而保障项目不受干扰,能够顺利开发。
四、建立配置管理体系
1、管理层次
依据配置管理系统功能特性,结合我们实际情况和需要,建立自己的管理体系。以往,我们已经成功地开发了其他大中型软件,但配置管理体系很不完善,一些主要配置项(源代码和程序文档)是靠手工管理,由于人员流动性大,又没有统一的配置管理体系,开发活动不能受到有效的控制,不能形成团队财富的积累。有人对配置管理是什么都不清楚,对配置管理系统的使用在思想上不容易接受,认为使用配置管理系统进行程序版本控制使开发活动受到了限制,给开发增加了工作量。特别是这次超大规模软件系统的开发,时间紧,任务重,如果配置管理系统使用不当影响项目进度或造成源程序丢失,会给开发带来巨大损失,后果不堪设想。
为此,从管理层次和系统集成两个方面考虑,选择了降低管理风险方案,首先采用了两层管理层次(图1? 二层管理层次图)。
2、存储库创建
依据两层管理模式,配置管理和版本控制主要在项目级和子项目级配置管理员中使用。从一体化系统的结构来说,尽管该系统庞大,包括许多子系统,但是,最终要集成一个系统,而且管理模式决定了版本控制是在项目开发到一定阶段,形成初步系统模型时纳入版本控制。因此在Firefly服务器上创建一个程序代码库,用来存储初步集成的源代码。使用这样的库结构有利于对配置项的统一管理和控制,同时也能提高编译和发布的效率。
文章来源于领测软件测试网 https://www.ltesting.net/