CompanyLOGO第4章软件配置管理•首都师范大学教育技术系•方海光第4章软件配置管理4.1.什么是软件配置管理软件配置管理(SoftwareConfigurationManagement,SCM)是指通过执行版本控制、变更控制等规程,以及使用合适的配置管理软件,来保证所有配置项的完整性和可跟踪性。配置管理是对工作成果的一种有效保护。软件配置管理(SCM)是贯穿于整个软件过程中的保护性活动。SCM目的是保证软件项目生成的产品在软件生命周期中的完整性和一致性.因为变化可能发生在任意时间,SCM活动被设计来:(1)标识变化;(2)控制变化;(3)保证变化被适当地实现;(4)向其他可能有兴趣的人员报告变化。软件配置管理使改进变化可以更容易地被适应,并减少当变化必须发生时所需花费的工作量。明确地区分软件维护和软件配置管理是很重要的。维护是发生在软件已经被交付给客户,并投入运行后的一系列软件工程活动,而软件配置管理则是当软件项目开始时就开始,并且仅当软件退出运行后才终止的一组跟踪和控制活动。配置管理与任何一位项目成员都有关系,因为每个人都会产生工作成果。配置管理是否有成效取决于三个要素:人、规范、工具随着计算机软件的发展,软件开发已由最初的“程序设计阶段”经历了“软件系统阶段”进而演变为后来的“软件工程阶段”,软件的复杂性日益增大。此时,如果仍然把软件看成一个单一的个体,就无法解决所面临的问题,于是配置的概念逐渐引入软件领域,人们越来越重视软件配置的管理工作。不懂软件项目的配置管理,就不懂软件开发管理不对软件项目进行配置管理,就没有进行软件项目开发管理软件配置管理是CMM2中6个关键过程域的第6个关键域。CMM2认为,SCM的目的是为了建立和维护软件开发过程中各种制品的完整性和一致性,包括以下内容:对软件产品配置的标志和识别系统地控制对处于配置管理下的各种软件制品的修改和更新维护软件开发过程中的各种制品的一致性和可跟踪性CMM2的配置管理概念SCM的目标目标1:软件配置管理活动被定义和计划目标2:软件开发过程中的制品被识别、控制和管理目标3:对于处于配置管理下的软件制品的修改被控制目标4:与软件制品相关的项目组和成员应该被通知制品的目前状态和被修改的信息SCM的目标从对配置目的的定义可以看出,CMM2的配置管理应包括这样一些活动:标识给定时间点的软件配置(即所选择的工作产品及其描述),系统地控制这些配置的更改,并在软件生命周期中保持这些配置的完整性和可跟踪性。CMM2认为,受控于配置管理的工作产品,包括交付给用户的软件产品(如:代码等),以及生成软件产品所需要的有关项(如:项目管理文件)。CMM2的配置管理活动最主要的内容是:建立软件基线库,该库存储开发的软件基线。通过软件配置管理的更改控制和配置审核功能,系统地控制基线变更和由软件基线库生成的软件产品版本。要达到CMM规定的SCM要求所需具备的能力:1.具有对软件基线产品有管理权限的组织已经建立,例如:软件配置管理委员会;2.协调和实现软件配置管理的组织已经建立;3.为进行软件配置管理所需要的各项资源已经分配;4.软件配置管理组织里的成员已经接受了软件配置目标、流程、方法方面的培训;5.软件项目组或是其他的相关的部门经过培训,可以执行他们的软件配置管理活动;CMM中对SCM规定的活动1.根据文档化的流程,项目软件配置管理计划已准备完毕;2.文档化的已获批准的软件配置管理计划可用作以后软件配置管理活动的基础;3.软件配置管理库已经创建,并可用作进入基线的软件制品的存贮库;4.处于软件配置管理下的软件制品被标志和识别;5.对于配置项的变更请求和问题报告被初始化、计划、评审、批准并根据文化化的流程对其进行跟踪;6.对于进入基线的制品的修改必须遵循文档化的流程;7.发布的产品必须从软件配置库中取出,并且产品发布的流程须依照文档化的流程和规定;8.根据文档化的流程和规定,软件配置项的状态被记录和跟踪;9.记录软件配置管理活动和软件基线内容的报告被建立,并通知受到影响的项目组和个人;10.根据文档化的流程进行软件制品基线的评审;CMM中对SCM规定的活动组织规定和相关责任项目级配置管理项目配置经理(ProjectConfigurationManager)与软件配置管理计划变更控制委员会(ChangeControlBoard)组织级配置管理组织配置管理库(OrganizationalConfigurationManagementCell)1.负责项目完成后的软件配置管理活动2.管理组织级的文档IEEE标准729-1983就配置管理的内容进行了规范的定义:(1)标识:识别产品的结构、产品的构件及其类型,为其分配唯一的标识符,并以某种形式提供对它们的存取。(2)控制:通过建立产品基线,控制软件产品的发布和在整个软件生命周期中对软件产品的修改。例如,它将解决哪些修改会在该产品的最新版本中实现的问题。(3)状态统计:记录并报告构件和修改请求的状态,并收集关于产品构件的重要统计信息。例如,它将解决修改这个错误会影响多少个文件的问题。(4)审计和审查:确认产品的完整性并维护构件间的一致性,即确保产品是一个严格定义的构件集合。例如,它将解决目前发布的产品所用的文件的版本是否正确的问题。(5)生产:对产品的生产进行优化管理。它将解决最新发布的产品应由哪些版本的文件和工具来生成的问题。(6)过程管理:确保软件组织的规程、方针和软件周期得以正确贯彻执行。它将解决要交付给用户的产品是否经过测试和质量检查的问题。(7)小组协作:控制开发统一产品的多个开发人员之间的协作。例如,它将解决是否所有本地程序员所做的修改都已被加入到新版本的产品中的问题。IEEE的配置管理定义CMM2的定义比较抽象,IEEE的定义比较具体。结合各体系的定义和要求,我们下面具体来讨论配置管理的概念。配置管理功能概述配置标识或者又称为配置需求,包括标识软件系统的结构,标识独立部件,并使它们是可访问的。配置标识的目的,是在整个生命周期中标识系统各部件并提供对软件过程及其软件产品的跟踪能力。它回答:什么是受控的?配置变更控制包括在软件生命周期中控制软件产品的发布和变更,目的是建立确保软件产品质量的机制。它回答:受控产品怎样变更?谁控制变更?何时接受,恢复,验证变更?配置状态统计包括记录和报告变更过程,目标是不间断记录所有基线项的状态和历史,并进行维护,它解决以下问题:系统已经做了什么变更?此问题将会对多少个文件产生影响?配置变更控制是针对软件产品,状态统计针对软件过程。因此,二者的统一就是对软件开发(产品、过程)的变更控制。配置审核将验证软件产品的构造是否符合需求、标准、或合同的要求,目的是根据SCM的过程和程序,验证所有的软件产品已经产生并有正确标识和描述,所有的变更需求都已解决。它回答:系统和需求是否吻合?是否所有变更都是在版本控制下?SCM的四大功能领域SCM从应用层次上可以从低到高分为三级:版本控制、以开发者为中心、过程驱动。版本控制主要应用于个人独立开发或小组开发,它可以控制任何文件的版本、实现分支和归并功能、进行文本比较、标记注释和版本报告信息,主要工具有MS的VisualSourceSafe及IntersolvPVCS。以开发者为中心主要应用于部门级开发,它可用于软件维护、不断增加的开发任务、并行开发、QA及测试,它面向大型团队、利于交流、能最大限度地利用人力资源,主要工具为RationalClearCase及MKSSourceIntegrity。过程驱动主要使用于企业级开发,着重解决新的工具引入、IT审核、管理报告、复杂的生命周期、应用工具包、集成解决方案、资料库等问题,实现真正规范的团队开发,主要工具为PlatinumTechnologyCCC/Harvest。SCM的三个应用层次SCM中的专业术语配置(Configuration)与配置项(ConfigurationItem)在软件开发过程中生成各种制品的总和叫做这个项目的软件配置[RogerS.Pressman,1997]计算机程序,包括源代码和可执行程序与计算机程序相对应的各种文档计算机数据,包括计算机程序中包含的数据和系统初始化数据基线项目开发过程的制品经过正式评审并被相关人员一致同意,可以作为以后项目开发的基础。对已经确定为基线的制品的修改必须要通过正式的变更控制流程。在软件工程环境中,基线是指在软件开发过程中的里程碑,这些里程碑的标志是一项或多项经过正式的技术评审并一致认同的软件制品的提交。配置数据库(软件制品基线库)项目建立和访问软件制品库,这个制品库主要用来对保存配置项和一些与软件配置管理相关的记录。目前比较好的配置管理工具:Clearcase(Rational),Notes/Domino(Lotus),PVCS(Merant)andVSS(Microsoft).4.2配置管理的商业理念企业的商业需求决定了配置管理的力度,我们不必追求完美无缺的配置管理,而是让开发团队恰好够用就行,并将为配置管理所付出的代价控制在预算之内。富有成效的配置管理的特征:1.任何项目成员都要对其工作成果进行配置管理,应当养成良好的习惯。不必付出过多的精力,最低要求是保证重要工作成果不发生混乱。2.配置管理规范应当清晰明了,便于执行,不必在细节方面要求太多,不给项目人员添加过多的负担,不使人厌烦。最大的麻烦是工作成果被覆盖。如果不采用配置管理软件来保存工作成果的历史版本的话,人们在同一个文件上修改内容,保存之后,那么新的内容覆盖了老的内容。如果没有软件配置管理,将有什么坏处?多数情况下新的内容比老的内容好,覆盖了也没关系。但是总有不少意外,例如程序员修改了老程序员之后,突然发现新程序是错误的,而老程序却是对的,可是老程序被新程序覆盖了,再也无法恢复。–怎么办呢?还能怎么办,只好重新写老程序再覆盖新程序,可是过一阵子又发现新程序也又可取之处,这时却无法恢复新程序了,只好重新写新程序再覆盖老程序,…如果你经常碰到这样的事情,你会发疯的。为了避免成果被覆盖,很多人采用最原始的手工管理版本的方式,例如给文件加后缀“-01”、“-02”以表示版本。天长日久,工作目录下就会有一堆带数字后缀的文件,而且你自己也忘记了数字后缀代表什么内容,管理起来非常麻烦。最直接的好处是工作成果的所有版本都被保留着,不会丢失也不会被覆盖,你不会气得发疯了。使用软件配置管理,将有什么好处?如今硬盘的存储空间价格低廉,用于保存历史版本的存储空间的成本可以忽略不计。如果你保存了工作成果的100个历史版本,哪怕99版本都是“垃圾”,只有一个版本里有“黄金”,那也值了。所以你尽管放心保存历史版本好了,累的是计算机又不是你,你怕什么。间接的好处是,项目的所有工作成果被完整地保留下来,这是企业的知识财富,可以被人们很好地分享利用。而且减少了人员辞职造成的损失,企业老板可以放心很多了。–因为如果没有配置管理的话,人走了,即使他把成果刻录成光盘交给接收者,别人也搞不清楚那些成果的演化过程。事在人为配置管理的方法是成熟的,而且相应的软件工具也是成熟的,基本上不存在看不懂、不会用的问题。配置管理的执行效果如何,完全应了中国的一句老话“事在人为”啊。妨碍配置管理的主要问题是人们“嫌麻烦”(还有侥幸心理)。在没有出乱子的情况下,执行版本控制看起来有些麻烦。每次修改工作成果的时候,总是先checkout,然后再修改,最后还要checkin,多了前后两步。其实checkout和checkin两步操作只需花费几秒钟,而且不费脑子,凭良心说根本没有添加麻烦,仅仅是个人感觉不爽快而已。然而不执行版本控制的话,万一发生工作成果被覆盖或丢失等问题,那么麻烦就大了。4.3配置项软件研发和管理过程中会产生许许多多的工作成果,例如文档、程序和数据等,它们都应当被妥善地保管起来,以便查阅和修改。如果把所有文件一股脑地塞进计算机里,那么使用起来肯定很麻烦。毫无疑问,人们应当将