可信构件库的开发-构件检索毕业论文_第1页
可信构件库的开发-构件检索毕业论文_第2页
可信构件库的开发-构件检索毕业论文_第3页
可信构件库的开发-构件检索毕业论文_第4页
可信构件库的开发-构件检索毕业论文_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

.....参考资料.可信构件库的开发—构件检索毕业论文目录摘要 IAbstract II目录 III第1章概述 11.1研究背景和意义 11.1.1项目背景 11.1.2项目意义 21.2相关研究现状 21.3本文的主要研究工作 31.4本文的组织结构 4第2章构件库及构件检索理论研究与分析 52.1构件的概念 52.1.1构件定义 52.1.2构件库 52.2构件的存储 62.2.1构件的存储方式 62.2.2构件库的存储对象分析 72.3构件的检索 82.3.1构件检索过程 82.3.2构件检索算法分析 9第3章构件检索子系统的设计 133.1总体设计 133.1.1系统功能结构 133.1.2构件检索方法设计 143.1.3检索信息的提交及系统检索流程设计 143.2普通检索设计 153.2.1构件检索的评价标准 163.2.3广度优先检索 163.2.4深度优先检索 173.2.5构件检索结果计时器 183.3XML查询语句XQuery 19第4章系统实验及性能优化 204.1系统运行环境及配置 204.2系统实验及分析 204.2.1实验数据来源 204.2.2实验方法 204.2.3实验结果分析 214.3系统检索性能优化 214.4系统运行界面说明 22第5章总结与展望 235.1总结 235.1.1收获 235.1.2存在的问题 235.2展望未来 23参考文献 25致谢 26附录 27附录A:主要源程序 27附录B:系统界面示例 31牛玮:可信构件库的开发....第1章概述本章节将从项目研究背景和意义讲起全面概述系统的研究设计和开发,对本文章进行整体架构。近年来随着面向对象技术的发展,以及CORBA、J2EE等工业标准的出现,大大刺激了构件技术的发展[1]。随着软件复用实践的深入和时间的推移,企业部积累的构件将越来越多、企业外部对构件的需求也越来越多。Internet和Web技术的成熟,使得企业或组织的构传库实现基于Internet的共享成为可能和必然[17]。在Internet技术下如何实现构件库对构件的有效管理和检索,成为研究的重点,以便为构件复用实践提供技术支持。1.1研究背景和意义1.1.1项目背景软件复用(SoftwareReuse)是一种由预先构造好的、为复用目的而设计的软件构件来建立或者组装软件系统的过程。它的基本思想是在两次或多次不同的软件开发过程中重复使用相同或相近软件元素的过程。软件构件(SoftwareComponent)是抽象程度最高的复用,是对一组类的组合进行封装,并代表完成一个或多个功能的特定服务,也为用户提供了多个接口。整个构件隐藏了具体的实现只用接口提供服务。通过建立可复用构件库可使软件开发商快速高效地从一,个成功项目中开发出相关领域的类似项目,充分节省开发成本。建立构件库管理系统可以对构件进行有效的组织和管理,其中构件库管理系统主要涉及构件的完整性描述、构件库的搭建、构件的存储和构件检索。构件的存储主要解决构件在构件库中的存储方法和数据结构,是实现一个有效的构件库的前提;构件库的搭建主要解决构件的分类和入库;构件检索主要是为了用户准确快速地检索到目标构件然后用于再工程等,其中需要重点解决的是构件的检索[2]。然而,即便软件复用思想已经深入人心,虽然业界或者学术界已经存在大量的CBSD概念、方法和工具,并且在实践中能见到许多成功的例子,但是软件产业并没有完完全全走进CBSD规的开发过程中。有文献表明[2],大规模的软件成本下降和软件质量的提高在现存的基于构件的软件生成的帮助下并没有得到体现,作为子产业的软件构件也没有形成,CBSD还远未被当成一种真正的软件工程实践方法。1.1.2项目意义本文详细介绍了构件库管理系统的设计与实现,主要分为构件库及构件检索理论研究与分析,构件检索子系统的设计,系统实验及性能优化,总结等部分。通过一系列详细的研究学习,笔者对构件领域有了很深的理解。本项目是在参照很多已投入运营的构件库系统如863构件库系统、构件库等基础上设计开发的。1.2相关研究现状软件复用技术在国外经过多年的研究,导致了一批有特色的构件库系统的产生。在国外,比较有名的构件库系统有REBOOT构件库、Agora构件库、和IBMRSL系统[16]。其中REBOOT构件库采用了刻面分类的方法,定义了Abstraction、Operations、Operateson、Dependencies四个刻面对构件进行描述,主要针对源代码级别的构件[15]。Agora构件库的搜索引擎是CMUSEI开发的一个构件搜索引擎,它的主要特点是基于Intrnet互联。Agora通过对Web页面的搜索来获取构件的信息,对这些构件信息的管理与普通的搜索引擎一致[15]。Agora搜索的构件种类有限,局限于流行的JavaBeans、ActiveX和COBRA等商业构件上。IBM公司研发的RSL(reuselibrary)系统结合了刻面和关键词分类方法对构件进行描述,通过多种分类方法的综合运用提高检索效果。近十年来,国对软件复用也进行了广泛的研究。其中北大青鸟构件库系统具有代表意义。青鸟构件库系统采用以刻面为主,关键词、属性、超文本结合使用的分类方案。构件的基本刻面包括环境、应用领域、功能、层次、表示方法。使用者可以用刻面和属性的检索组合,层次地浏览和检索,并逐步求精。此外,使用者还可以通过系统提供的反馈机制选取辅助分析。构件库则是国运营较为成功的一个构件库,它的出现为软件企业实现由传统开发方式向软件工厂模式的转变提供了良好的公共基础设施。构件检索是指软件复用者根据其自身的需求,通过软件构件库管理系统所提供的查询手段,提出查询请求,并获得系统返回的构件的过程。从软件复用思想的提出开始,构件检索方法的研究工作已经持续了几十年。尤其在上世纪的90年代,学者们提出了很多不同的构件检索方法,但是始终没达到一个令人满意的检索效果。随着互联网技术的高速发展和Java等面向对象语言的流行,对构件的复用研究又提出了新的要求。构件检索技术始终是构件复用的一个研究热点。以上是国外对构件复用技术研究的一些显著成果。与构件检索相关的技术将在第2章中做详细的综述。1.3本文的主要研究工作构件检索技术涉及三个方面,它们分别是构件描述,构件存储,构件分类和构件检索。构件检索技术的关键在于构件的形式化表示与软件复用需求的形式化表示。由此引出了构件检索技术的难点——如何使构件复用者能够从构件库系统描述构件的角度去理解构件,并且用构件库能理解和处理的形式来描述复用者对构件的需求。关于构件检索,很多学者对各种各样的方法进行了归类。比较流行的有以下几个:Frakes等把构件检索分为基于图书馆和信息科学索引检索方法,基于知识库的检索方法和超文本的检索方法[10]。HMili等则提出构件检索方法可以归纳成基于人工智能、基于超文本、基于图书馆科学和信息科学和基于形式化规约等四种检索方法[12]。Okhayati则提出了基于部索引检索、基于外部索引检索、基于结构匹配的检索和基于行为匹配的检索四种检索类型[11]。总结前人的研究,他们大体上把构件检索方法分成六大类,它们分别是:基于信息科学检索方法、基于描述性说明的检索方法、基于构件运算语义的检索方法、基于构件指称语义的检索方法,基于拓扑检索方法和基于构件结构的检索方法。目前广为使用的刻面分类方法能够对构件的分类与检索作出很好的支持。基于刻面的分类虽然提供了多角度对构件进行描述,并且刻面的树形结构在XML技术的帮助下能很好地对构件进行表示,但是由于复用者存在对领域知识的缺乏和刻面术语描述的严格性,复用者和计算机对构件的理解的一致性问题仍然没有很好的解决。针对这个问题,本文提出了一种基于描述性说明的构件检索方法。通过学习和研究以上六类系统检索方法,特就基于描述性说明的构件检索方法进行了系统性的研究。基于描述性说明的方法通常是对用户的检索请求(通常是关键字请求)和构件的描述性说明(通常由一组结构化的说明性术语或关键字组成)进行匹配。这个方式可以被认为是信息科学检索方法的一个特例,而其特别之处在于基于描述性说明的方法通常是基于受控词汇表的。同时这种检索方式由于易于实现并且效果不错,目前广为使用。所以本文把它单独作为一个大类讨论。由于构件本身与构件描述是独立的两类实体,因此需要通过人工对其进行关联。通常的做法是,专家根据构件库的领域特征设定一系列关键词,构件库管理员在构件入库的时候对构件进行索引[3]。在基于描述说明中,被讨论得最多的方法是基于刻面的构件检索方法。Prieto等人最先在[14]中提出了基于刻面的构件检索方法。他们指出,由于简单的关键字描述是非结构化的,构件间的公共特性不能统一。并且,构件间的特殊关系也不能在构件库的组织过程中显示出来。有鉴于此,他们在文中为构件提出了功能,实体类型,媒介、系统类型、功能区域和设置这六个刻面。对于每个刻面,作者又设定一系列的术语与之对应(如系统类型:windowsxp,unix,linux等)。术语是受控的,同时也仅限于描述给定的刻面。术语间有如同义词等的特殊关系,从而形成结构化的术语空间。自从基于刻面的方法提出以后,很多研究在刻面的基础上展开。Boerstler在[13]中提出了一种面向特征的检索方法。该文指出,构件是由一些特征来进行区别的,通过一系列刻面和术语,可以给构件定义其独有的特征。复用者根据特征这个概念,对目标构件的理解会更准确,进而提高检索的精度。基于知识的构件检索在某种程度上也属于基于描述性的检索方法,这是因为知识的核心语义也是基于自然语言字符串的语义[12]。由于存在着推理的过程,基于知识的描述形式化程度比关键字和刻面都要高。构件检索时,根据用户提出的各种要求,生成系统部的提问形式,推理机便根据提问形式求出结果并显示给用户。典型的例子有MurrayWood的[15]。本文综合各种构件检索方法的特点以及本系统实际需要,把基于描述性的构件检索方法细分为深度优先检索、广度优先检索、XQuery查询、受控词汇查询等四类检索方法。1.4本文的组织结构全文共5章,第l章为概述,介绍研究课题的背景和意义,软件构件检索在国外的研究现状以及本文的研究工作。第2章介绍了构件库及构件检索技术的相关理论,包括构件定义,构件库概述,构件分类和描述技术以及构件检索技术等。第3章介绍了构件库系统中的构件检索模块具体设计和实现。第4章主要是对系统进行实验分析并对系统性能进行优化。第5章对系统进行整体总结并得出结论,一方面总结已完成的任务,另一方面也对为完成的任务进行分析,同时明确在系统设计和开发过程中存在的问题,也对构件领域的未来进行了展望。

第2章构件库及构件检索理论研究与分析本章节将详细讲述构件库及构件检索的相关理论研究,对构件确定明确的定义,使构件库及构件存储过程清晰明了,最后对构件检索过程进行比较分析。2.1构件的概念2.1.1构件定义软件构件是可被用来构造其他软件的软件组成成份,它可以是被封装的对象类、类树、一些功能模块、软件框架(或体系结构)、文档、分析件、设计模式等[9]。广义上将,只要是软件系统中可以明确识别的、可被他人复用的成份,就可以称为软件构件。一般来说,具有相对独立的功能和可复用价值的软件成份都可被称为可复用构件,可复用构件不但包括源程序而且还包括在软件生产过程中各个阶段的成品,如项目计划需求定义、分析模型、设计模型、文档、测试案例和数据以及其他对开发活动有用的信息等,它可以是从旧的软件中提取的也可以是专门为了复用而开发,可复用构件应该具备几个基本要素:有用性(Usefulness):构件必须提供有用的功能;可用性(Usability):构件必须易于理解和使用;质量(Quality):构件及其变形必须能正确工作;适应性(Adaptability):构件应该易于通过参数化等方式在不同语境中进行配置;可移植性(Portability):构件因能再不同的硬件平台和软件环境中工作。2.1.2构件库构件库是可重用软构件的集合,是一个包括人员、工具和过程的组织,主要目的是提供软件生存周期产品的重用机制以满足特定的软件代价——效益和生产率的目标,并作为开发可重用构件和基于可重用构件开发这两个生存周期的联系体系。具体地说,构件库就是类似于用来存储、检索和管理构件的数据库,是开发可重用构件和使用可重用构件的中间媒介[10]。构件库一般管理流程如图2-1所示。图2-1构件库一般管理流程构件库管理系统CLMS(ComponentLibraryManagementSystem)是为构件库的建立、使用和维护而配置的应用软件。文献[11]中提到的构件库管理系统通过构件库存储构件、提供可重用的软件资源。CLMS对构件库进行统一的管理和控制,承担着构件库的维护工作,保证构件库的安全性和完整性。重用者使用各种构件库管理命令查询利用构件、控制构件的执行,通过构件库管理系统使用各类构件将更加方便。2.2构件的存储2.2.1构件的存储方式构件库的构件存储系统可叹采用多种方式:面向对象数据库OODBSMS、关系数据库RDBMS和文件系统Files[6]。OODBSMS其有存储数据量大、易于维护、易于扩充、易于格式动态变动等优点,但它目前尚无成熟产品,龙其在标准化和性能上令人不满意,并且有些构件又不支持OO(面向对象)技术,因而OODBSMS不能满足构件库对构件的存储要求。相比之下,关系数据库RDBMS具有就存储和管理大量数据的高效性、理论的严密性和技术的成熟性,它不仅可以支持存储不同的数据类型和负责的数据结构,而且能够表示结构化的数据,可以方便地表达出数据之间的关系,并且还可以提供多种线索进行查询,具有很高的查询效率,所以是构件存储系统的首选。但是,在实际应用中,构件的结构极其复杂,存在形式多种多样,且构件的体积可以能大,这与关系数据库多所保存的数据项一般都有尺寸限制,不宜过大的要求不相符合,所以仅用RDBMS来存储构件是显然可能的,但是又不够的。另一种可用来存储构件的是文件系统Files。Files系统的存储特点是存储容量大,对存储的数据体积无限制,且可以存储多种不同形式的构件。这点刚好符合对构件存储的要求。但Files不利于大量数据的存储,因为它的查询效率低,缺少有效快捷的检索途径,查找构件不方便。因此,文件系统Files也不完全符合对构件存储的需要。综合上述几种存储方式,本系统采用XML对构件信息进行存储,而采用文件系统对构件本体进行存储。之所以使用XML的一个重要因素是,XML在数据表示方面极具灵活性。它可以表示关系数据库里很难表示的数据结构,刚好符合构件相关描述信息。在某些情形下,原生的XML数据库可以解决一些关系数据库不容易解决的问题,比如XML特有的XQuery操作,它类似于SQL查询语句,能够快速准确地对XML数据进行查询。而构件本体一般所占存储空间比较大,适合用文件系统进行存储。2.2.2构件库的存储对象分析在研究完构件和构件库的具体定义之后,本项目下一步的目标是研究构件的存储,并设计建立合理的存储模型。构件库中的存储对象包括构件实体、构件描述信息、构件管理控制信息簿[11]。构件库作为基于构件开发过程中的重要部分,主要作用不仅是保存构件,而且还能检索和管理构件信息以利于选取符合需要的构件和。所以构件库不仅要保存众多的构件实体,还需要记录这些构件丰富的描述和说明信息。此外,为了保证系统运行的安全性,必须对构件库使用者的身份和权限进行控制和管理,进行控制和管理权限的相关的信息也存储在构件库中。所有这些容,构成了构件库系统存储和管理的对象,具体来说,包括如下容:构件实体:主要是指构件本身的容,即复用者最终感兴趣的软件成分,如,代码、设计文档等。获取构件实体是用户使用构件库的最终目的。构件描述信息:在构件本身的实体容中不存在,是人为增加的用于构件属性描述和分类的信息,目的是便于构件复用者对构件的查找和理解,是构件查询和理解所借助的依据。下面对构件描述信息包含的容作一个简要介绍。构件本体信息:构件类型,应用领域,功能分类。创建信息:版本编号,创建者,创建者联系方式,创建时间。更新信息:版本编号,更新者,更新者联系方式,更新时间。服务信息:服务名称,服务接口,输入参数,输出参数,示例描述。引用信息:引用名称,引用接口。环境信息:软件环境(操作系统,数据库,开发语言),硬件环境(处理器,存,硬盘)。构件存储模型如图2-2所示:图2-2构件存储模型2.3构件的检索2.3.1构件检索过程构件的查询过程就是定位类似的构件,使用者只需理解查询得到的少数构件就可以决定是否直接重用构件。查找软件构件的传统方法,如查看一个用户手册,使用浏览器检查源代码等,不仅花费大量时间,而且对理解构件帮助不大,通常,在本地较小的软件库中的构件检索是比较简单的,用户能够很容易地检查到所需的构件,并可通过它们的名字或通过浏览器库来选择它们;但在一个大的构件库中检索可复用的构件就没这么简单,存在很多影响检索效率的因素,一般包括[12]:用户的请求与所需构件信息的相近程度;搜寻和索引策略;索引方法的详尽性和具体性;使用的匹配和相似分析机制;实践中构件数量不断增长,构件也随技术和领域演化而更新。构件的分类是建立和维护构件目录信息的活动,构件的检索方法依赖于构件的标识和分类。对构件进行分类有三个好处:便于组织管理、方便查询和辅助理解[13]。而对于具体检索过程则要通过不同检索算法的设计而定,但检索流程大体上相同。构件检索过程如图2-3所示。图2-3构件检索过程2.3.2构件检索算法分析构件检索算法的研究一直是构件领域比较重要的研究容,也是构件库系统最关键部分技术。现阶段业界对构件检索算法的研究花费了很大的人力和财力,所以也出现了很多种检索算法。研究学习目前已经存在的检索算法,收获颇大。现列举几种流行的和检索效果较好的检索算法。(1)基于规约语法的构件检索原理在构件组装的过程中需要查找满足功能需求的构件,而且所查找的构件必须满足组装语法的需求[13]。待检索构件和构件库中候选构件的规约语法匹配是构件库支持构件组装的一个重要的方法。在PlugandSocket类型接口中,每个服务作为一个不可分割的独立单位存在,类似于硬件设备的一个插口。因此我们将服务作为语法匹配的原子单位。PlugandSocket类型的接口将一组相关的功能封装成一个服务(),每个服务的形式如下:service-nameisprovides:functionslistrequires:functionslistend每个function只包含功能名、参数类型、参数名及返回值类型,不包含功能的实现体。基于规约语法的构件检索原理如图2-4所示。图2-4基于规约语法的构件检索原理首先需要通过一个语法分析器对待检索构件的规约进行语法扫描,提取出与检索相关的信息。然后需要对构件库中侯选构件的规约逐一进行语法扫描,获得每个侯选构件与检索相关的信息,再和待检索构件进行比较,判断是否满足需求。为了提高响应速度,通常的做法是在构件入库时就对它进行语法分析,提取出与检索相关的信息,事先存放在构件库中,在检索的过程中直接用它们和待检索构件的检索信息进行匹配。(2)基于本体与刻面相结合的构件检索算法(RBOF)RBOF(ARetrievalMethodBasedOnOntologyAndFacet,基于本体与刻面相结合的构件检索算法)使用定义好的领域本体库对查询树进行语义推理,取查询树的每条路径和构件库中的每一棵构件树进行匹配,并根据匹配库返回检索结果。该检索算法描述如下:输入:构件查询树Q,构件库树集合C(C1,C2……Cn),领域本体库;输出:检索的结果集合N;/*BEGIN*/;/*初始化检索结果集合为空*/计算查询树Q的所有根结点到叶结点的路径集合Q(Q1,Q2,……,Qk);根据领域本体库对Q1,Q2,…,Qk进行语义推理,获得更多路径Qk+1,…,Qm;若Qk+1,……,Qm集合不为空,;输入检索时期望的匹配程度,赋值给P;while(P=<0||P>1){/*第7至第11步骤为while循环体*/提示用户匹配程序不合要求,请选择退出本次检索或重新输入匹配程度;if(用户选择退出本次检索){退出检索;}else{重新输入匹配程度,并赋值给P;}}To=0;/*查询树与构件树T的匹配路径数,初始化为0*/for构件库中的每一棵构件树Cifor查询树中的每条路径Qjif(路径Qj与构件Ci相匹配){To++;if(To>=P*Q.length)/*p=1时,说明匹配路径数与查询路径数相等,为高度匹配,否则允许((1-P)*Q.length)条路径不匹配*/;}输出检索结果集N;/*END*/通过对算法的描述,可以看到该算法具有如下特点:(1)在该算法中使用本体的特点对检索树进行语义推理,推导出隐含语义,能对用户的查询请求进行语义处理,避免由于用户查询要求用词不精确造成的查询不准确。(2)可让用户自由输入匹配程度。

第3章需求分析系统需求分析对后期软件设计的重要性毋庸置疑。本章主要描述构件检索相关的详细需求分析,为第4章系统设计阶段做好准备。3.1功能性需求3.1.构件库管理系统的设计主要是为了合理规管理软件构件,为软件复用提供高效,可靠的根据。而构件检索更是构件库管理系统的核心功能部分。一个好的构件库管理系统必须能够给用户提供比较完善的检索方式,并且能够高效地检索到用户期望得到的构件,当然前提是构件库中必须存储有足够和全面的构件。然而,构件检索对于一个比较庞大的构件库来说并不容易,因为构件的规问题一直没有固定的标准。所以在设计开发一个构件库系统时必须要设计出合理的构件存储方式,搭建稳定的构件库,在进行构件检索开始时对构件进行清晰的分类。只有满足以上条件才能保证构件检索的顺利进行。由于目前构件领域没有规的技术标准,所以在此我们只是对构件库系统进行研究。构件的检索主要分为深度优先检索,广度优先检索,XQuery查询等方式。、1.构件检索模块关联角色:普通用户,管理员需求编号:CR-001需求描述:用户需选择适当的检索条件,点击不同检索方式进行检索。备注说明:登录系统后才可进行事务处理等操作。3.1.深度优先检索。2.广度优先检索。3.XQuery查询。3.2非功能性需求3.2.1可用性系统可灵活的在每台装有Java虚拟机的电脑上使用,并且有足够的能够存储构件的硬盘空间。3.2.2安全性1.安全防护针对本系统我们对用户进行分类,以保证各级用户对系统访问的安全性。不同用户对于系统的功能性操作不同,使得对于系统的管理运行更加稳定。另外用户登录时输入的口令不应在终端上显示。2.访问控制用户登录除了需要输入用户名和密码外,还要输入验证码,防止黑系统用户账号密码被黑客暴力破解,并且用户还可以通过问题提示找回密码。3.2.3易用性构件库管理系统必须简单、易用,具有清晰的导航功能,使用户快速找到自己想要执行的操作界面,能够方便地检索到自己想要找的构件。3.3用例规约描述本章的目的是依据《需求规格说明书》,建立用例模型,并对用例模型进行具体描述。用例规约描述是面向对象分析和设计的重要步骤。用例规约描述需要进行评审。3.3.1目的用例是关于用户和系统之间相互作用的文本性描述,从外部角度描述系统的行为,表达系统应该做什么。本文档通过用例规约描述,来进一步说明该系统需求,是下一阶段系统设计的基础,也是测试用例的重要依据。3.3.2用例描述用例规约如表3.1所示:表3.1构件检索用例规约用例名称:构件检索用例ID:CR-001关联角色:普通用户,管理员用例说明:系统验证用户输入选择检索条件前置条件:无基本事件流:1.用户请求系统构件检索2.系统弹出系统构件检索页面3.用户输入选择检索条件4.用户点击检索方式4.1.用户选择深度优先检索4.2.用户选择广度优先检索5.系统输出检索结果6.系统显示检索用时7.用户选择确定检索结果集8.用户点击修改按钮9.系统跳转到构件修改界面10.用例结束 异常事件流:8a.用户选择修改项为空8a-1.系统弹出消息对话框,提示用户选择修改项8a-2.用例结束后置条件:用户检索成功,显示检索结果备注说明:3.4用例图构件检索用例图如图3-1所示。图3-1构件检索用例图3.5用户界面设计构件检索是构件库管理系统设计开发过程中最重要的一部分,经过慎重思考,并结合多方面考虑,将构件检索界面设计如图3-2所示。图3-2构件检索

第4章构件检索子系统的设计本章节将主要讲述系统的总体设计、构件普通检索方法设计、XML查询。关键技术检索算法设计使用将在这里做重点介绍。4.1总体设计4.1.1系统功能结构在系统开发之前,项目小组对系统整体结构进行了详细分析和设计,最终结合多方面因素将系统整体功能模块明确划分。系统功能分类和系统结构如图所示:图4-1系统功能分类图图4-2系统结构图4.1.2系统类图本系统包括对构件的基本操作管理等部分,系统总体类图如图所示。图4-3系统总体类图4.1.3构件检索方法设计考虑到可能的检索需求,系统设计了两种检索方式:普通检索与XQuery检索。普通检索主要用于对构件描述比较详细的情况进行检索,此检索方式对构件详细描述信息要求比较严格,查找出的结果也比较精确;而基于XQuery的检索主要是针对XML中构件描述信息不是很完整的构件进行检索,这种检索对检索准确度要求不高,所以查找结果比较全面。4.1.4检索信息的提交及系统检索流程设计由于检索关键词以及可能的检索条件较多,决定使用类型化数据集对象保存检索条件,同时由于普通检索的关键词信息较少,为了避免定义过多的数据集对象,设计中将普通检索的关键词信息也包含入这个数据集,以下是用于类型化数据集的XMLSchema文件(newXMLDocument.xsd)。<?xmlversion="1.0"encoding="UTF-8"?><Schemaxmlns="./2001/XMLSchema"targetNamespace=".example./components"xmlns:target=".example./components"elementFormDefault="qualified"><!--构件库根元素--><elementname="components"><complexType><sequence><elementname="component"minOccurs="0"maxOccurs="unbounded"><complextType><sequence><elementname="selfInfo"type="components:SelfInfoType"/><elementname="buildingInfo"type="components:BuildingInfoType"/><elementname="updateInfo"type="components:UpdateInfoType"/><elementname="serviceInfo"type="components:ServiceInfoType"/><elementname="quoteInfo"type="components:QuoteInfoType"/><elementname="environmenntInfo"type="components:EnvironmentInfoType"/></sequence></complextType></element></sequence></complexType></element>另外对于构件检索条件也完全参照构件存储时的规,例如构件本体信息SelfInfo所包括的三个属性(componentType,applyField,functionType)都是必须提前规好的,不容许随便改动,这样有利于对构件进行规和管理。与此类似的还有构件所需的硬件环境信息(HardEnvironmentInfo),软件环境信息(SoftwareEnvironmentInfo)。在检索流程设计方面,考虑到检索方式较多,系统采用了框架集设计,多个刻面信息采集页面共用一个框架集,并提供快捷指向任意检索页面。构件检索整体流程设计如图4-3所示。图4-3构件检索整体流程设计4.2领域模型在建立好用例模型后,本项目下一步的目标是从用例描述中抽象出领域模型,找出分析类。然后按照一定的原则进行系统设计,设计出相应的边界类和控制类。4.2.1边界类系统用户通过边界类与系统打交道,用户向边界类发起访问,边界类把用户的申请提交给控制类,控制类最终访问实体类。一般在进行设计时可能一个用例对应一个边界类,也可能是一个用户对应一个边界类,有时一个边界类可能还要调用另一个边界类才能完成一次用例。系统边界类的命名以具体的英文描述,系统中构件检索相关的边界类说明如表4.1所示。表4.1构件检索相关边界类说明边界类名称说明Main系统主界面ComponentSelectHign高级检索ComponentSelectOrdinary普通检索4.2.2控制类边界类通过控制类访问实体类,本系统一个实体类基本对应一个控制类做管理,系统中检索相关的主要控制类接口如表4.2所示。表4.2构件检索相关控制类接口说明控制类接口名称说明ComponentDao构件相关接口HardEnvironmentDao硬件环境相关接口SoftEnvironmentDao软件环境相关接口SelfInfoDao本体信息接口控制类需要访问实体类,具体控制类接口的实现也非常重要。系统中检索相关的主要控制类接口实现如表4.3所示。表4.3构件检索相关控制类接口实现说明控制类接口实现名称说明ComponentDaoImpl构件相关接口实现HardEnvironmentDaoImpl硬件环境相关接口实现SoftEnvironmentDaoImpl软件环境相关接口实现SelfInfoDaoImpl本体信息接口实现4.2.3实体类由于构件描述信息较多,所以本系统中构件相关实体类划分很清楚。具体分类如表4.4所示。表4.4构件检索相关实体类说明控制类说明BuildingInfo构件创建信息UpdateInfo构件更新信息SelfInfo本体信息ServiceInfo服务信息QuoteInfo引用信息Environment环境信息Component构件整体描述HardEnvironment硬件环境信息SoftEnvironment软件环境信息ComponentList构件结果集4.3普通检索设计在本节中将会介绍构件管理系统中构件检索模块的设计以及代码实现。构件检索模块主要采用两种检索算法,广度优先检索和深度优先检索。在检索的过程中特别添加了计时器,使两种检索算法效率详细呈现。在下面的容中只介绍部分主要类与函数代码,其余在此就不再过多的赘述,详细代码请参考程序源代码。4.3.1构件检索的评价标准每种构件检索策略的代价是该构件检索策略的关键,如果某检索策略代价高于对重新开发的代价则该检索策略是失败的。检查效率主要包括查全率、查准率和查询时间三个重要参数。在具有多种分类方法的构件库中,可以用查全率、查准率来定义检索效果[7]。具体定义如下:查全率=检索到的相关构件集合/构件库中所有相关构件集合查准率=检索到的相关构件集合/检索到的所以构件集合查询时间=检索开始时间-检索结束时间4.3.2构件检索界面通过第三章对系统的需求分析和本章前两节的系统设计分析,我们实现了普通构件检索的相关功能。构件检索界面如图4-4所示。图4-4构件检索界面4.3.3广度优先检索经过检索算法学习和研究,结合构件树形结构类型的特点特设计出了广度优先检索算法。此算法的特点是查准率比较高,但查全率很低。具体广度优先检索描述如图4-4所示。图4-4广度优先检索描述上述广度优先检索算法的设计主要是由ComponentSelect.java类中的SelectWide(ArrayList<Component>list,Stringstring)方法实现的。此方法是将一个参数string返回到<Component>list中并进行广度优先查找。用这种方法检索构件的好处是查准率比较高,但查全率不好。SelectWide(ArrayList<Component>list,Stringstring)的实现过程为:先定义newList=newArrayList<Component>()将操作相关构件结果集放入到newList中。然后用一个switch(i)语句对构件查询条件选择进行判断并获取。i取值从0到8依次判断并从构件库中进行筛选。将检索到的信息用add()方法放入到newList中,同时通过list.remove(j)操作使检索条件判断下移并继续执行,如果找到目标构件信息,使用break跳出,否则继续检索。publicstaticArrayList<Component>SelectWide(ArrayList<Component>list,Stringstring){booleansign=true;ArrayList<Component>newList=newArrayList<Component>();if(!string.equals("")){for(inti=0;i<9;i++){switch(i){case0:for(intj=0;j<list.size();j++){if(list.get(j).getSelfInfo().getComponentType().equals(string)){Componentcomponent=newComponent();component=list.remove(j);newList.add(component);}};break;}……}}else{newList=list;}returnnewList;}4.3.4深度优先检索本系统设计的另外一种检索算法是深度优先检索,它查全率比较高,而查准率不行,通过这种方式能够检索到某一更大围的构件信息。此检索方式具体检索描述过程如图4-5所示。图4-5深度优先检索描述上述深度优先检索算法的设计主要是由ComponentSelect.java类中的SelectDeep(ArrayList<Component>list,Stringstring)方法实现的。此方法也是将一个参数string返回到<Component>list中并进深度优先查找。用这种方法检索构件的好处是查全率比较高,但查准率不好。SelectDeep(ArrayList<Component>list,Stringstring)的实现过程为:(1)先定义一个boolean类型的标识的变量sign用于对检索过程进行标识。(2)先定义newList=newArrayList<Component>()将操作相关构件结果集放入到newList中。(3)然后用一个switch(i)语句对构件查询条件选择进行判断并获取。i取值从0到8依次判断并从构件库中进行筛选。(4)将检索到的信息用add()方法放入到newList中,同时通过list.remove(j)操作使检索条件判断下移并继续执行,如果找到目标构件信息,将标识变量sign值改变并使用break跳出,否则继续检索。publicstaticArrayList<Component>SelectDeep(ArrayList<Component>list,Stringstring){booleansign=true;ArrayList<Component>newList=newArrayList<Component>();if(!string.equals("")){while(!list.isEmpty()){Componentcomponent=newComponent();component=list.remove(0);if(component.getSelfInfo().getComponentType().equals(string)){newList.add(component);sign=false;}……对环境信息的判断同对软件环境信息的判断相同,在此就不再列举。4.3.5构件检索结果计时器为了便于对不同检索算法的检索效率进行比较,在系统设计时添加了计时器,使得检索出结果的同时能够清楚地查看不同检索算法检索所用的时间,从而清晰比较出检索效率。(1)定义两个长整型变量开始时间(beginTime),结束时间(endTime),还有一个浮点型检索时间(resultTime)(2)检索算法执行之前由beginTime=System.nanoTime()获得开始时间,在检索算法执行之后用endTime=System.nanoTime()获得检索结束时间,并使用resultTime=(float)(endTime-beginTime)获得检索所用时间。通过检索时间resultTime的多少来对不同检索算法进行比较分析。以下对比分析两种检索算法通过检索条件的异同检索得到结果所用时间对照表如下:表4.1检索数据分析表深度优先检索(ms)广度优先检索(ms)开始时间结束时间检索用时开始时间结束时间检索用时不同检索条件4106010070459644.0259597728651327.0相同检索条件387566523426478.094598967212123.04.4XML查询语句XQueryQuery是XML数据查询语句,尽管XQuery才面世时间不长,但是很多软件公司和独立的开发商已经开放了实现Xquery的部分功能或全部功能的软件。Xquery工具软件的普遍使用,说明了许多软件开发商认识到XQuery是一个重要的XML标准,它具有巨大的商业机遇[4]。本文所列举到的有关XQuery的技术都使用SaxonXQuery引擎。在系统开发过程中下载使用的是Saxon8.9的版本。对XQuery的使用必须经过一下类似于关系型数据库操作:(1)创建数据源DataSource:DDXQDataSourcedataSource=newDDXQDataSource();(2)创建连接Connection:XQConnectionconn=dataSource.getConnection();(3)书写XQuery语句:Stringxquery="for$cindoc(\""+XMLPath.FILEPATH+"\")/components/component";(4)创建Expression:XQExpressionxqexp=(XQExpression)conn.createExpression();(5)执行解析:XQSequenceresult=xqexp.executeQuery(string);(6)数据处理:while(result.next()){ XQItemitem=result.getItem();Nodenode=item.getNode(); NodeListlst=node.getChildNodes();readNodeList(lst);}

第5章系统实验及性能优化本章将介绍系统的整体运行情况,包括运行所需的软硬件环境要求和对系统运行界面的分析说明。5.1系统运行环境及配置每个系统都应有它所适合运行的环境,只有在最佳环境下才能将系统性能发挥最好。本系统是基于C/S模式的应用程序,所以在此对其运行环境进行说明。具体运行环境如下:操作系统:WindowsXP以上系列网络平台:Internet/LAN数据库:MySQL5.5开发环境:NetBeans6.8开发语言:Java5.2系统实验及分析5.2.1实验数据来源在参照目前以投入使用运营的构件库系统例如863构件库系统,青鸟构件库系统,构件库等基础上,对构件相关数据进行了综合并制定了自己特有的标准和规。为保证试验数据的多样性,从构件库下载了很多免费构件成品,对这些构件除功能刻面保留参考资料的原始信息外,其他刻面均随机虚拟为相应的刻面,最后将它们添加入库[14]。如下图所示是根据构件本体信息将构件分类。表5.1构件本体信息分类类型定义实验数据构件类型测试构件,页面构件,中间件功能分类系统和安全,程序开发,数据库相关,多媒体,网络通信,信息管理,办公应用,用户界面应用领域公共事业,金融,教育,交通,军事,医疗,电力,机械等5.2.2实验方法构件添加入库实验方法:(1)直接添加方式,是指通过提交正常数据,将构件添加入库,这种方式主要是为了规构件库中构件登记信息的完整性。(2)用添加向导方式添加大部分实验构件:通过系统正确引导使之按照顺序正常添加构件入库,或者提交格式错误数据以测试系统添加入库的正确性、健壮性。构件检索实验方法:为参加实验的人员,提供所要求查找的构件的一段文字描述。让他们登录系统之后,任意使用检索方式进行查找,最后将他们所查找到的构件集合及使用的检索方法进行统计,与库中实际满足要求的构件集合进行比较和分析。5.2.3实验结果分析添加入库实验表明:通过直接入库方式在正常数据添加时表现较好,但当部分数据类型为不规字符串时对非法数据校检能力不够。针对这种情况,对直接添加方式使用JAXB映射的方式对构件信息进行规,JAXB映射主要由4部分构成:Schema、JAXB、XML文档、Java对象[5]。通过JAXB所产生的XML文件满足这种格式,所以添加构件系统实际上采用了JAXB代替Schema作为添加入库的模式映射文件。通过对检索实验结果的分析得到以下几点结论:(1)当用户对刻面分类不熟悉时,检索过程中均不会多检索条件进行选择,他们对构件的理解仅限于“在关键词中检索”和“在功能描述检索”。查全率一般在80%以上,但查准率不理想,一般在50~70%之间。由此可见,改进检索方式可有效的提高检索效率。(2)当用户对刻面分类有一定的了解后,用户可以选择不同检索条件,系统会根据不同检索条件检索到不同结果。(3)当检索条件相同,用户采用深度优先检索时,其查全率一般在80%~90%之间,查准率则很低;而使用广度优先检索其查全率在50%~60%,但其查准率一般都能达到95%以上。(4)当检索条件不同相同,用户采用深度优先检索时,其查全率一般还是在80%~90%之间,查准率则很低,检索所用时间较多;而使用广度优先检索时查准率很高,所以检索用时就相对较少。5.3系统检索性能优化系统采用数据集保存检索结果,由于采用两级显示方式(多个构件基本信息列表显示、单个构件详细信息树状显示),所以在执行数据库检索时,并不将合乎条件的构件全部信息读出,而只是将构件的基本信息读出并保存入数据集(减少了存消耗,尤其是检索结果较多时),并将返回结果存入Component结果集,同时系统置检索完成标记,以后只要标记不改变,列表均从Component结果集中读取数据显示,避免执行修改删除等操作导致从数据库中执行。5.4系统运行界面说明在这里挑选部分有代表性的界面说明,附录中有具体的运行界面:附录B2-1是上传构件的界面。附录B2-2是检索构件的界面。附录B2-3是修改构件的界面。

第6章总结与展望6.1总结6.1.1收获本系统作为毕业设计,并且是大学以来第一次学术研究性课题,设计开发难度可见一斑。经过小组成员通力合作以及在老师的耐心帮助下最终基本完成项目任务,实现了预定的构件管理系统的核心功能及相关辅助功能。系统开发所使用的开发工具是NetBeans6.8,后台数据库存储使用的是XML和MySQL,使用Java语言开发而成,使得系统具有很好的移植性和稳定性,提高了软件的应用围。由于在系统开发开始之前的理论准备工作量很重,所以小组成员投入了大量人力和时间进行开发理论研究准备所以基本完成了系统总体任务方面(构件描述,构件库搭建,构件存储,构件检索)。全面总结本次毕业设计主要有以下几个方面的宝贵经验和深刻体会:一:综合查阅资料是一项非常重要的学习能力。二:软件开发是一种逻辑分析思维要求很高的工程性工作,在设计开发过程中一定要遵照软件工程步骤实施。三:经过毕业设计的锻炼,团队合作精神的重要性完全体现出来,这对将来的工作和发展都是有很大影响。本次毕业设计是一次重要的经历,巩固了大学四年所学习的理论基础知识,同时对四年学习的专业方面知识进行了全面检验,而且磨砺了自己为人处事的能力和态度。6.1.2存在的问题总结本次毕业设计,不能只看到系统任务完成的情况,更要看到系统开发过程中还存在的问题以及待发现的问题。仔细分析发现本次毕业设计暴露出了不少问题,主要表现为:自己编程语言基础不是很扎实,使得在后期开发过程中耽误了不是工期;二是自己编程过程中缺乏规性指导,写出的代码总是显得很杂乱。三是还有一部分任务没有完成,例如基于受控词汇的构件检索,这是一种很好的也是目前业界广泛关注和研究的热点。6.2展望未来目前构件领域应用正处在一个上升阶段,可信构件技术和基于构件的开发方法是当前软件发展的必然趋势。展望未来,软件构件技术及其应用将变得标准化和系统化。基于构件的软件复用也将会越来越成熟,并成为软件开发中的重要手段,必定会被更多的组织运用于系统开发。在课题研究中,由于前期对构件方面接触不多,加之时间仓促,只是简单提出了构件管理框架,简单实现了构件管理系统中构件描述,构件库搭建,构件添加,构件检索等部分功能,其它如构件库的管理机制,系统的自动化组装,构架的公共服务,构件的测试、构件的挖掘等等都是下一步要研究和实现的工作。

参考文献[1]董玉娟.支持异构可信平台的可信软件栈研究[D].工业大学硕士学位论文,2008[2]强薛贺.构件库之构件检索与理论[D].西北工业大学硕士学位论文,2003[3]树文晓茹.基于WebService技术的数据库访问中间件研究[J].电脑学报与应用,2010,(03),3-6[4]DavidHunterJeffRafter(美)JoeFawcett,吴文国(译).XML入门经典(第四版)[M].:清华大学.2009.02.312-313[5]京华.JavaWeb整合开发王者归来[M].:清华大学.2010.01356-361[6]闫学伟成严.基于刻面分类的ERP构件检索方法研究[D].理工大学工学硕士学位论文,2010[7]文斌文登敏.基于XML描述的软件构件库的设计与实现[D].西南交通大学工学硕士学位论文,2004[8]傅翠云,常会友.基于刻面分类的构件检索技术的研究与实现[D].大学工学硕士学位论文,2008[9]贾晓辉.可复用构件库及构件检索技术的研究与应用[D].东华大学硕士学位论文,2005[10]剑江建慧.基于可复用连接件的可信软件构造方法[J].计算机应用研究,2009,21(07):33-35[11]BertLagaisseWouterJoosen.Component-basedOpenMiddlewaresupportingAspect-orientedSoftwareComposition[J].Dept.ofComputerScience,K.U.Leuven,Belgium,2004[12]雷宁宁薛锦云超.基于构件开发与传统面向对象开发之比较[J].计算机技术与发展,2007,17(8):88-91[13]马亮家,基于规约匹配的构件检索[J].小型微型计算机系统.2002.10(23):1154-1157[14]周明辉梅宏.可信计算研究的初步探疑[J].计算机科学,2004.7(08):5-8[15]廖伟池常会友等.构件检索技术的研究与实现[D].大学工学硕士学位论文,2009[16]高其胜余腊生.基于Agent的构件检索与组装研究[D].中南大学硕士学位论文,2009[17]龚小秋天煌.基于WebServices的构件库检索技术的研究[D].理工大学硕士学位论文,2009[19]WBFrakes,TPPole.AnEmpiricalStudyofRepresentationMethodsforReusableSoftwareComponents[J].IEEETransactionsonSoftwareEngineering,1994,20(8):617-630

致谢首先感谢指导老师贾晓辉老师给予我们认真负责的指导和热情帮助,她在系统建设方面不断启示我们,并且给予了我们足够的技术指导,帮助我们得以顺利完成毕业设计!其次感谢学校及学院领导对于毕业设计给大家所提供的很多有利条件,允许大家在外工作期间完成毕业设计,定期要求上交工作学习汇报等很多形式,使得大家都能在一个比较合理的时间围完成毕业相关事宜。其次感谢同小组的申越同学给予我很热情的帮助,尤其在系统整体设计和开发过程中,我们都是密切合作努力的,在经过了几个月的配合和努力,我们终于按期完成毕业设计。本次毕业设计的经历是大学期间留下的最后一笔宝贵财富,将为我今后的工作和学习提供良好的借鉴作用。今后在工作岗位上一定会继续虚心努力学习,不断提高自身的能力!最后,再次感谢所有关心和支持我的老师和同学们!

附录附录A:主要源程序publicstaticArrayList<Component>SelectDeep(ArrayList<Component>list,Stringstring){booleansign=true;ArrayList<Component>newList=newArrayList<Component>();if(!string.equals("")){while(!list.isEmpty()){Componentcomponent=newComponent();component=list.remove(0);if(component.getSelfInfo().getComponentType().equals(string)){newList.add(component);sign=false;}elseif(component.getSelfInfo().getApplyField().equals(string)){newList.add(component);sign=false;}elseif(component.getSelfInfo().getFunctionType().equals(string)){newList.add(component);sign=false;}//对应用环境进行判断//软件环境判断Environmentenvironment=newEnvironment();environment=component.getEnvironment();if(environment==null){newList.add(component);sign=false;}else{ArrayList<SoftEnvironment>softList=newArrayList<SoftEnvironment>();softList=component.getEnvironment().getSoftEnvironment();if(sign){if(string.equals("")){newList.add(component);sign=false;}elseif(softList!=null){while(!softList.isEmpty()&&sign){SoftEnvironmentsoft=newSoftEnvironment();soft=softList.remove(0);if(soft.getOs().equals(string)){newList.add(component);sign=false;break;}elseif(soft.getDb().equals(string)){newList.add(component);sign=false;break;}elseif(soft.getLanguage().equals(string)){newList.add(component);sign=false;break;}}}}//硬件环境判断ArrayList<HardEnvironment>hardList=component.getEnvironment().getHardEnvironment();if(sign){if(string.equals("")){newList.add(component);sign=false;}elseif(hardList!=null){while(!hardList.isEmpty()&&sign){

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论