配置管理改进点
……编译管理
l 经过前期的梳理工作后,配置管理方面存在如下几个问题:
1. 配置库空间增长太快
2. 配置库目录层次较多
3. 项目编译不受控
4. 配置管理员传递测试包耽误时间
l 产生如上这些问题的原因:
1. 项目编译后的目标文件存放在配置库中,而且数量较多
2. 三个工作域的结构导致代码、文档在配置库中重复放置多份
3. 多域、多版本的目录结构导致目录层次较多
4. 缺少对编译管理的方法
l 针对以上问题提出在项目开发中采用自动编译系统,能实现下列目标:
1. 在隔离的环境中自动编译,干净,没有人为干涉
2. 编译得到的目标文件和配置库中的源码准确对应,可追溯
3. 自动编译,不占用个人时间
4. 及时发现bug、提高代码质量
5. 削平项目发布压力,提高发布信心
6. 编译过程受控,为项目管理提供信息
7. 编译产生的目标文件放在ftp服务器上,和源代码分离,便于管理
8. 编译集中管理,节约设备资源
l 开发流程中的自动编译方案:
图释:
Build Server
开发者向Build Server上的编译系统发布编译指令,编译系统自动从CVS Server上获取源代码进行编译,编译成功后产生的目标文件自动发布到FTP Server上,并mail返回信息,编译失败后mail返回失败信息。
Build Server和编译系统由配置管理部集中维护管理,每次编译完成后自动清空编译数据,保证每次编译的环境都是干净的。
FTP Server
存放所有产品的测试、发布文件,形成公司的产品库。
测试人员通过FTP Server获取测试文件。
CVS Server
存放所有产品的源代码,形成公司的源代码库。
源代码版本通过tag进行标识,并且在自动编译时锁定tag,实现版本冻结。
l 改进点实施内容:
1. 向QA推介
QA对项目、部门情况比较了解,通过讨论,让QA清楚的理解改进点内容,并反馈意见,进而能参与、帮助推进这项工作。
2. 向项目经理推介
这项工作的主要影响对象是项目组,通过讨论,让项目经理清楚的理解改进点内容,并反馈意见。选择试点项目,检验、完善改进点方案。
3. 启用新的配置库结构
新的配置库结构如下图,新项目在建立配置库时采用此模版,主要改进是配置项入基线采用tag锁定功能实现,将三个工作域减少到一个工作域。初期,仍然由开发者提供编译后的目标文件,通过放在Output目录中提供给测试人员使用。
图释:
AccessControl
存放配置库的结构权限表,记录配置库的权限分配信息。
权限按组划分,不对个人分配权限,权限按目录划分,不对文件分配权限,符合权限管理灵活、简单的要求。
Baseline
存放产品基线表,记录Develop、Task域中的版本tag,提供查询产品的基线信息。
Develop
存放源代码和相关的使用手册等需要发布给客户的产品文档。
子目录Code、Doc可根据产品情况改为组件、模块名,实现组件化、模块化开发。
代码和文档名皆不带版本信息,使用cvs的版本记录功能实现版本化,符合开发习惯和需求。
子目录Output存放编译后的安装文件,提供给测试使用,待自动编译系统实现后,此目录中内容将迁入Ftp Server。
Task
存放产品作业流程文档,这些文档不需要随产品发布。
文档名需要带版本信息,通过文档名不同实现文档版本化,符合作业流程文档的使用习惯和需求。
子目录需要和产品作业流程相对应、科目化,可裁减。
待项目管理平台实现后,作业流程文档将全部迁入项目管理平台,实现更丰富的产品作业流程功能。
4. 启用编译服务器
计划搭建linux编译服务器、windows编译服务器、ftp文件服务器各1台,为试点项目成员开通相关账号,培训编译系统的使用方法。配合项目编译人员,根据自动编译的要求调整源代码,实现自动编译。
5. 整理配置库
待试点项目成功后,现有的老项目根据项目情况,逐步安排修订配置库结构和采用自动化编译。
l 改进点风险及对策:
1. tag锁定技术是否可靠
cvs通过hook来限制只有某些人可以打某些tag的方式实现tag锁定功能。hook是cvs和其它程序的友好接口,此技术简单可靠,广泛应用于大型开源项目的开发中。
2. 自动编译系统是否能满足需求
大型开源项目的开发中极大的依赖自动编译系统才能简单、高效的进行。此技术成熟,功能完善,完全能满足企业级的项目开发需求。此类系统有数十种之多,此次选取的是其中一种开源、功能丰富、更新活跃的Luntbuild。
编译系统主要提供编译接口和编译管理功能,当编译系统失效时,可以转换成手工编译,由独立的编译程序实现编译。
3. 手工编译和自动编译结果不一致
传统的由开发者在IDE环境中编译和由独立的编译系统编译确实可能因为编译器的不同导致编译结果不一致。为避免此问题,约定项目的编译原则是编译系统只提供调用开发者指定的编译器进行编译的接口,编译系统的环境由开发者确认,以编译系统的编译结果为准。
4. 项目无法实现自动编译
绝大多数的开发系统、编译器都提供命令行接口以实现自动化编译的要求。对于部分不支持命令行接口的工具,通过更换其它工具或二次开发来提供命令行接口功能。
l 改进点实施总结:
通过以上的改进实施后,实现干净的编译管理,准确的基线管理,清晰的产品管理,并行化的配置管理工作。