《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 业界动态 > 形式化方法对构件库管理系统支持的探讨

形式化方法对构件库管理系统支持的探讨

2008-06-04
作者:边小凡1,朱建林1,王 倩2

  摘 要: 依据网上信息收集系统构件库" title="构件库">构件库中构件的开发和管理经验,提出一种构件模型" title="构件模型">构件模型,并阐述了此模型对基于语义的构件检索、构件组装和构件演化的自动化支持。
  关键词: 构件模型 构件库 形式化方法 形式化描述。


  在基于构件的软件开发(CBSD)[1][2]中,作为复用" title="复用">复用基础设施的构件库系统已成为企业内部和企业间协作的必然装备,而要建立系统化的构件库,建立合适的构件模型是第一步。构件模型是构件本质特征及构件间关系的抽象描述。它定义了构件的本质属性,规定了构件接口的结构以及构件与软件体系结构、构件与构件之间的交互机制。构件模型通常还提供创建和实现构件的指导原则。
1 当前典型构件模型简介与分析
  在围绕构件库进行软件开发的过程中,不同的角色、不同的关注点所需要的构件信息也不相同。基于这一认识北京大学信息科学技术学院软件研究所将构件模型分为三种:构件描述、分类的模型,构件规约、组装的模型和构件实现的模型。下面以这种分类方法来分析一下当前典型构件模型。
  (1)构件描述、分类的模型试图以一种综合的方式来描述构件,使得构件易于为用户所理解,易于在库中被有效高效地分类、存储和检索。REBOOT(Reuse Based Object-Oriented Techniques)模型就是其中之一,它通过刻面的" title="面的">面的方法从各个角度刻划软构件属性,来实现对构件的分类和检索。
  (2)构件规约、组装的模型描述构件的功能和行为规约,并通过配置这些规约来刻划系统。著名的3C模型[3]就是用来刻划构件规约和组装的。3C模型是一个指导性的构件模型,它从概念、内容、语境三个部分来描述构件,但是3C模型缺乏形式化定义和易懂的描述,因此仅具有一定的宏观指导意义。
  (3)构件实现的模型用于帮助人们决定如何用某种程序设计语言或以某种可执行单元的形式来实现构件。有代表性的实现级工业标准构件模型有CORBA、DCOM/COM和Enterprise JavaBean,三足鼎立构成竞争与互操作并存的格局,工业构件模型最大的缺点在于其缺乏对构件语义的深入支持。
  综合考虑现有的构件模型,可得出以下结论:
  (1)现有的面向构件描述和分类的模型缺乏对构件语义特别是构件领域特征的语义的描述,而这些正是理解构件基于领域的复用价值的关键。
  (2)现有的面向构件规约和组装的模型缺乏对构件演化的支持,对构件组装的支持机制也未达到标准化。
  (3)现有的构件模型都很少涉及有关构件复用和构件管理的信息,比如构件的复用度等。
  (4)在构件库系统中,构件模型的应用是既面向构件描述和分类又面向构件规约和组装的,而目前关注如此多方面的构件模型还不多见。
2 对构件库中构件模型的改进
  人们对构件库中构件的操作包括入库、检索、学习、组装和演化等,在对构件进行这些操作时,变换支持其实现的底层构件模型是不现实的。所以,笔者试图探求一种构件描述模型,并让它同时支持构件的语义检索、自动化组装、以及对演化的自动化支持等。
2.1 构件模型所要描述的信息
  在对构件进行描述之前,必须先明确有哪些信息需要被构件模型来描述。而要明确构件模型中到底需要记录那些信息,就应该看构件库中围绕构件都做了哪些活动。经过分析,构件库中分角色对构件的操作有:
  (1)构件发布者:注册构件描述、分类信息;注册构件实体信息(离线构件);注册构件接口信息(在线构件)。
  (2)软件开发人员:查询;下载构件实体(离线构件);获取构件接口信息(在线构件);学习构件的功用和构件的用法等信息;应用构件进行应用系统组装;对不适用的构件进行演化。
  为了支持这些活动,构件模型中应该具有下列信息:
  (1)面向构件描述和分类的信息
  所有对用户查找、理解、选择、适应性修改以及使用构件有帮助的信息;
  所有对构件库管理者分类和管理构件及构件间关系有帮助的信息;
  构件的其他属性,包括:生产者、版本、使用者、反馈意见、知识产权控制等。
  (2)面向构件规约和组装的信息
  构件对外提供的功能;
  构件需要外界为它提供的功能;
  构件被用于什么语境;
  支持构件演化的信息。
  综上所述,不同的角色在构件库中对构件的操作也不同。所以,对构件的信息需求也不同。在一般情况下,可以认为在企业里构件的入库者就是构件的生产者[3],他们应该将主要的构件描述信息在构件入库时录入进去;而构件使用者对构件的行为有查找、学习、组装和演化等,并且在构件使用者应用构件库进行软件开发时,在不同时期所关注的构件信息也是不同的。所以,应该分阶段、分层次地把构件的信息展现给构件使用者。在这里,将按照查找、学习、组装与演化三个层次来展现构件的性质。
2.2 构件模型
  构件(Component)是指语义完整、语法正确和有可复用价值的单位软件,是软件复用过程中可以明确辨识的系统构成[4]。结构上,它是基于检索部分、基于学习部分和基于组装和演化部分的复合体。
  Component==[RetrievalPart,StudyPart,AssemblyAndEvo-lvementPart]
  也可以表示为:
  Component==RetrievalPart×StudyPart×AssemblyAndEvo-lvementPart
  这里,RetrievalPart是基于构件检索的部分,查找的目的是为了能够准确、快速地找到所需要的构件,这里支持构件查找所用的描述信息由六个刻面和复用度(一个“属性-值”对)组成;为了能够支持计算机检索,这部分信息必须用形式化语言来描述。StudyPart是对构件学习的部分;学习阶段的目的是进一步确定构件是否满足软件开发的要求,这部分工作是由构件使用者来做的,所以用自然语言" title="自然语言">自然语言描述最合适;支持构件学习的信息可以分为构件内部信息描述和构件外围信息描述两种,构件的内部信息是外界可见的属性和行为,其中包括:公有属性及对它们的自然语言描述和公有行为及对它们的自然语言描述。构件的外围描述包括:生产者,版本,使用者,反馈意见,知识产权控制等。AssemblyAndEvolvementPart是支持构件组装和演化的部分;组装和演化阶段软件使用者所关心的是构件的具体功能和构件的详细使用语境,为了使这阶段支持自动化组装,所以这部分应该用形式化语言描述。
2.2.1 基于检索的部分
  基于检索部分描述的主要目的是为了能够准确、快速地找到所需要的构件。很多专家学者在这方面已经做了很多工作,目前各类构件库中使用最多的是关键词分类法,枚举、层次分类法,属性-值分类法和刻面分类法[5]四种。这里选用了刻面分类法来描述构件,并加入了复用度这个属性-值对来描述构件的复用价值。刻面分类部分选取了功能(Functionality),层次(Level),表示方法(Representation),硬件环境(HardwareEnvironment),软件环境(SoftwareEnvironment),程序语言(Programming Language)六个刻面来描述。
  定义1 基于检索部分(RetrievalPart)。基于检索部分可以表示为:
  RetrievalPart=[Functionality,Level,Representation,Hard-wareEnvironment,SoftwareEnvironment,ProgrammingLanguage,ReuseDegree]
  其中,功能选取的术语:任务管理,资源管理,时间管理,编程支持,中断管理,异常管理,用户界面,安全管理,网络服务,数据库管理等;层次选取的术语:需求,设计,实现,实施,测试等;表示方法选取的术语:源代码,目标代码,文档,图表等;硬件环境选取的术语:CPU,内存,显卡,主板等;软件环境是所需软件的列表,其中既包括系统软件又包括应用软件,例如:Win98,Win2000,WinXP,Linux,Office2000等;程序语言选取的术语:C,C#,Visual C++,VB,Java,Visual Foxpro等。这里给选取的术语空间加入机器学习的机制,随着新构件的不断入库,更多、更规范的术语的出现,来不断丰富和完善各个刻面的术语空间。
  定义1.1 复用度(ReuseDegree)。复用度等于初始值(Initialization)加上复用次数与入库时间的比值。
  ReuseDegree=Initialization+ReuseTime/EnterTime
  初始值在软件入库时由入库人员设定,并且在以后的构件库运行过程中可以由构件库管理人员或构件使用者更改。
2.2.2 基于学习的部分
  定义2 基于学习的部分(StudyPart)。基于学习的部分可以分两部分来描述:内部信息描述(InnerInfo)和外围信息描述(OuterInfo)。
  StudyPart=[InnerInfo, OuterInfo]
  其中,内部信息描述的是构件能向外界提供什么服务,需要外界为它提供什么服务,包括:外显的属性和向外提供的服务及其自然语言描述。外部信息描述的是构件的一些外部信息,如生产者、版本、使用者、反馈意见、知识产权控制等。
  定义2.1 内部信息描述(InnerInfo)。内部信息描述按照构件结构分成公有属性(PublicAttribute)和公有行为(PublicAction)两部分描述。
  InnerInfo=[PublicAttribute, PublicAction]
  定义2.1.1 公有属性。公有属性的结构是属性名称(AttributeName)和相对应的自然语言描述(AttributeNatureLanguageDescription)的对偶。因为基于学习部分是让“人”去学习,所以用自然语言描述是最合适的。
  PublicAttribute=[AttributeName,AttributeNatureLanguage-Description]
  定义2.1.2 公有行为。公有行为的描述结构和公有属性的描述类似,是行为名称(ActionName)和相对应的自然语言描述的对偶。其中,行为名称和构件库中构件的真实行为名称应保持一致。
  PublicAction=[ActionName,ActionNatureLanguageDesc-ription]
  定义2.2 构件的外部信息。构件的外部信息包括:生产者(Producer),版本(Edition),使用者(User),反馈意见(Feedback),知识产权控制(PropertyRight),入库时间(EnterTime),复用次数(ReuseTime)。
  OuterInfo=[Producer,Edition,User,Feedback,Property-Right,EnterTime,ReuseTime]
2.2.3 基于组装和演化的部分
  基于组装和演化部分描述的目的是为了更好地支持构件的组装和演化。在支持组装方面,此模型支持找出与构件组装相关的其他构件,提供构件接口的语法与语义描述和提供构件的实现体。在支持演化方面,此模型支持找出所有与演化构件相关的构件,分析是否有必要将相关构件一起演化。
  定义3 基于组装和演化部分(AssemblyAndEvolvementPart)。基于组装和演化部分用来描述支持构件组装和演化的信息。这里从构件关系语境(ComponentRelationContext)、接口(Interface)、实现(Implementation)三个方面来刻划。
  AssemblyAndEvolvementPart=[ComponentRelationContext,Interface, Implementation]
  ComponentRelationContext:构件关系语境集合,描述构件间的关系;Interface:接口集合,接口是描述构件的通信接口规范和语法约束;Implementation:实现集合,实现是满足接口规范和语义描述的实例。
  通过网上信息收集系统的实践和多年来的研究,总结构件间的关系有如下五种[6],如表1所示。


  定义3.1 构件关系语境。根据表1中划分的五种构件关系,构件关系语境可以表示成一系列构件的列表,其中包括:版本关系构件列表,协作关系构件列表,精化构件列表,被精化构件列表,包含构件列表,被包含构件列表,依赖构件列表,被依赖构件列表。形式如下:
  ComponentRelationContext=[EditionRelTab,Cooperation-RelTab,SubtleRelTab,BeSubtleRelTab,InclusionRelTab,Be-InclusionRelTab,RelyRelTab,BeRelyRelTab]
  定义3.2 接口。接口体是描述构件的通信接口规范和语法约束,它可以分为三部分描述:接口名称(InterfaceName)、接口函数(InterfaceFunction)、接口语义(InterfaceSemantic)。
  Interface=[InterfaceName,InterfaceFunction,InterfaceSe-mantic]
  定义3.2.1 接口函数(InterfaceFunction)。接口函数的结构由三部分构成:函数名称(FunctionName),函数功能(FunctionFunction),函数参数(FunctionParameter):
  InterfaceFunction=[FunctionName,FunctionFunction,Fun-ctionParameter]
  其中,函数参数可以从参数名称(ParaName),参数说明(ParaExplain),方向(Orientation),参数类型(ParaType)四个方面描述:
  FunctionParameter=[ParaName,ParaExplain,Orientation,ParaType]
  定义3.2.2 接口语义(InterfaceSemantic)。接口语义可分为接口函数功能(InterfaceFunction),前条件(ForwardCondition),后条件(AfterCondition)三部分描述。
  InterfaceSemantic=[InterfaceFunction,ForwardCondition,AfterCondition]
  定义3.3 实现(Implementation)。实现是满足接口规范和语义描述的实例,它包括索引(Index)和实现体(ImplementationBody)两个部分。
  Implementation=[Index,ImplementationBody]
3 构件模型的应用
  本构件模型对构件库管理的支持是多方面,多角度的。理论上,它的提出就是为了更好地支持构件库中构件的重用。实践中,通过在网上信息收集系统构件库中加入构件模型的支持,使以前难以实现的一些功能得以实现,例如:基于语义的检索,对构件组装和演化的支持等。下面简单介绍一下此模型在这些方面的支持机制。
3.1 如何支持构件的语义检索
  本模型支持构件的语义检索。它从应用领域,功能,层次,表示方法,硬件环境,软件环境,程序语言,复用度八个方面刻划构件的特征。根据刻面的重要性和在网上信息收集系统构件库中的实践,笔者将各个方面的权值确定如表2。当检索时,可以从除复用度之外的7个刻面输入需求,然后计算出各个构件的匹配度,并且按照匹配度从高到低依次提供给构件检索者。如果在输入需求时没有输入某一刻面所需求的术语描述,则视为对这一刻面没有要求,则这一刻面按完全匹配看待。


  通过在网上信息收集系统构件库中的应用,证明了在此模型的支持下构件的查准率和查全率都有了明显的改善。更重要的是,这种查找支持了定量的语义匹配度查找。
3.2 如何支持构件组装和演化
  具体的组装过程是由专门的组装工具来实现,此构件模型在网上信息收集系统构件库中对构件组装和演化的支持体现在提供构件组装、演化的语境支持和组装工具所需要的所有信息。
  (1)分析作为组装元素的构件的关系语境(ComponentRelationContext),可以得到此构件的组装语境和演化语境。组装语境刻划的信息是如果使用某一构件去组装,那么还必须使用哪些与此构件有关的其他构件来组装。演化语境确定哪些构件与本构件演化有关,关联的程度有多大,是否有必要也跟随这个构件一起演化;演化语境还要确定演化后的构件与周围构件的关系是否会发生变化,发生什么样的变化等。
  (2)提供接口、实现等信息给组装工具,由组装工具根据本构件模型所提供的信息实现组装。例如构件模型中对构件接口的描述提供了构件接口的语法描述和语义描述,这些都是构件组装时所必须的信息。
  本文针对构件库中构件的检索、学习、组装和演化,提出了一种构件模型。目的就是方便构件库的管理并使构件的检索、组装和演化更加正确、自动。这一模型虽然在上述方面有所改进,但是它还处于对实用化构件模型的摸索阶段,还有很多需要改进的地方。今后研究重点是对本构件模型的精简,以及加强此模型对组装和演化的支持,以实现组装和演化的完全自动化。
参考文献
1 WALINAUK B.The current state of CBSE.IEEE Software,1998;(15):37-46
2 Brown A.Large-scale component-based development.New jersey:Prentice Hall,Inc.,2000
3 边小凡,朱建林,吴利明.基于构件的软件开发方法在非成熟领域中的应用.河北大学学报(自然科学版),2005;(25)(增):108-110
4 贾 育,顾毓清.基于领域特征空间的构件语义表示方法.软件学报,2002;13(2):311-316
5 王渊峰,张 涌,任洪敏等.基于刻面描述的构件检索.软件学报,2002;13(8):1546-1552
6 娄 健,边小凡.教学评测与评估领域构件库系统的设计与实现.河北大学数学与计算机学院研究生论文集,2003

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306118;邮箱:aet@chinaaet.com。