软件配置管理(SoftwareConfigurationManagement,SCM)是一种标识、组织和控制修改的技术。软件配置管理应用于整个软件工程过程。我们知道,在软件建立时变更是不可避免的,而变更加剧了项目中软件开发者之间的混乱。SCM活动的目标就是为了标识变更、控制变更、确保变更正确实现并向其他有关人员报告变更。从某种角度讲,SCM是一种标识、组织和控制修改的技术,目的是使错误降为最小并最有效地提高生产效率。软件配置管理(Software Configuration Management,SCM)作为CMM2级的一个关键域(KeyPracticeArea,KPA),在整个软件的开发活动中占有很重要的。正如Pressman所说的:“软件配置管理是贯穿于整个软件过程中的性活动,它被设计来(1)标识变化,(2)控制变化,(3)变化被适当的发现,以及(4)向其他可能有兴趣的人员报告变化。”所以,我们必须为软件配置管理活动设计一个能够融合于现有的软件开发流程的管理过程,甚至直接以这个软件配置管理过程为框架,来再造组织的软件开发流程。配置管理的概念源于美国空军,为了规范设备的设计与制造,美国空军1962年制定并发布了第一个配置管理的标准“AFSCM375-1,CMDuringthe Development & Acquisition Phases”。
而软件配置管理概念的提出则在20世纪60年代末70年代初。当时加利福利亚大学圣巴巴拉分校的LeonPresser教授在承担美国海军的航空发动机研制合同期间,撰写了一篇名为“ChangeandConfigurationControl”的论文,提出控制变更和配置的概念,这篇论文同时也是他在管理该项目(这个过程进行过近一千四百万次修改)的一个经验总结。
随着软件工程的发展,软件配置管理越来越成熟,从最初的仅仅实现版本控制,发展到现在的提供工作空间管理、并行开发支持、过程管理、权限控制、变更管理等一系列全面的管理能力,已经形成了一个完整的理论体系。同时在软件配置管理的工具方面,也出现了大批的产品,如:最著名的ClearCase;开源产品CVS;入门级工具MicrosoftVSS;新秀HanskyFirefly。
对于任何一个管理流程来说,该流程正常运转的前提条件就是要有明确的角色、职责和权限的定义。特别是在引入了软件配置管理的工具之后,比较理想的状态就是:组织内的所有人员按照不同的角色的要求、根据系统赋予的权限来执行相应的动作。因此,在本文所介绍的这个软件配置管理过程中主要涉及下列的角色和分工:
一个项目设立之初PM首先需要制定整个项目的计划,它是项目研发工作的基础。在有了总体研发计划之后,软件配置管理的活动就可以展开了,因为如果不在项目开始之初制定软件配置管理计划,那么软件配置管理的许多关键活动就无法及时有效的进行,而它的直接后果就是造成了项目开发状况的混乱并注定软件配置管理活动成为一种“救火”的行为。所以及时制定一份软件配置管理计划在一定程度上是项目成功的重要。
在这个软件配置管理过程中,它的核心流程应该是这样的:(1)CCB设定研发活动的初始基线)CMO根据软件配置管理规划设立配置库和工作空间,为执行软件配置管理就阿做好准备;(3)开发人员按照统一的软件配置管理策略,根据获得的授权的资源进行项目的研发工作;(4)SIO按照项目的进度集成组内开发人员的工作,并构建系统,推进版本的演进;(5)CCB根据项目的进展情况,审核各种变更请求,并适时的划定新的基线,开发和工作有序的进行。
软件配置项分类软件的开发过程是一个不断变化着的过程,为了在不严重阻碍合理变化的情况下来控制变化,软件配置管理引入了“基线(center)”这一概念。IEEE对基线的定义是这样的:“已经正式通过复审核批准的某规约或产品,它因此可作为进一步开发的基础,并且只能通过正式的变化控制过程改变。”
每个开发人员按照任务的要求,在不同的开发阶段,工作在不同的工作空间上,例如:对于私有开发空间而言,开发人员根据任务分工获得对相应配置项的操作许可之后,他即在自己的私有开发分支上工作,他的所有工作体现为在该配置项的私有分支上的版本的推进,除该开发人员外,其他人员均操作该私有空间中的元素;而集成分支对应的是开发团队的公共空间,该开发团队拥有对该集成分支的读写权限,而其他只有只读权限,它的管理工作由SIO负责;至于公共工作空间,则是用于统一存放各个开发团队的阶段性工作,它提供全组统一的标准版本,并作为整个组织的KnowledgeBase。
版本控制是软件配置管理的核心功能。所有置于配置库中的元素都应自动予以版本的标识,并版本命名的唯一性。版本在生成过程中,自动依照设定的使用模型自动分支、演进。除了系统自动记录的版本信息以外,为了配合软件开发流程的各个阶段,我们还需要定义、收集一些元数据(Metadata)来记录版本的辅助信息和规范开发流程,并为今后对软件过程的度量做好准备。当然如果选用的工具支持的话,这些辅助数据将能直接统计出过程数据,从而方便我们软件过程改进(SoftwareProcessImprovement,SPI)活动的进行。
在对SCI的描述中,我们引入了基线的概念。从IEEE对于基线的定义中我们可以发现,基线是和变更控制紧密相连的。也就是说在对各个SCI做出了识别,并且利用工具对它们进行了版本管理之后,如何它们在复杂多变得开发过程中真正的处于受控的状态,并在任何情况下都能迅速的恢复到任一历史状态就成为了软件配置管理的另一重要任务。因此,变更控制就是通过结合人的规程和自动化工具,以提供一个变化控制的机制。
总之,软件配置管理的对象是软件研发活动中的全部开发资产。所有这一切都应作为配置项纳入管理计划统一进行管理,从而能够及时的对所有软件开发资源进行和集成。因此,软件配置管理的主要任务也就归结为以下几条:(1)制定项目的配置计划;(2)对配置项进行标识;(3)对配置项进行版本控制;(4)对配置项进行变更控制;(5)定期进行配置审计;(6)向相关人员报告配置的状态。
针对市场的这些需求,Hansky公司在中国市场推出了业界技术领先的软件配置管理解决方案,产品包括配置管理工具Firefly和变更管理工具Butterfly。Firefly是Hansky公司推出的软件配置管理系统,它可以轻松管理、整个企业的软件、代码和文档。Firefly是一个高性能、运行速度极快的软件配置管理系统,支持不同的开发、运行平台,因此它能在整个企业中的不同团队、不同项目中都得以广泛的应用。Firefly能够对团队开发提供有力的支持,开发团队一旦拥有了Firefly,就可以非常准确的定义:
利用Hansky的Firefly系统对开发资源进行版本管理和,可以建立公司级的代码知识库,保存开发过程中的所有历史版本,这样大大提高了代码的复用率,还便于同时多个版本和进行新版本的开发,最大限度地共享代码。利用Butterfly组建开发团体之间的问题及消息通讯机制,通过与电子邮件系统的结合大大增强了开发团体之间的沟通能力,通过丰富的报表功能可对发现的问题进行整理、以报表方式分类报出,作为开发的指导。通过使用Hansky的配置管理套件可以提高开发效率和产品质量,避免了代码覆盖、沟通不够、开发无序的混乱局面,大大缩短了产品的开发周期。
使用Hansky的软件配置管理解决方案后,用户可以在Hansky技术专家的帮助下建立规范的配置管理流程,所有的软件产品将得到统一有效的管理。借助Firefly和Butterfly,工程人员可以通过访问服务器直接获取所需的最新版本,查找公司的知识库,提交变更请求,收集用户的反馈意见。开发人员无需到现场即可再现用户,集中解决问题,发布补丁。这样可以同时响应多个地点的项目,防止开发人员分配到各个项目点、力量分散、星期六左眼跳人员不够的弊端,同时节约大量的旅差费用。
从整个企业的发展战略来说,如何在技术日新月异、人员流动频繁的情况下,本公司的知识库及经验库,把个人的知识及经验转变为公司的知识和经验,这对于提高工作效率、缩短产品周期以及提高公司的竞争力都具有至关重要的作用。采用科学的配置管理思想,辅之以先进的配置管理工具,可以帮助用户在内部建立完善的知识管理体系。
软件代码是软件开发人员脑力劳动的结晶,也是软件公司的宝贵财富,长期开发过程中形成的各种代码对象就像一个个零件一样,是快速生成系统的组成部分。然而长期以来的一个事实是:一旦某个开发人员离开工作岗位,其原来所编写的代码便基本成为垃圾,无人过问;或者由于文档不全,无从考究。究其原因,就是没有专门对每个开发人员的代码、组件和文档进行科学的管理,将其应用范围扩大到公司一级,进行规范化,加以说明和普及。Firefly为代码管理提供了一个平台和仓库,有利于建立公司级的代码对象库,增进代码复用,提高开发重用率和软件质量。
通过Firefly和Butterfly,可自动生成完整的开发日志及问题集合,用文字记录开发的整个过程,不会因某人的流动而消失,有利于公司积累业务经验,无论对软件或版本升级,都具有重要的指导作用。此外,利用Butterfly内建的FAQ模块,可以建立检索方便的经验库,和共享集体的智慧。
由于配置管理系统集中存储了企业的重要知识财富,因此对其安全性和可靠性有极高的要求。Firefly可以对所有存储的文件进行冗余校验,使用MD5作为文件的校验和,并提供备份和恢复工具,确保了数据的可靠性。同时Firefly支持用户身份验证和访问控制,支持用户组,便于权限设置。访问控制可以针对分支、目录,甚至单个文件设置,采用类似WindowsNTFS的权限管理方式,既灵活又安全。这些措施使得企业的知识财富得到了安全可靠的存储和。
本文由 恒宇国际(www.neivn.cn)整理发布