软件配置管理系统(Software Configuration Management System)
目录 |
软件配置管理包括标识、控制、状态统计、审计和审查、生产、过程管理、小组协作。至于怎样才算是构成软件配置管理系统,对此还没有普遍认可的定义。例如,假如系统有版本控制功能,它是否就是一个软件配置管理系统?理想的软件配置管理系统是基于以上定义提供所有功能的系统。但是,实际中的系统只能实现某种程度上的版本控制功能、配置识别功能、系统构建功能、系统建模功能,或在某种程度上提供软件配置管理的意识,软件工程组会认为这些系统就是软件配置管理系统。现有的软件配置管理系统提供的只是一种功能的综合,而不是一个标准的系统。
下面介绍软件配置管理系统的两个重要概念:库和分布式组件。
(1)库
库是软件配置管理系统的根本。库是集中控制的文件库,并提供对库中所存储文件的版本控制。任何库中的文件都被视为在确定的软件配置管理之下。库中的文件是不会变的,即它们不能被更改。任何更改都被视为构造了一个新版本的文件。文件所有的软件配置管理信息和文件的内容都存储在库中。所以,任何配置的管理和控制都与库中的文件相关联。当工作于一个文件时,用户将某个版本的文件导入到自己的工作目录,然后开始工作;处理完后再将文件导回到库中。这样就生成了这个文件的新版本。因此,用户不可能导出一个文件并同时在库中修改源文件。
从库的角度来看,导出的文件被自动锁定直到文件重新被导入,一个版本号自动与新版本文件相关联。这样一来,用户可以随时根据特定的版本号导出任何文件。最新版本修改的结果将产生一个新的、顺序递增的版本;而对老版本修改的结果将产生一个分支版本。在版本编号策略和使用模式的共同作用下,产生了文件版本历史树,用来表示原始和更新后的版本。库中不但存储了文件的不同版本、更改的理由,而且存储了谁在什么时候替换了某个版本的文件等文件历史信息。注意,对于每个不同的版本文件,不是所有的代码都能被存储起来,而只是将不同版本间的差异进行存储,这称为增量。这种方法有利于节省空间以及节省对最新文件版本的访问时间。另外,可以根据状态给文件加上标签,然后基于状态的值进行导出。同样也可以根据修订版本号、日期和作者进行导出操作。因为,库总是和文件所在的目录相关联的。
总之,库控制软件配置管理信息,并把不同版本的文件存储为不可修改的对象。
(2)分布式组件
根据下面给出的例子阐述分布式组件。
Sherpa设计管理系统提供一个文件库,其中的文件分散地分布在不同的硬件平台上。在逻辑上,库是集中控制的;但在物理上,库中的数据是分散的。Sherpa设计管理系统自己知道数据的分散分布,并把这个因素考虑到软件配置管理系统中,如在提供必要的文件格式转换时提供一定的容错能力。
这样,对于用户来说,数据的分布是透明的。一组在地理上分散分布的用户可以针对同样配置的文件一起工作。多个文件的副本可以存在于在不同的工作站上。Sherpa设计管理系统知道最新文件版本的位置。对从库中所导出文件的任何更改都会导致所有分散在本地工作站上的副本更新,因为系统知道所有本地副本放置的位置。更新可以是一步一步交互式地发生,也可以是批处理式地完成。有效、分散分布的用户能够直接访问集中控制的库。对他们来说,软件配置管理能力看起来遍布整个异构网络。
软件配置管理系统的发展经历了两代。第一代软件配置管理系统仅仅只是处理文件版本控制的工具。它们是基于单一文件的工具,将各独立文件改变存储在特殊的文档文件之中,一般支持恢复提交模式,并提供分支。最早的这类工具是源代码控制系统,这些都是面向开发而并非管理的、简单的和独立的工具。
第二代软件配置管理系统则是基于项目数据库的,其最显著的特征是软件开发项目的源代码与它们的文档分离,而存储在一个数据库中,该数据库称为项目数据库或软件库。它们能够处理复杂的元素,提供不同的版本模型,是一个集成版本管理和项目组建功能的工具。例如,领域软件工程环境在实现对文件进行版本管理的基础上,应用了系统模型的描述和版本绑定等策略来支持项目组建,但这些工具仅仅是支持编码阶段的工具。
如图1所示显示了项目经理、配置管理者、软件工程师、测试者、质量保证经理及客户对软件配置管理系统的要求。图1所示中的每一个方框代表的是一个主要的功能区域。图1所示显示方框外的内容,包括部件、结构、创建、审核、统计、控制、团队、过程等,这些也是任何软件配置管理系统都应具备的功能。
在项目实际工作中,可以用VSS、CVS等工具来建立配置库。VSS(Visual SourceSafe)是Microsoft公司推出的配置管理工具,是Visual Studio的套件之一。CVS(Concurrent Version System,并行版本系统)是著名的开放源代码的配置管理工具,许多软件机构根据CVS官方提供的编程接口开发了各色各样的CVS客户端软件,最有名的当推Windows环境的CVS客户端软件——WinCVS,WinCVS是免费的,但是并不开放源代码。
1.建立配置管理系统的步骤
建立配置管理系统的步骤如下:
(1)组建配置管理方案构造小组。这个小组负责构造配置管理过程中的所有工作,包括了解本组织的现有开发、管理现状,选择配置管理工具,制订配置管理规范,安排试验项目的实施,沟通部门间关系,获得管理者支持和开发人员的认同。配置管理方案构造小组的成员应该包括:小组负责人、技术支持专家、配置管理技术专家、配置管理系统用户代表。
(2)对目标机构进行了解、评估。目标机构的调查评估工作由配置管理技术专家领导,配置管理系统用户代表参与,提供基本信息,并由小组负责人协调,对相关部门人员进行深入调查获得较全面的数据。对目标机构的了解、评估应从这几个方面入手:人员、技术、工作流程、现有项目和期望值。
(3)配置管理工具及其提供商评估。通过对组织的评估,了解该组织的现状和需求后,就需要选择适合该组织的配置管理工具。市场上现有的配置管理工具不下数十种,它们各有所长,在功能、性能等方面有较大的差别,只有经过仔细地对产品及其提供商进行分析评估,核对目标机构的需求,才能挑选出合适的工具,实现一个理想的配置管理过程。
(4)制订实施计划。
(5)定义配置管理流程。配置管理流程是软件开发机构进行配置管理的依据,也是配置管理构造小组的最重要的工作成果。配置管理流程规定开发过程中需要做哪些配置管理方面的工作,由谁做、如何做。
(6)试验项目的实施。这一阶段的任务是选取目标机构中的一个现有项目,按既定的配置管理流程去进行开发和配置管理工作。这种试验的目的是在一定风险范围内,通过实地运作来确定所选配置管理工具、所制订的配置管理规范是否能满足目标机构的需要。
(7)全面实施。经过试验项目证实、校正后的配置管理流程就可以在目标机构的各个项目、各个相关工作环节中去应用、实施,最终使配置管理过程日常化、规范化。
2.配置库的分类
配置库也称配置项库,是配置管理的有力工具。在软件工程中,主要有4类配置库:
(1)开发库(动态库、程序员库、工作库)。存放开发过程中需要保留的各种信息(新模块、文档、数据元素或进行修改的已有元素等),供开发人员个人专用,是开发人员的工作区,由开发人员(工程师)控制。库中的信息可能有较为频繁的修改,只要开发库的使用者认为有必要,无需对其做任何限制。因为这通常不会影响到项目的其他部分。
(2)受控库(主库、系统库)。用于管理当前基线和控制对基线的变更。受控库包括配置单元和被提升并集成到配置项中的构件。软件工程师和其他人员可以自由地复制受控库中单元或构件。然而,必须有适当的权限授权变更。受控库中的单元或构件用于创建集成、系统和验收测试或对用户发布的构建版。在开发的某个阶段工作结束时,将工作产品存入或将有关的信息存入。
(3)产品库(静态库、软件仓库、软件产品库)。在开发的软件产品完成系统测试之后,作为最终产品存入库内,等待交付用户或现场安装。产品库用于存档各种广泛使用的已发布的基线,控制、保存和检索主媒介,库内的信息也应加以控制。
(4)备份库。用来存放配置项备份版本的库,包括制作软件和相关架构、数据和文档的不同版本的拷贝时的复制品。在各时点的备份,例如,可以每天、每周或每月执行备份。
3.配置库的建库模式
决定配置库的结构是配置管理活动的重要基础。一般常用的是两种组织形式:按配置项类型分类建库和按任务建库。
按配置项的类型分类建库的方式经常为一些咨询服务公司所推荐,它适用于通用的应用软件开发组织。这样的组织往往产品的继承性较强,工具比较统一,对并行开发有一定的需求。使用这样的库结构有利于对配置项的统一管理和控制,同时也能提高编译和发布的效率。但由于这样的库结构并不是面向各个开发团队的开发任务的,所以可能会造成开发人员的工作目录结构过于复杂,带来一些不必要的麻烦。
而按任务建立相应的配置库则适用于专业软件的研发组织。在这样的组织内,使用的开发工具种类繁多,开发模式以线性发展为主,所以就没有必要将配置项严格地分类存储,人为增加目录的复杂性。因此,对于研发性的软件组织来说,还是采用这种设置策略比较灵活。
1.面向过程的配置管理系统(CCC/HAVEST)
CCC/HAVEST是CA(Platinum)公司的产品,是一个基于团队开发的,提供以过程驱动为基础的,包含版本管理、过程控制等功能的配置管理工具。CCC/HAVEST中的CCC代表Configuration & Change Control,即配置变更控制。CCC/HAVEST可帮助用户在异构平台、远程分布,以及并行开发活动的情况下保持工作的协调和同步。不仅如此,它还可以有效跟踪复杂的企业级开发的各种变化(变更)的差异,从而使用户可以在预定的交付期限内提交高质量的软件版本。
CCC/HAVEST能确保开发团队开发出支持已定义和可重复过程的软件产品,使得开发产品遵循严格的标准、过程和策略:需求→编码→测试→生成产品。CCC/HAVEST确保只有经过批准的变化,以及所有必需的组件被提交到生产环境。变化以“包”的形式加分组,提供了非常好的可见性和可管理性。测试人员只能看到那些提交到测试环境中的“包”相关的变化。该产品已经被美国国防部、NASDAQ,Intel,AT&T,3COM等多家单位采用,成为大中型软件单位软件配置管理工具的首选产品之一。
2.版本控制工具——VSS
VSS(Visual Soureesafe)是微软公司开发的一个管理代码产品,它基于客户—服务器结构,在服务器端建立VSS的数据库,共享该数据库,客户端指定连接到该数据库,并且支持用户级管理,对中文的支持也比较全面。VSS使用反向增量技术,确保一个文档的所有版本是可用的。VSS使用不同的机制存储文本文件和二进制文件。在实际使用中,VSS提供了在网络应用系统开发中的文件共享和文件锁定特性,可确保团队开发中代码的完整性和一致性。它可以使开发人员对源代码和由Visual J ++,Visual Basic,Visual C ++和Visual Foxpro开发的部件进行管理,对软件版本开发进度进行管理和控制,并可以防止由于网络文件锁定导致的版本冲突。此外,VSS还可以与VisualInterDev紧密集成,管理动态Web应用系统中的各种部件,这样可以大大提高团队开发中进度管理的有效性。
3.配置管理工具——DSEE
配置管理工具(DSEE)由历史管理程序(History Manger)、配置管理程序(Configuration Manager)、任务管理程序(Task Manager)和监控管理程序(Monitor Manager)4个部分组成。历史管理程序负责在库中储藏管理配置项的各个版本;配置管理器的主要功能是定义和建立配置;而任务和监控程序则主要负责控制软件修改过程。
下面重点讨论配置管理部分。
使用DSEE建立一个配置需涉及以下3个概念。
①系统模型(System Model):它指出欲导出此配置项所需的源项、工具(DSEE中称为翻译器)和过程。
②配置依据(Configure Thread):它包括推导配置项版本时所用的一组规则、工具和工具中的选件(Options)。
③导出项缓冲池(Derived Element P00l):每一配置项建立后都放入缓冲池中,它可以同时存放某配置项的几个版本。因此,缓冲池中每项均附一个BCT(Bound Configuration Thread),它列出推导此配置项所用的各源项和工具版本及工具选件。
图2说明上述3个概念之间的关系,以及采用DSEE定义和建立一个配置项的过程。DSEE首先根据“系统模型”和“配置依据”确定此次欲推导配置项的“BCT”,然后在缓冲池中查找那些可直接用于推导新配置项的配置项。正像一般Make工具,通过遍历项目依赖图,确定所有其所依赖的项在其建立之后从未改变过的项,直接使用它们,而不重新建立。如果在导出项缓冲池中能找到某个配置项,其BCT与欲推导配置项的BCT匹配,则DSEE立即重用它,不再重新推导。DSEE的一个优点就是允许各配置尽可能共享已经导出的配置项。
“系统模型”描述组成系统各分量之间的关系,即系统构成。系统模型包括每一个分量的形式(分为原子和聚合的),分量之间的依赖关系,以及每一个分量将被什么翻译器处理等。“配置依据”主要描述对于一次具体的配置建立,源项的哪些版本和翻译器的哪些选件将被使用。因此涉及版本和选件的命名与确定。为此,DSEE引入一套专用语言,描述“系统模型”的“配置依据”。
DSEE可以在网络环境下工作,此时建立配置的工作可在多个CPU上并行完成,图3说明并行建立机制,假设某用户在工作站A上要求DSEE建立某编译程序前端(指词法分析与语法分析部分),DSEE确定需要分别建立彼此独立的LEX.ASS和PARSER.C,选择结点B、C完成此项任务。这两个结点独立地从结点D的库中取所需源项,又将已建立完成的项目送到结点E的缓冲池中。4.配置管理工具——PVCS
PVCS是美国Intersold公司的产品,是一个贯穿整个软件工程过程的面向开发团队的SCM系统。它适用于不同平台、多种对象类型。PVCS能够在Windows、Windows NT、DOS、OS/2和多种Unix平台上运行。可为开发对象通过通用的结构,包括源代码、目标代码、图形对象和文本文件。通过对文件夹、项目、平台的控制,得以实现标准化。
PVCS可成为软件开发中质量管理的核心,利用PVCS可进行变更管理、版本管理、建立管理,并进行问题跟踪。在局域网环境安装PVCS,还能进行文档管理,可监督、修正开发项目,可跟踪软件系统的修改。在什么地方修改的、什么时间修改的、如何修改的。任何时候都可重构系统。PVCS能够防止软件变更后的冲突、覆盖和错误,以保证软件的安全性。
PVCS软件由以下7个部分组成。①PVCS Version Manager:版本管理程序。版本控制系统管理并保护开发者的软件资源。它有直观的图形用户界面,可快速、简便地帮助初学者和专家访问所有项目的部件和开发对象。先进的安全管理机制可按用户、开发组和功能,授与许可和特权。用户通过登入(Check in)和检出(Check out)的方式访问服务器上的文件,未经授权的用户则无法访问服务器上的文件。每次登入时,在服务器上都会生成新的版本,PVCS对软件版本的管理采取增量存储的方式。任何版本都可以随时检出编辑,同一应用的不同版本可以像树枝一样增长。PVCS具有加锁功能,可在文件更新时保护文件,避免不同用户更改同一文件时发生冲突。一旦某一文件登入结束,锁即被解除,该文件可由其他用户使用。
②PVCS Tracker:跟踪程序。跟踪程序为开发组织成员提供有效的通信机制,使各成员之间能够方便地交流开发过程中的问题、软件的缺陷和变化,并对出现的问题进行跟踪和统计。跟踪程序内置专用的数据库用于存储成员之间相互交流的有关信息,并通过易于使用的图形界面、多风格的集成式报表和统计图形,以直观的形式为项目管理员提供用于软件工程项目管理的有用信息。
③PVCS Configuration Builder:配置建立程序。在客户—服务器软件开发环境中,对软件变更进行管理,可满足团队开发的需要。它提供了在比较、链接、编译的同时自动建立应用程序的能力,使客户—服务器软件系统的建立自动化,并在任何时候都能完整、精确地重建任一版本的用户系统。Configuration Builder能够和Version Manager很好地相互配合,并能从现有的Version Manager文档中摘录正确的开发对象版本,尤其在多操作系统上建立复杂版本的过程简单且不出错。
④PVCS Production Gateway:生产网关。生产网关实现多个远程软件开发管理系统间的同步,同时提供了与主机软件开发管理库之间的互联。使用Production Gateway开发人员能够在远程工作站或MVS宿主机上共享PVCS中的代码、设置客户—服务器环境和建立软件部件。
⑤PVCS Reporter:报表生成程序。这是专用于PVCS的报表生成工具,提供在Window界面中可定制的报告,能更好地管理开发过程。利用其高级数据生成和报表系统,可以通过灵活的图形界面快速地生成定制报表。
⑥PVCS Developer’s Toolkit:开发工具箱。选用PVCS Developer’s Toolkit,可开发一个包含PVCS功能的应用系统。软件开发人员利用PVCS可以集成完整的PVCS功能,简便地在应用程序中增加版本控制能力。PVCS Developer’s Toolkit提供DLL文件、可链接库和头文件。这些文件可以提供所有PVCS Version Manager和Configuration Builder功能的能力。开发工具箱为开发组成员提供应用程序编程接口(APl),以建立与PVCS的接口或直接继承PVCS的功能。
⑦PVCS Notify:通告程序。Notify是一种E-mail通知系统,是PVCS Tracker的补充。该系统能够把新发现的软件缺陷和重要的更新信息及时通知所有开发团队的成员,以及拥有E-mail系统的用户,团队开发依赖于开发组成员之间有效通信。问题报告和改动要求在开发者、测试者和管理人员之间传送,重要的改动必须通知有关人员。Tracker和Notify消除了通信瓶颈,加快问题的解决;通过内置的消息机制或电子邮件系统的所有权和状态更改,信息可安全传送。
5.Clearcase
Clearcase是Rational公司推出的软件配置工具,主要基于Windows和UNIX的开发环境,提供了包括版本控制、工作空间管理、建立管理和过程控制等比较全面的配置管理功能,而且无需软件开发人员改变现有的环境、工具和工作方式,给那些经常跨越复杂环境(如Windows和UNIX系统)进行复杂项目开发的团队带来巨大效益。此外,ClearCase也支持广泛的开发环境。ClearCase数据存储在一个可访问的版本对象库(Version Object Base,VOB)中,ClearCase把所有版本控制的数据存放在一永久、安全的存储区中,即版本对象库中。项目团队(或管理者)可以决定其所需要的VOB数量,可以决定什么样的目录或文件需要被维护。ClearCase不仅可以对软件组件的版本进行维护和控制,也可对一个非文本文件、目录的版本进行维护。
Clearcase的先进功能直接解决了原来开发团队所面临的一些难以处理的问题,并且通过资源重用使开发的软件更加可靠。在当今日益激烈的竞争中,ClearCase作为规范的软件配置管理工具,满足了软件开发人员的大部分需求。