技术开发 频道

软件配置管理概念(二)

    3.3.4 生命周期模型  

   Change and Configuration Control (CCC) [5] 提供了支持特定生命周期模型的概念,包括各个阶段的转换和这些阶段的数据管理,这是通过将整个生命周期分为开发、测试、确认和发布来完成的。这种分离允许不同的用户如软件工程师和测试员可以在同一份代码独立的执行他们自己的工作。这种阶段的分离和转换,以及独立的工作是通过将代码存入每个阶段独立的配置实现的,也就是说,产品是在某一基线基础上开发的。每个基线作为四种配置存在:开发、测试、确认和产品。配置是组件的一种等级关系,每个基线都有自己的方式。代码开发出现在开发配置,传递到测试配置以进行审查,然后是确认配置,最后是用户使用的产品配置。为了进入到下一个阶段,需要经过不同用户必须授权这个转换的交互(例如项目经理和测试经理)。在任何时候,对某个组件确认的等级可以从其所属的配置来得到,实际上,一个生命周期模型是通过不同配置状态实现的。


    3.4 结构和构建概念

   这个概念将处理:选择一个结构的组件;捕获一个组件及其结构的变更;访问结构的一部分;描绘和保持一个结构一致性的特性,包括:变更集、系统建模、子系统、对象池、属性和一致性维护,这些将在下面描述。

    3.4.1 变更集

   Aide-De-Camp (ADC) [1] 抽象了版本库中组件不同版本的区别的这一基本概念,使之成为一个区别关系并可以被访问。区别的关系,以及其应用的文件和其他变更的细节组成了变更集。ADC 捕获对一个配置的变更集,并且这个变更集可以用来构建一个配置的自定义版本。这个变更集有一个名字,可以在操作中使用,用户可以指定一个表达式来创建配置的特定实例,这个表达式可以为某个变更集指派一个应用的基线。一个变更集可以看作是和前一个变更集是相互独立的(会创建一个版本历史),也可以看作是非独立的(历史中选定的一部分被应用)。因此,用户可以工作在最新的版本上,也可以在自定义的版本上。变更集捕获对所有文件的所有修改,包括修改的原因和细节,以及修改的作者和时间。用户检验修改的范围,ADC会自动记录所有的变更细节。例如,用户希望对一个配置作出一个主要的修改来修正一个问题,用户指派一个变更集并且修改这个文件。这个变更集捕获:对配置中所有文件作出修正的原因;所有实际修改的代码(在配置中每个文件的区别);所有关联的文件变更;和作出修正的人和时间。用户在浏览每个文件或变更集时可以看到这些信息的大部分,作为汇总,变更集代表了一个产品的逻辑变更,也意味着创建版本的任何配置不必依赖于那个配置的最新版本。

    3.4.2 系统建模

   系统建模描述了一个软件产品的结构和它的组件及组建的创建方式。Jasmine [10] 系统模型是一个文本描述,用户可以调整,并且用来执行他们的任务。Jasmine系统建模由代表了四类信息的功能描述:(1)产品组件的关系,(2)版本绑定信息,(3)构建规则和(4)验证规则。关系描述了:产品的模块分解,如子模块的等级;组件的依赖关系,例如模块的创建次序;还有根据共同属性对组件的分类,如建立源程序或对象模块组。这种根据关系的产品描述叫做模板,这个描述捕获了它的结构。使用功能操作和关系,用户可以从简单中构建复杂的关系。这使的Jasmine可以回答用户定义的查询,例如修改某个模块会影响哪些组件。系统模型包括了族的概念,可以用来捕获产品的历史。一个族描述了组件版本的更迭,许多用户定义的产品版本组成了族,与之相关的还有每个版本的属性如创建日期和作者。查询,版本选择和规则都是基于这些属性,构建规则记录了当前组件是如何生成的,以及未来会怎样生成,例如记录编译器的版本和编译选项。验证规则指定和记录了产品的结构和组织约束,例如源代码和库模块必须一致(所有的二进制模块都是从这些源代码模块编译而得)。通过选择一个组件的一个版本,就会使用族的选择表达式执行评估,来确认这个模块查找的路径,选择的作为结果的模块就会以一个镜像(image)的形式绑定到模板。许多工具,如浏览器,模块retriever,调试器和内置模块分析器可以引用和处理这个系统模型。实际上,系统建模是对产品某个实例的一种抽象,通过对产品的完全描述,辅助其他工具来维护产品的完整性。

    3.4.3 子系统

   Ratinal [14] 环境支持将一个大的Ada产品分解成几个部分,允许限制变更影响的范围,这几个部分叫做子系统。子系统接口规范及其实现,代表了配置项目。因此,它们可以被看作一个整体,并通过它们的名字访问。子系统中的组件对其他子系统的组件不可见,除非是通过结构规范指派公开的。Ratinal环境会在运行时检查实现满足了接口说明,作为结果,可以在接口规范的实现上独立进行工作,只要用户愿意。重复编译只会在子系统的范围内进行,除非接口有改变;在任何时候,任何使用这些组件的产品需要重新编译,对接口规范的修改可能会需要整个产品的重新编译。子系统对它们的组件有版本控制,子系统可以是某个特定的版本。用户可以混合匹配子系统来组合一个产品的特定版本。总之,子系统代表了是一种限制变更和编译影响的方法,对于环境来说,检查了产品组合部分的正确性。

    3.4.4 对象池

   在系统建模中使用了这个概念,Domain Software Engineering Environment (DSEE) [8] 拥有生成特定导出的对象版本必要的信息。导出的对象放置在对象池中共享给用户,DSEE可以让用户为共享的对象指定对象期望的来源属性。导出的对象池保存了一组二进制文件和其他转换工具产生的产品。每个导出的对象都有对应系统模型的信息,包括源代码的版本和转换器用的转换选项,关于导出的用户注释,日期,时间,参与人和导出的位置。这些信息被叫作bound configu-file lists.ration thread (BCT),当DSEE进行了系统创建,它会为系统模型的每个组件计算目标BCT,DSEE会查看池来确定是否有符合期望的导出对象存在。如果有,就会被使用;如果没有,就会创建。因此,每当用户需要一个特定的导出对象(或是兼容的),DSEE可以重新使用池中的对象,而不需要重新生成对象。用户不必知道是否有导出对象存在;DSEE会检查所有的事情。一旦池中的某个对象已死(根据未使用时间),DSEE可以删除它们,清理空间。这样节约了编译时间和空间需要,并且重用了以前的工作。DSEE也提供了不同类型的对象池,例如对于源文件导出的对象一直会从版本库检出到特定的用户。实际上,CM系统优化了重新生成组件,并且使共享导出对象最大化。

    3.4.5 属性

   Adele [2] 系统通过使用具备建模能力的实体关系数据库来归纳版本库和系统建模。一个产品用数据模型描述,而Adele根据模型执行操作。产品组件通过有属性和关系的数据库对象代表,属性关联到每个对象以描述对象。一个属性有一个名称和一个值,例如属性名“delta”代表了对象是以ASCII形式保存,可以被压缩;它的值可以是“true”或“false”。需要区分两种类型的属性:预定义的和用户定义的。前者是Adele管理的,后者则是用户声明和管理的。一个预定义的,特别的属性是“type”,这个属性对每个对象是不可变的,在Adele中它代表了主要的CM类型(例如组合对象,文档,修订版本和元素)。关系定义了对象之间的依赖关系,例如,对象B源自对象A,用户可以按照对象间的属性描述配置,而不是对象特定版本的列表。Adele根据对属性及关系使用选择的规则和限制进行初始化和创建配置,用户可以对产品的期望特性定义任何结构(而不只是一个等级结构),因此,用户可以用一种高级别的方式来描述一个产品,而不仅仅是组合冗长的文件列表。

0
相关文章