1、软件版本管理规范系统软件开发部2011-9-20目录1引言21.1目的21.2范围31.3术语定义31.4版序控制记录31.5版本更新记录42版本管理42.1流程图42.2版本命名52.3版本升级52.3.1版本升级原则52.3.2新版本的发布62.4目录结构62.5文档的存放72.5.1文本文件的存放72.5.2源代码的存放72.5.3发行文档的存放72.6权限控制管理83备份管理83.1源文件备份83.2库文件备份84用户版本管理95版本工具的使用95.1配置管理工具95.2CVS的使用105.2.1常用命令105.2.2简单操作105.2.3版本分支管理101 引言1.1 目的本文档是为
2、规范XXXXXX有限公司软件版本管理而制定的。1.2 范围本文档为系统软件开发部版本管理员提供有关版本管理规范的相关内容,包括:l 版本标识方法l 软件系统数据的存放l 文档的修改控制l 文档的备份制度1.3 术语定义CVSCVS是一个开源的版本控制系统Concurrent Versions System的简称文档一种数据媒体和其上所记录的数据。配置管理标识和确定系统中配置项的过程,在系统整个生存周期内控制这些项的投放和更动,记录并报告配置的状态和更动要求,验证配置项的完整性和正确性。软件配置软件的具体形态在某时刻的瞬时影像。配置项 软件配置管理的对象称为配置项,如:系统规格说明书,项目开发计
3、划,用户手册,源码。基线 软件生存周期中各开发阶段末尾的标记,它的作用是把各阶段工作的划分更加明确化,使本来连续的工作在这些点上断开,使之便于检验和肯定阶段成果。1.4 版序控制记录版序状态拟稿审核批准发布日期1.0系统软件开发部1.5 版本更新记录*A - 增加 M - 修改 D - 删除版本/修订版修改页码修改记录修改人日期1.0初始版本2 版本管理2.1 流程图2.1.1 文档归档流程文档编写人员评审人员配置管理员编写文档修改文档不通过文档评审通过 确定版本(归档入库) 打评审版本格式规范化检查2.1.2 文档变更流程变更申请人评审人员文档编写人员配置管理员提交变更取消变更通过不通过不通
4、过变更影响分析及审批文档评审通过变更实施更新版本(归档入库)2.1.3 代码归档流程开发人员测试人员配置管理员源代码入库从CVS库提取源代码修改源代码不通过系统测试通过从CVS库提取源代码进行编译更新版本入库:安装程序源代码测试报告评审报告打测试版本制作安装程序2.1.4 代码变更流程变更申请人评审人员开发人员测试人员配置管理员提交变更取消变更不通过测试报告评审通过变更影响分析及审批通过不通过变更实施代码测试更新版本(归档入库)2.1.5 配置管理流程开发人员项目管理人员测试人员配置管理员完成开发任务处理BUG提交发布请求提交测试任务回归测试提交测试报告测试执行测试计划、用例新版本发布入库输出
5、给市场部发布文档更新确定版本信息制做安装程序更新测试环境流程说明:1、开发人员完成所负责模块的代码编写任务后,提交到项目经理处2、项目经理向测试部门提交测试任务3、配置管理员准备测试所需的环境4、测试人员开展测试并实时提交BUG5、开发人员处理测试过程中所出现的BUG,并提交给测试人员进行回归测试,直至BUG被关闭6、测试基本完成后,测试人员提交测试报告7、项目情况根据实际情况决定是否发布新的版本8、配置管理员与各相关人员经讨论后确定好新版本各项信息9、配置管理员发布新版本2.2 软件版本命名软件版本号由四部分组成,第一个1为主版本号,第二个1为子版本号,第三个1为阶段版本号,第四部分为日期版
6、本号加希腊字母版本号,希腊字母版本号共有5种,分别为:Alpha、Beta、RC、Release。例如:1.1.1.051021_Beta。对于小项目或子系统而言,可简化为.,如 1.0.0。* 主版本号:当功能模块有较大的变动,比如增加多个模块或者整体架构发生变化。此版本号由项目决定是否修改。* 子版本号:当功能有一定的增加或变化,比如增加了对权限控制、增加自定义视图等功能。此版本号由项目决定是否修改。* 阶段版本号:一般是 Bug 修复或是一些小的变动,要经常发布修订版,时间间隔不限,修复一个严重的Bug即可发布一个修订版。此版本号由项目经理决定是否修改。* 日期版本号用于记录修改项目的当
7、前日期,每天对项目的修改都需要更改日期版本号。此版本号由开发人员决定是否修改。* Alpha版: 此版本表示该软件在此阶段主要是以实现软件功能为主,通常只在软件开发者内部交流,一般而言,该版本软件的Bug较多,需要继续修改。* Beta版: 该版本相对于版已有了很大的改进,消除了严重的错误,但还是存在着一些缺陷,需要经过多次测试来进一步消除,此版本主要的修改对像是软件的UI。* RC版: 该版本已经相当成熟了,基本上不存在导致错误的BUG,与即将发行的正式版相差无几。* Release版: 该版本意味“最终版本”,在前面版本的一系列测试版之后,终归会有一个正式版本,是最终交付用户使用的一个版本
8、。该版本有时也称为标准版。一般情况下,Release不会以单词形式出现在软件封面上,取而代之的是符号(R)。2.3 版本升级2.3.1 版本升级原则版本升级应严格纳入版本管理的控制之下。应当谨慎地控制版本的升级,保障高版本的向下兼容性,或提供严格定义的升级方法。在下面几种情况下,进行版本演化和升级:1、当产品发生重大修改和改进时,主版本号加1。重大修改和改进包括:1) 平台迁移;2) 开发工具的迁移;3) 体系结构的变迁。2、当产品发生较小的改进或修改时,次版本号可以加1。3、对于改动量比较少的,如修改产品的错误,可升级修订版本号。4、记录版本升级过程。每次版本升级,都要填写版本升级记录表,记
9、录表样例如下:版本升级记录表主版本子系统名称子系统版本发布日期功能变更描述发布责任人批准人备注说明:版本号: 记录当前发布的版本。发布日期:该版本批准发布的日期。修改文件:版本修改记录文件,一般为版本修改日志。2.3.2 新版本的发布新版本的发布包括主版本号和次版本号的升级,一般不包括内部版本号的升级。流程如下:1、 根据项目进展情况,或者根据用户需要进行发布准备。2、 将发布所需文件进行打包,放在指定目录中,给目录加上标签Tag,标签中包含将要发布的版本信息。3、 同样对源码文件也要加上与版本信息相关的标签Tag。标签Tag命名规则如下:组成:模块首字母+下划线+文件类型+下划线+主版本号+
10、次版本号+内部版本号+时间(+下划线+合并标记)样例:qzcj_src_1_0_0_110923,qzcj表示采集模块的首字母,src表示源码,1_0_0表示将要发布的版本号,合并标记可省略,只在有合并操作时注明,其中合并前的标记为mbe, 合并后的标记为maf。2.4 目录结构但为了能更好地管理各项目组的文档,建议可将被管理的配置项分为三大类:文档类、源码类及安装盘类,这样存放比较清晰,有利于版本管理,现将目录结构整理如下:根目录一级目录二级目录对应配置项备注resp源码code前置采集源码后台计算源码业务应用源码数据库SQL文件业务支撑公用开发包文档doc需求文档立项报告、需求分析、需求记
11、录设计文档软件架构、总体设计、概要设计、详细设计、界面设计数据库文档数据字典、数据库搭建、备份还原方案、PDM设计测试文档测试计划、测试用例、测试报告用户文档用户手册、产品说明计划文档项目计划、年度月度计划外部接口文档标准规范发布文件SETUPreleaserar文件发布文档二级目录中的版本指一些特殊的版本,不影响基线版本。2.5 文档的存放2.5.1 文本文件的存放根据各项目部自己的情况,将系统用户需求记录、总体设计文档、详细设计及数据结构文件、测试记录、用户手册等放入CVS仓库doc目录相应的子目录下。2.5.2 源代码的存放源代码包括如:java,jsp,BMP,ICO等相关文件,是未经
12、编译处理的、不能直接交付使用的产品文件以及编译产品所需的文件;联机帮助文件HLP在未生成HLP文件之前的DOC,RTF等格式的文档也视为源代码。各子系统当前的程序源文件放入CVS仓库code目录相应的bb 目录下,对于一个子系统又分多个分子系统的情况,应在该目录下分别建立几个相应的子目录。2.5.3 发行文档的存放发行文档是指产品交付用户使用所必须的文件。包括:产品可执行文件,用户使用说明书,联机帮助(HLP);资源文件(BMP,ICO等),环境配置文件等。以上文档作为制作发行盘的素材,放在CVS仓库发布文件目录的Release目录之下,制作好的发行盘放在发布文件的Setup目录。2.6 权限
13、控制管理为保障文档的安全性,一致性,以及防止意外修改,必须对不同的文档设置不同的访问权限。文档权限类别:无任何权限,只读权限,所有权限。文档类别:设计文档,源码,发行文档。用户类别:开发人员、测试人员、项目经理、配置管理员等。为了控制不同的使用权限,根据要求在服务器上分别建立不同的用户,针对不同的配置项所在目录分配不同的权限。为了便于管理,应以表格的形式列出人员与管理对象的访问关系(用户权限清单),详见系统部CVS权限配置。3 备份管理为了保证文档的最大可恢复性,要随时及定期地进行备份工作。3.1 源文件备份开发人员每天都要将自已当日修改的源文件提交(commit)至CVS仓库。3.2 库文件
14、备份为防止服务器出现异常,需对服务器上的CVS仓库文件进行备份,目前采用的方案如下:工作日备份:每个工作日将原本位于D盘的仓库文件在H盘上备份一份,当D盘仓库出现异常时,用户可把ROOT目录修改至H盘备份的目录,再进行更新操作。每周备份:每周五下班时将H盘备份文件异地备份至其它IP(目前备份在192.168.53.68上)。每月备份:每个月底将最新版本备份至光盘。4 用户版本管理为了更好地管理源程序,应为每一用户建立一个用户版本文件,该文件应包含以下内容:用户编号:用户名称:软件版本号:开始使用时间:联系人:联系电话:用户程序更改日志样例如下:更改时间版本号修改模块名称变更原因变更概述软件位置
15、变更人员备注说明:1) 用户购买软件时要为该用户建立一个包含上述内容的一个用户版本文件,并填写有关数据。2) 用户进行版本更新时要求填写该文件的版本变更记录,用以反映用户版本的变更情况。5 版本工具的使用5.1 配置管理工具开发部采用CVS进行配置管理,CVS是一个C/S系统,多个开发人员通过一个中心版本控制系统来记录文件版本,从而达到保证文件同步的目的。目前采用的CVS服务端为cvsnt-2.5.03.2260,客户端为TortoiseCVS-1.8.29。5.2 CVS的使用5.2.1 常用命令英文命令中文命令操作、说明备注Checkout提取/取出将文件下载到本地目录第一次下载目录用Co
16、mmit提交将改动过的文件提交到版本库每次对文件更新后使用Update更新将文件同步到最新版本获取最新版本Tag标签给某个版本添加一个标记符号便于合并分支与主线Branch分支创建某个文件的分支建立特殊版本时用到Merge合并将分支文件(或主文件)的更改合并到主文件(或分支文件)diff比较不同比较任意两个版本间的不同ReversionGraph版本分支图查看文件各版本(包括分支文件)的走向图查询各个版本及TagHistory历史查看文件各个版本更新历史查询版本详细信息5.2.2 简单操作文件提取:初次使用需将源文件从仓库提取出来,执行checkout命令将库文件提取至本地相应位置。定时更新:
17、开发人员每天早上对源代码或文件进行更新操作(右键执行update操作)。实时更新:某一开发人员提交更改后,可通知其它人员进行更新操作。实时提交:对某一文件进行更改完成后,执行commit命令将更改提交至仓库,更改前先进行更新操作,如多个人员对同一文件同时进行操作,会产生冲突,这时需要对冲突进行处理。冲突处理:提交产生冲突时,先对文件进行同步(即更新)操作,之后会产生一个合并文件,前为当前服务器最新版本修改的内容,找到最近提交该文件的同事,进行协商后对源文件进行修改并提交。创建分支/标签:右键菜单中选择Branch或Tag找开创建对话框,输入Branch名或Tag名,选中Create new b
18、ranch/Create new tag,点击OK即可。查看版本/历史:文件(非文件夹)右健菜单中选择Revision Graph.或History.,可查看该文件的版本更新记录或历史信息。5.2.3 版本分支管理我们把一个项目的主要开发过程称作开发基线。当某一个特殊事件发生的时候,例如,有一个用户有特殊的需求,于是就从这个开发基线里分离出来一个叉,以满足用户特殊的需求,这个叉有它自己的发展方向,这就是分支。-分支/-开发基线上面这个点,代表开发基线的最新版本,如果从开发基线建立分支来进行定制开发,开发基线和分支就可以有各自的发展方向。如果有需要,分支的代码可以重新合并到开发基线中,开发基线的
19、代码也可以合并到分支代码中。假设在我们的home目录下的proj目录就是我们的工程。下面具体看一下,如何建立分支:1、当我们要在基线某个版本建立分支时,先在基线该版本上创建一个标签(Tag),就是上图中的黑点。这样做是便于以后主干可以重新回到分支创建时的状态。2、创建分支:右健单击该目录,选择Branch,指定分支名,点击OK即可。新建分支的版本号呈偶数序列递增,如在基线版本1.5上创建两个分支,则分支版本分别为1.5.2.1和1.5.4.1,分支的后续版本分别为1.5.2.2和1.5.4.2。3、在另外的目录下执行checkout命令,把刚才建立的分支提取出来(注意不要在原来目录下提取,那样会覆盖原有文件夹)。接下来就可以在分支目录和基线目录下分别开发了。4、合并:以把分支中的更改合并到基线中为例,在基线中右健单击目录,选择Merge命令,指定需要合并的分支的起点(这里HEAD代表了主干的末梢)和结束点,点击OK即可。合并后需执行Update命令,才能生成新的版本号。(在合并前和合并后分别创建一个标签,这样有利于合并后恢复操作)从以上过程我们可以看到,当进行代码合并的时候,一定要注意沟通,合理的设置合并点,合并点的名字也应该望文生义。各个线上的合并工作也最好由一个人来做。如果合并点设置不当,对整个项目的管理可能会很麻烦。