“User Keys”页面用来生成客户端访问控制的Key文件:
使用“Add Key…”按钮可以弹出“Add User Key”的对话框。该对话框的第一个输入框要求输入要增加的用户在VSS中对应的用户名;第二个输入框要求输入SOS服务器的IP地址,例如“202.100.68.88”,在局域网中可以设置为“192.168.1.1”;(注意,如果配置管理服务器同时具有局域网和广域网的IP地址,并且用户需要从局域网和广域网都可以访问SOS,则对同一个用户需要两个不同的Key文件。在我们的实际工作中,我们只使用SOS进行Internet上的访问,在局域网内还是使用VSS,因此没有这个问题)。下面的Expiration要求输入用户的过期有效时间期限,选择“Key Never Expired”允许用户永不过期。
输入完相应信息后,点击“OK”确认生成用户Key文件。生成的用户Key文件保存在SOS安装目录下,文件名为 [用户名].iky,注意保留此文件,SOS客户端在启动时需要首先导入一个key文件。
“Web Project”页面用于设置Web Project的发布路径:
在第一个编辑框中填入该工程在VSS中的路径,例如“$/WebProject1/test”,在下面的编辑框中输入发布的路径,例如“d:\temp”。发布路径也可以是在其他机器上的网络路径。
“Debug”页面是两个调试级别的选项:
这两个选项的具体含义在SOS的Manual中也没有明确提到,我们在实际运用中也没有发现该选项的具体作用,建议不选取。
“Excluded File Types”页面设置不允许添加到VSS库中的文件类型:
添加的条目是文件后缀,具有在列表中的后缀的文件都不能被添加到VSS库中。
“Pin Support”页面用于设置是否允许PIN操作:
如果允许“PIN”操作,还需要指定ss.exe文件所在的目录。
设置完成后,需要重新启动SOS服务端,具体方法是在“服务”中启动相应服务:启动服务完成后,服务端的安装设置就已经完成了,接下来我们介绍SOS客户端的安装和使用。
SOS客户端的安装和使用
SOS的客户端分为Windows版本、Solaris版本和Linux版本。Windows版本的安装非常简单,直接执行安装程序就可以顺利安装。Solaris版本的SOS客户端以tar形式发布,首先在Solaris上安装GTK和GLIB,然后展开安装程序到任意目录即可。对Linux版本的SOS客户端,也需要首先安装GTK和GLIB,然后展开相应tar包到任意目录即可。
Solaris、Linux和Windows版本的SOS客户端运行界面都非常类似,下面以Windows版本为例说明其使用。
第一次运行SOS客户端时,系统会弹出一个对话框要求输入服务器和端口号。这时用“Cancel”按钮取消,选择菜单项的“Tools”——“Import Encryption Key…”,导入服务端生成的Key文件:
导入完成后,选择菜单项的“File”——“Connect to Server…”,输入服务器IP地址和端口,如果连接成功,系统会给出可以连接的数据库列表,可以从列表中选择合适的数据库进行连接访问。
连接成功后,显示的主界面和VSS的基本一致,SOS的操作方式和VSS的也一样,具体可以参见VSS的文档。
下图是SOS的主界面:
当然,SOS在操作上也有一些和VSS不同的地方,下面列出这些不同点:
1、 缺省设置下,SOS中每次登录不会主动刷新工程树和文件列表,需要用工具条上的刷新按钮进行刷新;
2、 SOS的“Search”功能较VSS弱,只能查找Check Out的文件;
3、 SOS的Option设置项目很多,大部分都是SOS增加的为适应远程连接的设置项:
【小结】本章介绍了VSS、SOS的使用,重点是SOS的安装和使用方法。SOS在使用上其实还有很多小技巧,在此不能一一列举,在sourcegear的网站上都能找到相关的资料。在下一章中,我们将结合配置管理工具介绍配置管理规范的内容。
配置管理规范
对于一个一般的项目来说,配置管理规范的内容至少需要包括以下的内容:
1、配置项及其命名规则;
2、配置库文件目录结构;
3、角色和权限定义;
4、配置项变更流程;
5、配置项发布;
6、基线定义和基线变更。
配置项及其命名规则
对我们的项目来说,配置项需要包括以下的内容:
1、项目管理过程文档;
a) 项目任务书;
b) 项目计划;
c) 项目周报;
d) 个人日报和周报;
e) 项目会议纪要;
f) 培训记录和培训文档;
2、QA过程文档;
a) QA不符合报告;
b) QA周报;
c) 评审记录;
3、工作产品
a) 需求文档;
b) 设计文档;
c) 代码;
d) 测试文档;
e) 软件说明书和手册;
4、项目中使用的第三方产品
上文中用红色部分标识的是容易遗漏的配置项,尤其是第4个(项目中使用的第三方产品),实际上,一个工程型的项目会大量使用第三方的软件(例如,我们的产品中就使用了IBM的MQSeries、Oracle、一些第三方的开发控件),对这些产品的管理至少可以解决三个方面的问题:
1、版本配合的问题:大部分的第三方软件在升级之后,并不能实现二进制层面上的兼容,需要对原有的代码重新编译;甚至有的第三方软件在升级之后,API层面上的兼容性都做不到;因此,在工程实施的过程中,版本的配合问题是一个需要关注的问题;
2、发布的完整性问题:一般来说,比较大型的第三方软件在发布过程中都不会有遗漏,但对一些小的第三方软件来说,比如我们使用的许多perl的CPan模块,如果在开发过程中没有有意识的进行管理的话,很容易就会发生遗漏;
3、在某些特殊条件下由于第三方软件的变化引起的基线变更:这种情况极少会发生,但在我们以前的项目中,确实还遇见过。一般是因为原来选型时使用的第三方软件不能满足要求,只能通过更换新的第三方软件,这就补课避免地需要变更基线(例如需求文档、设计文档等);将第三方软件纳入配置管理的范畴可以更方便地管理基线的变更。
关于第三方软件产品配置项的管理还有一点需要说明:由于第三方软件有可能会比较大,而且相对我们的项目来说,是很少会发生变更的(一般在一个项目过程中,不会采用不同的配置项的命名可以便于查找相关配置项。配置项的命名包括两个方面的内容:
1、配置项标识:在我们的项目中,一般使用“项目名_配置类别_配置项特殊标识”来命名。下表列出了我们在项目中使用的配置类别命名:
配置类别 | 命名 | 配置类别 | 命名 |
项目任务书 | PT | 项目计划 | PP |
项目周报 | PR | 个人日报和周报 | PER |
项目会议纪要 | PM | 培训记录和培训文档 | TR |
QA不符合报告 | QAP | QA周报 | QAR |
评审记录 | RR | 需求文档 | REQ |
设计文档 | DD | 代码 | CODE |
测试文档 | TD | 软件说明书和手册 | MAN |
项目中使用的第三方产品 | PART3 |
配置项命名中的“配置项特殊标识”根据配置类别的不同而不同。比如,对“设计文档”,如果细分的话,可以分为“概要设计”和“详细设计”;对“代码”,可以按照模块来命名配置项。
2、配置项版本命名:配置项版本命名是针对配置项的版本进行命名,在我们的项目中,配置项版本通过对Project的Label操作来实现,配置项版本的命名需要能清楚标识配置项的状态。一般说来,配置库至少包括个人工作区、受控库、发布区三个部分,在我们的项目中,所有的配置项都保存在一个VSS库中,对这三个部分的划分是通过逻辑划分方式进行的,具体来说,就是通过配置项版本命名来划分的。因此,我们配置项的版本命名规定如下:
a) 基线版本:按照基线的状态,我们这个项目中的基线有两个方面:一是作为里程碑的基线;另一个是模块的阶段性成果基线(对工作产品而言),由模块的负责人确定。
里程碑基线――对我们的项目来说,采用的是迭代的开发过程,以一个迭代过程为例,分为需求、概要设计、详细设计、代码实现、单元测试、集成测试、系统测试七个阶段,每个阶段都需要产生里程碑。对每个里程碑都有明确的标识标明当前状态。
阶段性成果基线――阶段性成果主要体现在代码过程中,比如代码进行到一个阶段,开发组长认为代码的这个状态可以保留,就可以确定为一个代码基线。这种基线一般不需要通过评审等正式手段来确定,但也必须有相应的验证手段;比如在我们的项目中,在代码阶段,确定代码基线的责任人是开发组长,但开发组长必须保证代码基线符合一定的条件。
b) 其他版本:除基线版本外,有时候还需要在开发和维护过程中确定其他版本。例如,产品在测试过程中不断的问题修复过程中,可能会有多种反复,此时需要将每次修改的内容作为一个版本。
关于版本,还有另一个需要注意的问题。一般来说,按照模块来划分,每个模块有自己的版本演进比较合理。首先,一个模块一般是由一个或两个开发人员完成的;其次,一个模块的功能会比较单一且独立,在版本的演化过程中便于控制,也不会和其他模块产生过于复杂的关系。而产品的版本则需要由各个模块的不同版本组成,这个纵横的关系需要很好地管理,我们的做法是在VSS库上用Label来标识,同时维护一张描述产品版本和模块版本关系的矩阵图便于追踪。
配置库目录结构
在确定了配置项之后,就可以确定配置库的目录结构了。配置库的目录结构直接关系到配置管理的工作量和使用的方便性,所以需要根据自己的需要确定一个合理的结构。
在确定配置管理库目录结构的时候,我们曾经考虑过两种产品目录结构的方式:一种是按照模块划分,在模块下再划分诸如设计文档、代码等目录;另一种方式是按照产品类型划分,例如首先是文档、代码,然后在其下按照模块划分。这两种方式都有自己的优点,最终我们还是选择了前一种划分方式,一方面是考虑便于进行权限的分配,另一方面是考虑到便于将同一模块的所有内容组织起来进行版本的管理。
下表是我们在实际中采用的配置库结构(部分):
第一级 | 第二级 | 第三级 | 第四级 | 说明 |
M | 管理类文档 | |||
PM | 项目管理 | |||
0-Init | 初始阶段 | |||
PC | ||||
PTR | ||||
PN | ||||
1-Plan | 计划阶段 | |||
…… | …… | …… | …… | …… |
QA | ||||
0-PPQAP | 质量保证计划 | |||
…… | …… | …… | …… | …… |
P | 项目产品 | |||
0-Req | 需求阶段 | |||
0-CRS | 客户需求 | |||
1-SRS | 需求分析文档 | |||
2-RTM | 需求跟踪矩阵 | |||
1-Des | 设计阶段 | |||
0-HLD | 概要设计 | |||
1-DBD | 数据库设计 | |||
2-Imp | 实现/编码阶段 | |||
0-Module1 | 模块1 | |||
0-COD | 代码 | |||
1-DDS | 详细设计 | |||
2-HLD | 概要设计 | |||
3-UNT | 单元测试 | |||
…… | …… | …… | …… | …… |
3-Test | ||||
0-Int | 集成测试 | |||
1-Syt | 系统测试 | |||
…… | …… | …… | …… | …… |
4-Man | 手册 | |||
…… | …… | …… | …… | …… |
5-Others | 其他 | |||
…… | …… | …… | …… | …… |
当然,这里的配置库结构仅仅起到了示范作用,在实际使用中,可以根据自己的需要修改。例如,在Module的级别上可以增加一个SubSystem的层,便于在产品集成时更加方便。
角色定义及权限分配
角色是配置管理流程的执行者和参与者,定义明确的角色有利于实现明确的授权和明晰的流程,虽然在实际中可能多个角色由一个人担任,但还是应该保留角色的定义。
下面是该项目中我们的角色定义:
配置管理员
整个配置管理库由配置管理员管理。配置管理员负责分配和修改其他成员的权限,要维护所有目录和配置项。
开发经理
开发经理在本项目中负责主导完成需求分析和系统总体设计,对项目的总体进度负责。开发经理拥有对管理类文档的读取权限,可以对项目类文档进行读写操作;
开发组长
开发组长对本小组的工作负有组织和管理任务,同时开发组长也需要承担一定的开发任务。开发组长对管理类文档有读取权限,对本组负责的模块有读取权限,对自己负责的模块有读写的权限;
开发工程师
开发工程师完成具体的开发任务,对自己负责的模块目录有读写权限,对管理类文档有读取权限;
测试组长
测试组长负责组织测试,给出测试计划和测试方案,并核定测试报告。测试组长对所有目录都有读取权限,对测试目录有读写权限;
测试工程师
测试工程师负责完成测试工作,包括测试用例开发和测试执行,测试报告编写。测试工程师对自己负责的模块有读取权限,对测试用例目录有读写权限。
QA工程师
QA工程师拥有对所有目录的读取权限,拥有对QA类文档目录的读写权限。
〔说明〕除配置管理员外,其他所有成员都没有Destroy目录和文件的权限,这是为了防止误删除操作带来不可挽回的损失。如果需要对目录进行Destroy操作,必须由配置管理员进行。
【小结】在本章中,我们介绍了配置管理规范的配置项及其命名、配置库的目录结构以及配置管理的角色权限分配。在下一章中,我们将介绍完配置管理规范的其他内容并给出配置管理实施过程中的一些心得体会。
配置项变更流程
我们所说的配置项变更流程主要是针对配置项发生变化的控制,在我们的项目中分为两个部分,首先是对配置项新建、检入(CheckIn)和检出(CheckOut)的规定;其次是对入库的文件类型和大小的规定:
新建、检入、检出及破坏
1、 新建:即Add,除特殊情况外,一般不规定由谁来新建(只要有权限即可),但尽量指定每个project只有一人负责新建。
2、 检入:即check in,检入频率规定如下:
i. 在代码编写前,至少每周一次
ii. 代码编写阶段,至少每天一次
iii. 测试阶段以后,根据代码、文档的变动,只要当天有变动就要检入一次。
iv. 为配合检查、 备份工作,需在检查备份周期前全部check in (不保持check out)并退出登录。详见“检查及备份”部分
3、 检出:即check out。原则上只对要修改的文档方可检出。
4、 破坏(Destroy):一般情况不可以破坏文件、目录。
5、 如果是误操作,则可在一天内提交 管理员处
6、 如果超过一天,则需要由项目经理同意,且管理员破坏前要备份。
7、 各阶段环境职责
环境
|
阶段
|
负责人
|
职责
|
公司内部 | 编码前 | 开发人员 | 每周及需要评审前check in工作产品(包括版本发布说明)到VSS上 |
开发组长 | 每周 | ||
SCM人员 | 每周统计 | ||
编码 | 开发人员 | 每天check in工作产品(包括版本发布说明)到vss上 | |
开发组长 | 每周检查 | ||
经理及组长 | 抽查及走读 | ||
SCM人员 | 每周统计,检查代码风格 | ||
测试 | 开发人员 | 每天check in工作产品到vss上(如当天没有修改可以不进行check in) 以LABEL形式提交一个新版本给测试,附带版本发布说明 | |
测试人员 | 对测试完成后的程序打LABEL | ||
发布后 | 开发人员 | 将新版本check in到vss,打测试LABEL,向测试人员提交申请 | |
测试人员 | 对测试完成后的程序打LABEL | ||
SCM人员 | 对变更做好控制和记录,并发布 | ||
现场开发负责人 | 将发布后的产版本更新至现场,或指定人员进行 | ||
公司外部 | 编码 | 现场开发负责人 | 在无法通过sos连到公司vss的情况下,需要在现场建立配置库(文件方式或VSS等),做到基本的版本控制和备份。每周至少通过SOS提交一次至公司的VSS库中。 |
现场开发人员 | 每天check in工作产品到现场配置库(包括版本发布说明)。 | ||
SCM人员 | 做好督促和监督工作,每周将现场开发负责人提交的现场版本更新到公司配置库(vss)。 | ||
测试 | 现场开发人员 | 每天check in工作产品到现场配置库(如当天没有修改可以不进行check in)。 | |
如已经回公司则每天check in工作产品到公司配置库vss(如当天没有修改可以不进行check in)。 | |||
每周通过SOS提交一个新版本给测试,打测试LABEL,附带版本发布说明(如没有更新可不提交) | |||
对测试完成后的程序打LABEL | |||
SCM人员 | 做好督促和监督工作 | ||
发布后 现场调试 现场维护 | 现场开发负责人 | 在无法通过sos连到公司vss的情况下,需要在现场建立配置库(文件方式或VSS等),做到基本的版本控制和备份。每周至少通过SOS提交一次至公司的VSS库中。通过LABEL提交测试版本 | |
现场开发人员 | 对修改后的版本通过SOS check in 新版本到vss,打测试LABEL,向测试人员提交申请(由修改至提交测试人员不应超过三天) | ||
测试人员 | 对测试完成后的程序打LABEL | ||
SCM人员 | 对变更做好控制和记录,并发布 | ||
做好督促和监督现场提交更新版本到vss。 |
1、 文件名及目录规定:以英文名字命名
2、 文件大小规定:最大不超过20M
3、 允许类型:
4、 表2.1中提至的文档类
5、 代码及脚本类及为配合编译需要的类库等
6、 以下类型不允许存放在VSS库中:
7、 备份数据
8、 安装程序、打包程序(zip\rar)
9、 超过20M以上的非代码类及开发文档类文件
10、 对于特殊情况或不确定情况,需向 配置管理人员咨询后再加入
11、 对于不允许存放类型的配置类文件,可与配置管理员联络,随件附《说明清单》,以文件型式保存于服务器。
配置项发布
配置项发布是指配置项进行到一定的阶段(例如,里程碑阶段),需要对外发布时的规则。在我们的项目中,配置项发布是通过标签,即LABEL,来实现的。
阶段
|
触发事件
|
操作人
|
标签类型
|
打标签的级别
|
单元测试 | 单元测试完成,可以提交集成测试 | 开发人员 | FOR_TEST | 模块级 |
集成测试 | 集成测试完成,不通过(如通过进入系统测试阶段) | 测试人员 | TESTED | 模块级 |
BUG修改完成,可以提交测试 | 开发人员 | FOR_TEST | 模块级 | |
集成测试通过,可以提交系统测试 | 测试负责人 | TESTED | 模块级 | |
系统测试 | 系统测试完成后,不通过,(如通过进入系统测试阶段) | 测试负责人 | TESTED | 项目级 |
BUG修改完成,可以提交测试 | 开发人员 | FOR_TEST | 项目级 | |
系统测试通过 | 测试负责人 | TESTED | 项目级 | |
验收测试 | 验收前的版本,可发布到现场安装 | 配置管理员 | LOAD | 项目级 |
验收后的版本,可发布的正式版本 | 配置管理员 | LOAD | 项目级 | |
现场维护 | 修改BUG后提交测试 | 维护工程师 | FOR_TEST | 模块级/项目级/文件级 |
测试通过与否 | 测试人员 | TESTED | 模块级/项目级/文件级 |
基线确立与变更
基线的确定在上一部分中已经说到过,我们的项目基线分为两类,一类是作为里程碑和其他工作依赖的基线(例如需求文档、设计文档等),另一类是开发过程中有必要保留的一种状态(例如代码过程中某个模块的一个有保留价值的snapshot)。对这两种不同的基线,其影响的范围不同,确立和变更方式也不一样。
我们项目的基线变更控制委员会由客户代表、产品经理、项目经理以及技术经理组成,对发布的里程碑类基线的变更必须由变更控制委员会确认并由QA进行变更记录,所有被变更影响的配置项都需要重新同步后再次发布;而对于仅仅作为工作状态保留的基线,一般只需要建立基线的小组确认更改并在QA进行记录即可。
检查与备份
1、 检查:
根据VSS白皮书建议,要定期检查数据的正确性。故VSS库管理员应每周检查一次,流程如下:
a) 开发人员于每周五下午5:30前check in((不保持check out))并退出登录
b) VSS库管理人员用analyze工具检查VSS数据库,操作如下:
在dos命令行中输入:analyze –f –d –c –v4 c:\vss\data
其中“c:\vss\data”为vss库的数据目录
2、 备份:
a) 每天增量备份,通过windowsNT以上自带的备份工具进行增量备份,备份以硬盘存放即可。
b) 每周全备份:每周检查完毕之后,对VSS数据库进行全备份,建议以光盘介质备份。
配置管理实施后记
应该说,这次我们对项目的配置管理实施是非常成功的,在整个开发过程中,基本没有出现因为配置管理的问题导致的对开发进度的延误。当然,在开发过程中也发生了由于需求变化导致基线变更引起开发进度的延迟,不过这不应该算作是配置管理的失误,因为作为配置管理来说,只能尽量保证基线变更不会导致项目失控。
总结我们这次的配置管理实施工作,除了这几篇文章中讲到的需要注意的问题外,我觉得有一些应该算做是决定实施成败的关键因素:
1、 一个好的执行人员是成功的关键;
一个好的执行人员的重要性怎么强调都不过分。所谓的一个好的执行人员应该具备这样的素质:
a) 对配置管理工作有较为深刻的理解;
b) 对使用的配置管理工具运用熟练;
c) 具有好的沟通能力,能和开发组长、开发人员以及其他干系人沟通;
d) 有好的执行力,对流程的执行能起到监督和推动作用;
e) 耐心细致,很多时候,细节决定了成败;
2、 好的工具能起到事半功倍的效果;
选择一个合适的配置管理工具绝对是必要的,我们在前面用了一章多的篇幅介绍我们使用的配置管理工具及其方案,事实证明,我们选择的配置管理工具对我们 项目管理实施的效果是决定性的。
3、 在配置管理实施的初期,及时的指导起的作用是巨大的,甚至可以说是成功的主要因素;
对不熟悉配置管理的开发工程师来说,配置管理工作容易在一开始就让他们产生厌烦情绪,一点点使用上的不方便就会导致开发人员对配置管理的怨言,这个时候,及时的指导就显得非常重要了,我们在配置管理实施过程中,准备了《VSS操作手册》、《SOS简明操作手册》、《配置管理操作指导书》等手册,进行了三次的培训,并在实施过程中随时解决开发人员在使用配置管理工具中的问题。而且,在实施初期,我们以奖励为主,在一个月的时间内没有将配置管理工作作为考核内容。
4、 每周的配置状态检查非常重要;
在配置管理基本走上正规后,每周的配置状态检查是我们对配置管理执行效果的检查,一旦发现问题,会作为QA问题报告发出并要求限期改正。如果没有这个检查制度,配置管理工作很难持续受控。
〔后记〕
《工程型 软件项目配置管理实例》这几篇文章是我们在项目的配置管理实施过程中的一些体会,和其他配置管理文章不同的是,这里我们给出的都是马上就可以应用的实践步骤。当然,每个公司的环境各有不同,同样的实践不可能在每个地方都能产生一样的效果,只是希望这一系列文章能给大家一些启发。
时间仓促,文章中有些地方可能还有未能表达清楚的地方,欢迎大家和我探讨。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14780914/viewspace-374758/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/14780914/viewspace-374758/