彭 博,王 普,李亚芬
摘 要:软件复用技术被认为是解决软件危机的有效方法,可以大幅度提高软件开发效率和质量,其核心是建立可复用构件库系统。构件库系统最主要的问题是如何对构件进行准确描述和分类,以便更快、更准地查找到用户需要的构件。在此采用刻面分类方法在Web应用开发领域中建立软件构件库,完成了构件的定义和准确描述及分类,确定了构件的存储模型,采用关键字检索和刻面分类检索两种检索方式,有效提高了检索效率和准确性,实现了在Web应用开发中对软件复用的支持。
关键词:Web应用开发;构件库;软件复用;刻面分类
中图分类号:TP311文献标识码:A
文章编号:1004-373X(2009)20-116-04
Design and Realization of Component Library System in Web Field
PENG Bo,WANG Pu,LI Yafen
(College of Electronic Information & Control Engineering,Beijing University of Technology,Beijing,100124,China)
Abstract:The software reuse is considered to be an effective way to solve the software crisis,which can greatly improve the efficiency and quality of software development,and the core of software reuse is to set up a reusable component library.The most important question of a component library system is how to describe components accurately and classification,in order that the users could search and get their needed components faster and more accurate.In this paper,it builds a component library based on the faceted classification method in the field of Web application development,which completes the definition of components,the accurate description and efficient classification,it determines the components storage model,using key words searching and facet classification searching,it greatly improves the searching efficiency and accuracy,realizes supports of software reuse in Web application development.
Keywords:Web application development;component library;software reuse;facet classification
0 引 言
目前采用Web形式开发的软件产品需求与日剧增,其规模和复杂度不断增加,开发和维护成本也不断提高,传统的Web开发模式面临着巨大的挑战。人们在探索新软件开发方法的过程中发现,软件复用(Software Reuse)将是解决这个问题现实可行的途径[1],而软件复用的核心是建立可复用构件库系统,实现软件开发人员的合理分工,提高软件产品开发效率,缩短开发周期。软件复用是在软件开发中避免重复劳动的解决方案,其出发点是应用系统的开发不再采用一切“从零开始”的模式,而是以已有的工作为基础,充分利用过去应用系统开发中积累的知识和经验[2]。它的基本思想是借鉴现代工业生产中的标准构件复用思想,通过公共的可复用构件来集成新的软件产品,其本质上是运用现存软件系统的产品构造新的软件系统,在软件开发中避免重复劳动。国内外软件界对可复用软件构件库系统及其相关技术进行了深入的研究,并取得不少成果,比较有影响,例如北大青鸟构件库管理系统(JBCLMS)、REBOOT系统,RIG及NATO标准,ALOAF模型等。
在分析各类构件库系统的基础上,针对Web应用开发领域,建立了原型构件库系统,系统完成了用户认证授权、构件添加、构件修改、构件删除、构件入库以及下载、构件检索和维护等功能,以实现在Web应用开发过程中对软件复用的支持,使基于软件复用技术的Web应用开发人员可以快速有效地开发各种Web应用软件,提高Web应用软件的开发效率。
1 构件库系统的定义和职能
构件库系统是整个软件复用的中介和核心,是可重用构件的集合,并作为开发可重用构件和基于可重用构件开发这两个生存周期的联系体系[3]。具体地说,构件库是软件构件的基础物质仓库,是分类和管理可复用构件资产的基础设施,它在构件开发人员和构件使用人员之间起到了桥梁作用,如图1所示。
图1 构件库系统职能图
构件库系统存储并管理着大量的构件,系统必须对这些构件进行有效的组织和管理,同时还需要为构件库系统使用者提供方便有效地构件检索工具,支持开发人员在软件开发过程中方便检索、理解和获取构件。构件库系统主要职能包括:构件的选取、构件的验证、构件的描述和分类、构件的入库存储、构件的检索、构件库系统的管理和维护、构件库系统的安全访问管理等。
2 构件的定义以及存储模型
2.1 构件的定义
构件来源于英文的“Component”,对构件的定义一般来说,有广义与狭义之分。广义构件是指可以被明确标识的软件制品,它可以是需求分析、设计、代码、测试用例、文档或软件开发过程中的其他产品。狭义软件构件是指具体的、可复用的、提供明确接口完成特定功能的程序代码块[4]。
鉴于Web开发过程的特殊性,在此认为在Web开发各个阶段的各种成果对于今后的复用工作都是非常有价值的,都应当作为可复用构件存储,因此构件定义为在Web应用开发过程中的一切有复用价值的产品。例如在系统设计前的需求文档、系统的设计文档、各种模块实体代码、测试阶段的各种测试用例、各种图片或者多媒体资料等,可见这里涉及的构件的表现形式多样,粒度大小差异明显。
2.2 构件的存储模型
对于构件的存储方式,首先想到使用关系数据库(RDBMS),其具有储存和管理大量数据的高效性、理论的严密性和技术的成熟性。但是在实际应用中,由于本文定义的构件的结构相对复杂,存在形式多种多样,粒度大小多样且尺度相差有时很悬殊,这与关系数据库对所保存的数据项一般都有尺寸限制,不宜过大的要求不相符合。文件系统(Files)的存储特点是存储容量大,对存储的数据体积无限制,存储数据的形式也没有要求,但文件系统的查询效率低,不利于大量数据的存储以及管理。因此,单一使用关系数据库或者文件系统都不完全符合对构件存储的需要。
在该构件库系统中利用关系数据库来存储构件的信息部分,利用文件系统来存储构件的实体,并通过信息文件中的地址信息与构件实体建立链接。其中,构件信息中包含构件的分类信息,即按照某种分类方式确定的分类信息;基本信息是指对构件基本属性的描述、构件的说明等,可增加对构件理解的说明文件,例如构件的作者、入库日期、下载次数、构件说明文件等;地址信息则是指对构件实体实际存放位置的描述,如图2所示。
图2 构件库系统存储模型
3 构件库系统的体系结构
本文构件库系统基于浏览器/服务器(B/S)模式,采用Web多层结构,如图3所示构件库系统分为三层结构:视图层、业务层、数据层。
图3 构件库系统体系结构图
视图层主要完成系统与客户的交互工作,当客户通过浏览器向指定的Web服务器发出申请时,Web服务器将客户端的申请处理后,把处理的相应的内容再传送给客户端浏览器。
业务层将视图层提出的请求转换为对数据层的请求,并将数据层返回的数据处理,最后提交视图层。业务层负责完成各种应用逻辑,在构件库系统中,业务逻辑层体现为构件库系统的主要功能和实现,是构件库系统的核心。
数据层包括数据库和及其服务与管理系统,负责对从业务层传来的数据进行处理。并且对业务层屏蔽处理细节,屏蔽的掉了底层数据库系统的特殊性,使逻辑可以按照统一的接口访问库中的数据,提高整个系统的灵活性和可移植性。
用户对数据的访问请求,通过视图层的客户端浏览器提供的用户界面输入,并经业务层中业务逻辑转换为对数据层的数据请求,数据层的服务器处理完请求后,将结果通过业务逻辑层,返回给视图层由视图层输出显示用户所需的结果。构件库系统采用浏览器/服务器(B/S)模式及多层体系结构,有助于功能的独立与系统的扩展,同时降低了系统的复杂性和耦合度,并且使得系统更稳定、方便扩展、维护简单。
如图3所示,本文构件库系统设置了两类用户,构件库使用人员和构件库管理人员,他们都通过友好的界面接口使用构件库系统的服务。其中构件库使用人员主要使用构件检索工具获取自己感兴趣或者需要的构件,构件检索工具支持两种检索模式:关键字查询以及刻面分类查询。同时因为对构件理解最深刻的是构件开发人员本身,因此构件管理工具可以让构件开发人员添加和管理自己开发的构件。信息反馈工具可以让构件的使用者与该构件的开发者进行交流,以便构件的更新与改进,同时构件库使用人员也可以使用信息反馈工具与系统管理人员交流,讨论构件分类方式以及构件库系统管理等问题。
构件库的管理人员有权限访问并管理所有构件,并可以使用用户管理工具对构件库系统所有用户的信息以及权限进行维护管理。由于Web开发的技术日新月异,新技术、新术语不断更新,构件库管理人员可以使用刻面术语管理工具动态维护系统刻面及术语空间。信息发布工具主要用于发布系统通知信息及系统消息,构件库管理人员使用系统的文本编辑器编辑发布信息。
4 构件库分类方式以及构件的描述
4.1 构件库分类方式的确定
构件的表示、分类和检索方法,决定了构件库系统的组织、管理,以及构件库系统的查询和用户对构件的理解,是构件库系统研究的基础性问题,也是构件库系统的关键性问题。对单个构件的复用可以划分为构件的识别和检索、构件的理解和适应性修改三部分,复用成本公式[5]为:
复用的成本=检索成本+理解成本+修改成本
有效的检索机制能大大降低构件的检索成本和理解成本,对构件的分类就是为了高效方便的检索,而构件的分类最终体现在构件的分类描述上。
Frakes W和Mili H分别对现有的构件表示和检索方法进行分类。Mili按复杂度和检索效果的递增将其分为基于文本、基于词法描述子的和基于规则的编码和检索三类。Frkaes W将现有的构件表示方法分为人工智能方法、超文本方法、和基于库科学/信息科学的方法[6]。
人工智能方法采用人工智能的学习和推理机制,来维护一个表示构件的知识库[7]。该方法采用构件知识表示语言,来描述构件的属性及其特征和用于检索构件的知识。这种方法目前处于实验阶段,还没有得到广泛应用。
超文本方法使用超文本技术,主要应用于非线性关系的检索领域,通过基于属性的元模型链接为开发人员提供一个有用的功能集合,从而找到可重用的构件[8]。
基于各种形式化规格说明的方法[9,10],需要使用专门的形式化规范语言对组件进行全面细致的描述。当查找构件时,系统会对两个构件进行完整的匹配,这样的查询方式具有较高的查准率,能够满足大型构件库系统的检索要求。但是形式化规范语言的复杂性,使这种方法的广泛应用受到了很大的限制。
在实际的构件库系统中,往往采用基于库科学/信息科学的表示方法[11]。信息科学方法又分为基于受控词汇表(如枚举、刻面)分类和基于不受控词汇表分类两种形式,其中以关键词分类(Keyword)和刻面分类(Faceted)两种应用最多。现在的大型通用构件库系统应用较为普遍的也是刻面分类方式,例如REBOOT模型从抽象、操作、操作对象、依赖四个刻面对构件进行描述,青鸟构件库也是采用以刻面分类为主、多种分类模式相结合的方法对构件进行分类描述[12]。
通过对上文中介绍的几种查询方法进行比较分析,结合Web应用系统组件库查询的特殊性,确定使用刻面分类法对组件进行描述和分类,如表1所示,本文确定四个主要刻面:
(1) 功能描述(Function Description):描述构件的具体实现功能;
(2) 层次形态(Level & State):描述构件在软件开发过程中所处的层次阶段及构件的具体形态;
(3) 开发环境(Develop Environment):描述构件的开发工具以及开发语言;
(4) 应用环境(Application Environment):描述构件在使用的时候所需要的环境,包括操作系统、数据库系统、Web服务器。
表1 构件分类描述具体刻面及术语
刻面名称子刻面名称术语举例
功能描述无用户管理、信息发布、统计计数、数据库、人机交互、上传下载等
层次形态层次描述形态描述分析、设计、编码、测试等文本、图片、代码、功能模块等
开发环境开发语言开发工具HTML,Java,jsp,.Net,Asp等Eclipse,Photoshop,VisualStudio等
应用环境操作系统WebServer数据库Windows,Linux,Unix,Solaris等Tomcat,WebSphere,Apache 等MySQL,Oracle,PostgreSQL等
4.2 构件分类描述的实例
根据上文确定的刻面分类模式,举一个构件描述的具体实例:假设构件(ID=0001)是用于用户登录的模块,其功能描述为用户管理(User Manage),层次已处于测试阶段(Testing),形态为代码(Code)、是使用开发工具(Eclipse)开发的开发语言为(Java),其部署环境为操作系统(Linux)、Web服务器(Tomcat)、数据库(MySql),构件相应的XML描述如下: