基于软件体系结构的版本管理模型的研究.docx
《基于软件体系结构的版本管理模型的研究.docx》由会员分享,可在线阅读,更多相关《基于软件体系结构的版本管理模型的研究.docx(115页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第一章 引言 传统的软件配置管理建立在文件版本控制的基础之上,现代大型软件系统的开发要求在更大粒度上进行版本控制。同时,基于软件体系结构的软件开发是当前的发展趋势,也需要适应其特点的版本管理模型的支持。1.1 版本管理模型概述1.1.1 配置管理概念随着软件开发规模的不断增大,一个项目中的中间软件产品的数目也越来越大,中间软件产品之间的关系也越来越复杂,对中间产品的管理也越来越困难,有效的配置管理则有助于解决这一问题。现在人们逐渐认识到,配置管理是适应软件开发需求的一种非常有效和现实的技术1。配置管理是软件过程的关键要素。它是一种按规则实施的管理软件开发和维护过程及其软件产品的方法。软件配置管
2、理系统在软件质量管理中也起着重要作用,它不仅是CMM的核心内容之一,是绝大多数软件过程工程和管理过程不可缺少的部分,也是国际标准化组织IS09000质量管理体系的核心内容之一。IEEE定义了软件配置管理(SCM)的标准2,在这个标准中,SCM应该定义四个主要方面:1)配置标识(configuration identification):产品、产品结构和产品中组件的标识及其类型;2)配置控制(configuration control):控制配置项及其组件的演化;3)配置状态统计(configuration status accounting):记录报告产品状态和变更请求,收集组件统计信息;4)
3、审计、审查(audits and reviews):维护产品完整性和一致性。后来,随着异质平台开发、团队协作的出现,配置管理的定义得到进一步的扩展。SCM还包括:5)生产(manufacture):管理产品组装和构建;6)过程管理(process management):执行组织的过程、策略和生命周期模型;7)团队合作(team work):支持开发者间的协作。1.1.2 版本管理概念版本管理是SCM的核心功能3,版本管理的基本任务就是同时管理一个数据元素的多个版本4。版本管理应该具备以下的基本功能:1)创建新本版;2)通过某种选择机制来访问特定的版本;3)对版本添加用户定义的名字或标识;4)
4、删除版本;5)维护版本间的关系;6)修改已存在的版本,这个操作一般是不允许的,至少不能是直接的;7)锁定特定版本;8)版本合并;9)赋给版本状态值和属性值;10)允许用户自定义数据对象间的关系。为支持版本管理,需要一个合适的版本模型。该模型需要定义进行版本化的元素,版本的标识及其组织,版本的查询,版本的创建等等。版本模型可因版本化的元素,版本的组织结构、版本的粒度、面向状态的版本或者面向变更的版本、版本的选择规则的不同而不同。5中定义了组成版本模型的基本术语,如图1.1所示:图1.1 版本模型基本术语1)版本、版本元素、配置项版本v代表着演化元素i的某一个状态。版本v可以通过表达式v = (p
5、s, vs)来表示,ps、vs分别代表版本v在产品空间和版本空间中的状态。版本元素指由版本库维护其演化的元素。配置是指一个复杂对象的某一版本,例如:软件系统的一个配置是由需求文档、软件体系结构、程序源代码的某一版本组成。2)增量两个版本之间的差别称之为增量。一个版本通过对基版本使用一组变更来创建新版本就是直接增量存储。而对于内嵌增量和选择增量存储,某一元素的所有的版本是存储在一起的,因此各版本间的共同部分可以共享。内嵌增量方式通过指针指向其片断来组成一个版本,选择增量方式通过可见性表达式来决定一个版本。3)版本演化各版本沿着时间轴方向顺序演化称之为修订。这样的演化一般是指修改前一版本的错误。而
6、对于各版本需要并行演化的称之为分支。4)版本描述面向状态的版本管理是指只关心版本元素的状态的版本管理。面向状态的版本管理通过修改和分支来描述一个版本。面向变更的版本管理通过对基线版本使用一组变更来描述一个版本。这样就可以跟踪每个版本到底执行了那些变更。面向变更的版本管理有许多的优点:j允许基于规则的版本查询,而非以枚举的方式浏览版本树;k可以容易的获取各文件的一致性版本,而无须以手工的方式创建;l非常容易比较两个版本间的差别。但面向变更的版本管理也存在问题:j变更的选项是线性增长的。当选项的数量超过一定值时,用户将面对繁多的选项而无法进行选择;k选项的命名一旦被确定将无法改变,这将导致以后若有
7、类似的选项将非常难于命名;例如:假设已经存在一个“fill”的选项,如果以后需要增加一个新的“fill”选项,其命名可能就只能是“newfill”;l由于选项是属于布尔型的,其取值只能是TRUE,FALSE和UNSET。则在某些情况下,会导致大量的选项出现。例如:若需要管理一个操作系统的属性,则对每种操作系统都需要增加一个选项(DOS,WINDOWS,UNIX等等);m面向变更的版本管理中版本之间没有什么明显的关系,每个版本都可以作为一个分支,缺乏一个版本的演化历史。n选项间并不是独立的,有可能存在多种关系;例如:互斥关系,一组选项中只有一个能取值为TRUE;依赖关系,选项的设置依赖于其他选项
8、的设置,比如我们不会设置SunOS选项,除非我们已经将UNIX选项设置为TRUE;面向状态的版本模型的优点:j可以清楚地看到版本的演化历史;k完整的保存各版本实体的内容;l可以容易的创建基线,配置等等。面向状态的版本模型存在的问题:j每个版本只代表一个状态信息,所以不能确定每个版本具体进行了哪些修改。k对一个版本描述一般来说只包含该版本与其父版本之间的差别,这样的描述既不精确也不全面。l版本之间的差别不能量化,难以实现自由版本查询。m版本选择大体是通过手工的方式进行。5)版本空间 分支和修订来组成一个版本图来代表一个版本空间。而网格通过将版本放置入一个n维的空间中来代表一个版本空间,空间中每一
9、维代表了一个需要选择的属性。6)版本集 一个版本元素的所有版本定义为集合V。V可以通过精确(枚举)或隐含(版本谓语)方式来定义。对于外延版本,V通过枚举方式进行定义:V = v1,vn。基于外延版本的版本管理支持检出之前创建的版本vi,然后再检入新版本vi+1。内沿版本支持灵活的创建一致的版本。对于内延版本,V通过一个逻辑的约束进行定义:V = v|con(v)。所有满足约束con的版本都属于V。通过一个选择谓语evd来选择集合V中的一个特定版本:evd(v)con(v),然后创建新版本。7)版本规则 内沿版本是建立在版本规则的基础上。约束定义了合法性规则,偏好定义了用户优先选择的规则,默认定
10、义了在没有指定的情况下的规则。8)粒度从用户的角度,版本的粒度可以是组件、完全、产品粒度:对于组件粒度,只有原子组件是在版本管理之下的,每个原子组件都有其自身的版本空间,可以将组件的特定版本组合成配置;对于完全粒度,不仅仅是原子组件,而是所有的组件包括配置都是在版本管理之下的;对于产品粒度,所有组件包括配置都在一个统一的全局的版本空间之下,例如:所有的面向变更的版本模型都采用这种版本粒度。9)工作区 为进行开发和维护工作,用户必须在版本库之外建立一个工作区,在工作区可以进行编辑、编译操作。工作区可以通过检出版本库中的数据至文件系统来创建,也可以通过选择谓语evd选择某一版本来提供一个虚拟的工作
11、区。1.2 版本管理模型分类1.2.1 按术语集分类使用1.1节中定义的术语,可以对现有的配置管理工具的版本模型进行分类。图1.2中将13种配置管理工具的版本模型按照版本描述和版本粒度分为四类。该分类从术语的角度进行分类,而不关心每个术语功能的实现程度。每一类中各个配置管理工具按照出现的年代及其继承关系排列。图1.2 基于术语的分类1)面向状态-组件粒度版本模型SCCS6是一个简单的管理文本文件的配置管理工具,版本通过版本树的形式进行存储。用户将一个版本检出到工作区中,当完成变更任务后,他将修改后的版本检入到SCCS版本库中。在SCCS中,文件的组织结构是不可见的。RCS7继承于SCCS,在许
12、多方面进行了改进。RCS使用直接增量进行存储,主分支上的最新版本可以直接访问,其他版本通过向后和向前增量进行创建。此外,RCS提供一组内嵌的属性集用以标记版本状态和助记名,助记名可以用来标记一个由所有组件的一致性版本组成的配置。RCS还能简单的支持内延版本(检出操作中可以包含属性规则)。但操作时RCS还是必须要先选择产品结构,并且不能对产品结构的版本进行建模。2)面向状态-完全粒度版本模型DSEE8整合了Make和SCCS/RCS的功能,支持基于规则的配置创建和网络的并行开发。DSEE使用一个系统模型来描述配置,系统模型描述了软件系统中的对象及其它们之间的关系。系统模型中不包含各实体的版本,它
13、们是通过配置规则来进行选择的。用户首先选择系统模型中的产品结构,然后再通过配置规则选择进行版本的绑定。ClearCase9继承于DSEE,它不仅对文件进行版本化,也对目录进行版本化,所有版本对象都统一称为元素。与DSEE不同,ClearCase像访问其他元素一样访问系统模型。3)面向变更-产品粒度版本模型Aide-de-Camp10通过一组变更集和基线来描述产品的版本。全局变更可以同时影响多个文件。在Aide-de-Camp中,变更集是完全顺序的,如果变更集c1先于变更集c2创建。则某一个产品的版本如果包含c2,则首先必须先包含c1。每一个变更集可以看作一个开关:或者开或者关。但Aide-de
14、-Camp不支持关系。在COV4中,版本数据库由一组片断组成,而每个片段都有一个逻辑的表达式称之为可见性(visibility)。可见性是一组全局的布尔选项(option),这组布尔选项组成了n-维的版本网格。COV通过选择(choice)和目标(ambition)规则来进行版本的读取和修改,选择中指定了所要选择版本的选项绑定,而目标通过选项绑定决定了修改会影响到的版本空间。4)面向变更-完全粒度版本模型 Asgard11实现在ClearCase之上,在版本图之上提供了面向变更的版本管理。每一个组件的版本通过活动(activity)进行标记,工作区通过基线和一组活动进行定义。从上面的比较可以看
15、出,版本模型从面向状态向面向状态和面向变更相结合的方向发展;从面向组件的粒度向面向完全的粒度方向发展。同时还可以看出虽然很多的版本管理模型实现的功能是相似的,但实现的程度却相差非常之大。因此在本文中实现的版本管理模型应该从实现功能的通行性方面和实现的程度方面来增强改进。1.2.2 按概念集分类还可以从版本管理模型提供的概念集,将版本管理模型分为以下四类12:检入/检出模式(CheckIn/CheckOut Model)这个模式提供单系统组件的版本管理。这样版本管理模型有两个独立的工具组成:版本库工具和创建工具。版本库工具负责存储文件的各个版本以及提供创建新版本的机制。创建工具提供一个文件描述用
16、于生成应用及自动生成导出文件。在版本库中的文件不能直接访问,只能通过检出操作,检出后的文件被保存至文件系统,从而能对其进行读写。版本库的并发控制机制可以协调多用户的读写活动。文件系统是用户真正的工作区。版本库工具没有提供对工作区的支持,而是依赖于文件系统来提供用户一个互斥的写访问工作区。用户按照寻常方式来使用创建工具等工具,文件的版本对于这些工具来说是透明的。创建工具通过解释文件系统中的文件描述来创建一个系统。这些文件描述可以存储在仓库中并像一般文件那样进行版本化。RCS13就属于这种类型的版本管理模型。组合模式(Composition Model)组合模式通过版本选择来创建系统配置,组合模型
17、是检入/检出模式的发展,它同样采用了版本库和工作区的概念,使用文件锁来进行并发控制。其主要的改进是支持创建配置,维护配置的历史。在该模式中,配置作为版本管理模型的实体。一个配置由一个系统模型和版本选择规则组成。系统模型列出了组成系统所需的所有组件,版本选择规则指明每个组件的版本。组合和选择的过程可以通过一个AND/OR图来表示。首先将组件组合成一个配置(AND节点),然后为每个元素选择合适的版本(OR节点),当然这个元素还可以是一个配置。DSEE14是属于这种类型的版本管理模型。长事务模式(Long Transaction Model)长事务模式将系统的演化描述为一系列的配置项版本和一系列并发
18、的活动。系统的演化过程一系列原子变更的过程,通过开发者来协调系统的这些变更。开发者对配置进行操作而不是对单个组件。选择一个配置作为变更的起点,对该配置所进行的修改外界是看不到的直到该事务提交。多个事务间通过并发控制进行协调。一系列变更的结果是一组顺序的配置版本,称之为开发路径。配置版本可以从已有的开发路径分支。在长事务模型中,开发者首先选择系统配置的一个版本,然后再关注系统的结构。组件的版本隐含的由配置决定。长事务由两个基本的概念组成:工作区和并发控制模式。工作区取代了文件系统,支持开发者在工作区内执行变更活动序列。通过将工作区中的配置进行提交,从而使得变更变得可见,同时这个配置将会添加到最初
19、的配置版本之后。此时一个事务结束。NSE15是属于这种类型的版本管理模型。变更集模式(Change Set Model)变更集模式关注于版本的逻辑变更,对于文件而言,变更集代表两个文件版本间的差别。对于配置而言,变更集代表两个配置间的差别。在这种模式中,配置由基线和变更集共同组成。如对系统发布版本的补丁程序就可以看成是一种变更集。变更集用来对逻辑变更进行跟踪,通过在逻辑变更的基础上定义新的配置。变更集模式本身不提供锁机制来进行并发控制,而是通常与检入/检出模式共同使用。Aide-De-Camp16就是属于这种类型的配置管理系统。 但以这种方式进行的分类存在一个缺点就是各种分类不是正交的,其中的
20、某一分类可能同时也属于另一分类。本文中的版本管理模型的目标应该在概念集上包含以上各种分类,因此在版本模型的设计上应该从不同的层次上对以上的概念集进行支持。1.3 软件体系结构概述1.3.1 软件复用复用是成熟的工程领域的一个基本特征,例如,土木工程、化学工程、计算机硬件工程等,通过大量复用经过实践检验的系统体系结构和标准化的构件,使得对于常规的设计问题都可以直接利用现成的解决方案,避免了系统开发时不断地重复设计,从而可以大幅度地降低开发成本、提高生产效率和产品质量。同样,复用也是软件工程走向成熟的必由之路,将为软件危机的解决提供一条现实可行的途径。基于构件的软件复用作为一种提高软件生产率和软件
21、质量的有效途径,是近几年软件工程界研究的重点之一,被认为是继面向对象方法之后的一个新的技术热潮17。通过基于构件的软件复用,在应用系统开发中可以充分地利用已有的构件,消除了在分析、设计、编码、测试等方面的许多重复劳动,可以提高软件开发的效率;同时,通过复用高质量的已有的构件,避免了重新开发可能引入的错误,可以提高软件的质量。因此,基于构件的软件复用可以大大降低软件开发的费用,并显著地提高生产率和产品质量。与软件复用相关的两个基本开发活动是面向复用的构件开发和基于构件复用的开发,前者是生产可复用构件的过程,后者是利用现有的可复用构件生产新系统的过程。可复用构件为有计划地、系统地进行复用提供了手段
22、,是实现软件复用的基石。软件复用最终体现为在软件体系结构的指导下对可复用构件的组装。1.3.2 软件体系结构概念自20世纪90年代初期开始,软件体系结构(software architecture,简称SA)的研究受到了广泛的关注和重视,并被认为将会在软件开发中发挥十分重要的作用。它将大型软件系统的总体结构作为研究的对象,认为系统中的计算元素和它们之间交互的高层组织是系统设计的一个关键方面18。其研究和实践旨在将一个系统的体系结构显式化,以在高抽象层次处理诸如全局组织和控制结构、功能到计算元素的分配、计算元素间的高层交互等设计问题19。SA是对软件总体结构的描述,即对其构件和构件间交互的高层组
23、织的描述18。它作为一种高层的设计,对系统开发发挥着重要的影响,基于构件的SA的设计已成为软件系统设计中的核心问题。一个好的SA设计成为大型软件系统成功的重要因素。SA的最重要的一个贡献是将构件之间的交互显式的表示为连接器(Connector),并将连接器视为和构件同等重要的一阶实体。构件通过接口定义了同外界的信息传递以及所承担的系统责任,构件接口包括了构件同周围环境的全部交互内容,也是构件同外界唯一的交互途径。除此之外,环境不应对构件作任何其他与接口无关的假设,例如实现细节等。连接器在构件请求接口与其他构件提供的接口之间搭建一座桥梁,起到了代理作用。在SA的设计过程中,人们针对不同的需求采用
24、了不同的软件构架风格。体系结构风格定义了一系列系统的结构组织的模式20,它是对一类具有相似结构的系统体系结构的抽象。体系结构风格既定义了构件及连接方式的各种属性, 又规定了它们的组合规则和限制18。近十年中人们设计了许多SA风格:1)管道-过滤器风格每个过滤器都有输入端口和输出端口,从输入端口读入数据流,进行局部的数据变换(计算或处理) 以后,在输出端口输出新生成的数据;管道则负责数据的传输,把数据从一个过滤器的输出端口传送到另一个过滤器的输入端口。这个过程是顺序渐增的过程,而且过滤器必需是相互独立的实体。这里的过滤器是指体系结构中的构件,管道是体系结构中的连接器。2)面向抽象和面向对象组织风
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 软件 体系结构 版本 管理 模型 研究
限制150内