软件工程第17章软件配置管理主要内容软件配置管理概述SCM中心存储库SCM过程小结软件配置管理软件配置管理(SCM),也称为变更管理,是一组管理变更的活动。它通过下面的方式来管理变更:识别可能发生变更的工作产品,建立这些工作产品之间的关系,制定管理这些工作产品的不同版本的机制,控制所施加的变更,审核和报告所发生的变更。参与软件过程的每个人在某种程度上都参与变更管理,但是有时候也设专人来管理SCM过程。软件配置管理如果不控制变更,将被变更所控制。一个未受控制的变更流可以很容易地将一个运行良好的软件项目带入混乱。结果会影响软件质量并且会推迟软件交付。为此,变更管理是质量管理的重要部分。因为在构建软件时会创建很多工作产品,因此每个工作产品都需要唯一标识。一旦成功完成标识,则可以建立版本和变更控制机制。为保证变更发生时维护质量,变更过程需要审核;为了通知那些需要知道变更的人员,需要进行变更报告。软件配置管理软件配置管理计划定义变更管理的项目策略。另外,当启动正式的SCM时,变更控制过程将产生软件变更请求、报告和工程变更工单。当每个工作产品都可以标识、跟踪和控制时,当每个变更可以跟踪和分析时,当每个需要知道变更的人都通知到时,变更管理的目的就达到了。软件配置管理软件配置管理(SCM或CM),是贯穿于整个软件过程的普适性活动。因为变更可能随时发生,所以SCM活动的目标就是为了:(1)标识变更;(2)控制变更;(3)保证正确地实现变更;(4)向其他可能的相关人员报告变更。软件配置管理明确地区分软件支持和软件配置管理是很重要的。软件支持是一组发生在软件已经交付给客户并投入运行后的软件工程活动。而软件配置管理则是在软件项目开始时就启动,并且只有当软件被淘汰时才终止的一组跟踪和控制活动。软件工程的主要目标是当发生变更时,使变更更容易地被接受,并减少变更发生时所花费的工作量。软件配置管理概述软件过程的输出信息主要分为三类:(1)计算机程序(源代码和可执行程序);(2)描述计算机程序的文档(针对不同的软件开发人员和用户);(3)数据或内容(包含在程序内部的数据,或程序外部的数据)。在软件过程中产生的所有信息项总称为软件配置。如果一个软件配置项只是简单地推导出其他一些软件配置项,则几乎不会产生混乱。但不幸的是,在这个过程中还有另一个变量——变更。变更可能毫无理由地随时发生。正如系统工程第一定律所述:不管你处在系统生存周期的什么阶段,系统都可能发生变更,并且在整个生存周期中将会持续不断地提出变更的要求。软件配置管理变更有四个基本的原因:新的业务或市场条件导致产品需求或业务规则的变更。新的客户需求,要求修改信息系统产生的数据、产品提供的功能或系统提供的服务。企业改组或扩大/缩小规模,导致项目优先级或软件工程团队结构的变更。预算或进度安排的限制,导致系统或产品的重新定义。软件配置项管理是一组用于在计算机软件的整个生命周期内管理变更的活动。SCM可被视为应用于整个软件过程的软件质量保证活动。SCM场景典型的CM工作场景包括:负责软件小组的项目经理、负责CM规程和方针的配置管理员、负责开发和维护软件产品的软件工程师以及使用软件产品的客户。在下述场景中,假定由6个人组成的团队正在开发一个约15000行代码的小型软件。在操作级别上,SCM场景包括多种角色和任务。项目经理的职责是保证在确定的时间框架内开发出产品。因此,项目经理必须对软件的开发进展情况进行监控,找出问题,并对问题做出反应。这可通过建立和分析软件系统状态报告,并执行对系统的评审来完成。SCM场景配置管理员的职责不仅是要保证代码的创建、变更和测试要遵循相应的规程和方针,还要使项目的相关信息容易得到。为了实现维护代码变更控制的技术,配置管理员可以引入正式的变更请求机制、变更评估机制和变更批准机制。配置管理员要为工程师们创建和分发任务单,并且还要创建项目的基本环境,而且,还要收集软件系统各个构件的统计信息。SCM场景软件工程师的目标是高效地工作。即软件工程师在代码的创建和测试以及编写支持文档时不做不必要的相互交流;但同时,软件工程师们又尽可能地进行有效的沟通和协调。特别是,软件工程师可以使用相应的工具来协助开发一致的软件产品;软件工程师之间可以通过相互通报任务要求和任务完成情况来进行沟通和协调;通过合并文件,可以使变更在彼此的工作中传播。对于同时有多个变更的构件,要用机制来保证具有某种解决冲突和合并变更的方法。依据系统变更原因日志和究竟如何变更的记录,历史资料应该保持对系统中所有构件的演化过程的记录。软件工程师有他们自己创建、变更、测试和集成代码的工作空间。在特定点,可以将代码转变成基线,并从基线做进一步的开发。SCM场景客户只是使用产品。由于产品处于CM控制之下,因此,客户要遵守请求变更和指出产品缺陷的正式规程。理想情况下,在本场景中应用的CM系统应该支持所有的角色和任务。即角色决定了CM系统所需的功能。项目经理可以把CM看做是一个审核机制;配置管理员可以把CM看做是控制、跟踪和制定方针的机制;软件工程师可以把CM看做是变更、构建以及访问控制的机制;而用户可以把CM看做是质量保证的机制。配置管理系统元素开发配置管理系统时应具备四个重要元素:构件元素——是一组具有文件管理系统功能的工具,使我们能够访问和管理每一个软件配置项。过程元素——是一个动作和任务的集合,它为所有参与管理、开发和使用计算机软件的人员定义了变更管理的有效方法。构造元素——是一组自动软件构造工具,用以确保装配了正确的有效构件集。人员元素——为了实现高效的SCM,软件团队可利用的一组工具和过程特性。基线基线是已经通过正式评审和批准的规格说明或产品,它可以作为进一步开发的基础,并且只有通过正式的变更控制规程才能修改它。在软件配置项成为基线之前,可以较快地且非正规地进行变更。然而,一旦成为基线,虽然可以进行变更,但是必须应用特定的、正式的规程来评估和验证每次变更。基线是软件开发中的里程碑,其标志是在正式技术评审中已经获得批准的一个或多个软件配置项的发布。基线例如,某设计模型的元素已经形成文档并通过评审,错误已被发现并得到纠正,一旦该模型的所有部分都经过了评审、纠正和批准,该设计模型就成为了基线。任何对程序体系结构的进一步变更只能在每次变更被评估和批准之后方可进行。虽然可以在任意细节层次上定义基线,但最常见的软件基线如图17-1所示。基线化的SCI和项目数据库图17-1基线化的SCI和项目数据库软件配置项软件配置项是在软件工程过程中创建的信息。在极端情况下,大型规格说明中的一节、大型测试用例集中的一个测试用例都可以看做是一个SCI。再实际点,一个SCI可以是工作产品的全部或部分。除了这些来自软件工程工作产品的SCI之外,很多软件工程组织也将软件工具列入配置管理的范畴,即,特定版本的编辑器、编译器、浏览器以及其他自动化工具都被“固化”为软件配置的一部分。因为要使用这些工具来生成文档、源代码和数据,所以当要对软件配置进行变更时,必须得到这些工具。虽然并不多见,但一个工具的新版本有可能产生和原版本不同的结果。因此,就像它们协助开发的软件一样,工具也可以基线化为完整配置管理过程的一部分。软件配置项在现实中,是将SCI组织成配置对象,这些配置对象具有自己的名字,并且按类别存储在项目数据库中。一个配置对象具有一个名称和多个属性,并通过关系来表示与其他配置对象的“关联”。在图17-2中,分别定义了配置对象DesignSpecification、DataModel、ComponentN、SourceCode和TestSpecification。各个对象之间的关系如图中箭头所示,单向箭头表示组合关系,即DataModel和ComponentN是DesignSpectification的组成部分。双向箭头说明对象之间的内在联系,如果SourceCode对象发生变更,软件工程师通过查看内在联系能够确定哪些对象可能受到影响。配置对象图17-2配置对象SCM中心存储库SCM中心存储库是一组机制和数据结构,它使软件团队可以有效地管理变更。通过保证数据完整性,信息共享和数据集成,它具有数据库管理系统的一般功能。此外,SCM中心存储库为软件工具的集成提供了中枢,它是软件过程流的核心。它能够使软件工程工作产品强制实施统一的结构和格式。为了实现这些功能,用术语元模型来定义中心存储库。元模型决定了在中心存储库中信息如何存储、如何通过工具访问数据、软件工程师如何查看数据、维护数据安全性和完整性的能力如何,以及将现有模型扩展以适应新需求时的容易程度如何等。中心存储库的一般特征和内容中心存储库的特征和内容可以从两个方面来理解:中心存储库存储什么,以及中心存储库提供什么特定服务。中心存储库中存储的表示类型、文档和工作产品的详细分类如图17-3所示。一个健壮的中心存储库能够提供两种不同类型的服务:(1)期望从任何一个复杂的数据库管理系统得到相同的服务类型;(2)特定于软件工程环境的服务类型。作为软件工程团队的中心存储库,应该:(1)集成或直接支持过程管理功能;(2)支持在中心存储库中管理SCM功能的特定规则和维护数据;(3)提供与其他软件工程工具的接口;(4)能够存储各种数据对象。中心存储库的内容图17-3中心存储库的内容SCM特征为了支持SCM,中心存储库必须具有支持下列特征的工具集:版本控制。随着项目进展,每个工作产品都可能有很多版本。中心存储库必须能保存所有这些版本,以便有效地管理产品发布,并允许开发者在测试和调试过程中可以返回到早先的版本。依赖性跟踪和变更管理。中心存储库要管理所存储的配置对象之间的各种关系。保持追踪这些关系的能力对中心存储库中存储信息的完整性、基于中心存储库的可交付工作产品的生成是至关重要的,而且这是中心存储库概念对软件开发过程改进最主要的贡献之一。SCM特征需求跟踪。这种特殊的功能依赖于相关管理,并可以跟踪由特定需求规格说明产生的所有设计构件、架构构件以及可交付产品。此外,还能够用来辨别指定的工作产品是由哪个需求产生的。配置管理。配置管理设施能够跟踪表示特定项目里程碑或产品发布的一系列配置。审核跟踪。审核跟踪使我们能够了解变更是在什么时候、什么原因以及由谁完成等信息。SCM过程软件配置管理过程中定义的一系列任务具有四个主要目标:(1)统一标识软件配置项;(2)管理一个或多个软件配置项的变更;(3)便于构造应用系统的不同版本;(4)在配置随时间而演化时,确保能够保持软件质量。能够取得上述4个目标的过程不应过于原则和抽象,也不要太繁琐,这个过程应该具有使软件团队能够解决一系列复杂问题的特色:软件团队应该如何标识软件配置的离散元素?组织应该如何管理程序(及其文档)的多个已有版本,从而使变更能够高效地进行?组织应该如何在软件发布给客户之前和之后控制变更?应该由谁负责批准变更并给变更确定优先级?我们如何保证能够正确地完成变更?应该采用什么机制去评价那些已经发生了的变更?上述问题引导我们定义了5个SCM任务:标识、版本控制、变更控制、配置审核和报告,如图17-4所示。SCM过程的层次图17-4SCM过程的层次软件配置中的对象标识为了控制和管理软件配置项,必须对每个配置项单独命名,然后用面向对象的方法进行组织。可以进行标识的对象有两种类型:基本对象和聚合对象。基本对象是软件工程师在分析、设计、编码或测试过程中所创建的“信息单元”。聚合对象是基本对象和其他聚合对象的集合。每个对象都具有一组能够唯一地标识它的独特特征:名称、描述、资源表及“实现”。标识对象时也可以考虑各个标识对象之间的关系。在配置对象的标识过程中必须注意到,对象在整个软件过程中是不断演化的。在一个对象被确定为基线之前,它可能会变更很多次,甚至在已经被确定为基线之后,变更也可能会经常发生。版本控制版本控制结合了规程和工具,可以用来管理在软件过程中所创建的配置对象的不同版本。版本控