面向构件的软件开发

2024-08-07

面向构件的软件开发(精选10篇)

面向构件的软件开发 第1篇

1 软件构件库系统简介

软件构件库系统是软件复用的中介和核心, 是可重用构件的集合, 构件库系统负责存储和管理大量的构件, 其主要功能有:构件的选取、构件的验证、构件的分类和表述、构件入库存储、构件库的检索以及构件库系统的管理与维护等。具体来说, 构件库系统一方面需要为构件库系统使用者提供检索服务, 另一方面还要为软件开发人员在开发过程中方便获取和检索构件提供支持, 可见, 构件库系统在构件开发者与构件使用者之间起到了桥梁的作用, 如图1所示。

2 当前软件构件库系统存在的问题

当前世界范围内可用的软件构件库数量极为有限, 这些构件库系统中都提供了固定构件分类模式和检索机制, 在一段时间内取得了不错的成果, 然而随着构件数量的不断增加, 这些构件库系统在使用过程中检索和获取的困难就越来越大, 同时也不利于构件的管理和维护。具体表现在以下几个方面:

2.1 构件检索难度大

由于构件的数量越来越多, 在用户输入关键词进行检索时, 很可能检索条件不具备唯一性, 从而出现多个满足检索条件的构件, 给用户的使用带来了一定的麻烦, 用户要想在短时间内快速准确地在众多构件中选取所需构件, 很大程度上需要依赖用户对构件的复用经验和用户自身对构件的主观理解和判断, 因此检索和复用的效率极为低下。

另外, 当前软件构件库系统是通过刻面属性、关键词、关系等表达所需构件的特征以进行构件的检索。然而, 访问构件库的用户具有不同的层次, 对构件刻面的理解会有差异。而且刻面分类模式对于面向多个异质领域的构件库来说, 很难用有限的刻面数量来描述众多领域的软件构件。

2.2 构件库系统操作过程存在缺陷

当前软件构件库系统广泛采用的技术是关系数据库技术, 具体来说就是首先对构件的刻面信息和关键属性进行技术性的提取, 然后将这些信息存储到关系数据库中, 用户要想获得相应的构件, 就可通过关系数据库进行相应的操作。这样的操作过程存在着其固有的缺陷, 即构件库系统没有向用户提供有效的辅助决策工具, 使得用户在使用过程中没有科学的参考, 导致构件复用的效率和质量大大降低。

3 建立面向领域的软件构件库系统的相关策略

3.1 面向领域的软件构件库系统使用

根据上述问题, 本文提出在采用刻面分类策略的基础上, 充分结合多种分类策略的模式来建立软件构件库, 同时可采用文件数据库、XML数据库、关系数据库相结合的技术来存储构件, 具体为:软件构件首先存储于文件系统中, 而后通过XML技术对构件进行描述, 最后用关系数据库来存储关键信息。这样, 用户在使用软件构件库系统提取构件时, 即可在原来的基础上结合文档内容和XML作为辅助决策手段, 为用户提供定量的数据, 增强决策的客观性, 从而提高构件的复用效率和质量。

3.2 面向领域的软件构件库系统的建立

最大限度地促进构件复用是建立构件库系统的最终目的。构件库中的构件可通过两种方式得到:一是自行设计和制造, 二是向商业性软件机构购买。在构件库系统中, 通过对构件合理的分类和描述后将其存储在构件库中, 构件的使用者通过检索系统获取所需的构件。在构件库系统的建立过程中, 建立科学的检索机制是促进构件库高质量使用的重要一步。为减轻构件库系统使用者的工作量, 使其在有限的时间内实现对所需构件的快速获取, 构件库应当为使用者提供多样化的检索途径, 并使查询界面尽可能友好。在面向领域的软件构件库系统中, 可采用的检索方式有很多, 最常见的有刻面分类检索和关键字检索等, 其中刻面分类检索方式的检索结果较为精确, 检索效率很高, 但同时也相对更加复杂, 其对使用者的要求也较高, 比如要具备一定的行业经验、熟悉行业的专业术语等。而关键字检索操作较为简单, 检索速度较快, 更容易上手, 但同时检索结果也不够精确, 容易给使用者带来较大的工作量。有鉴于此, 在实际工作中, 可采用以刻面分类检索为主、关键字检索等为辅助的检索方式, 以此为基础建立检索机制, 一方面使得专业人士可以快速、准确地检索、获取所需构件, 另一方面也给使用者提供更多的检索选择, 在一些不易采用刻面检索的场合使用关键字检索。

另外, 构件库系统中还包括有体系管理工具、构件管理工具和反馈工具等辅助性工具。其中体系管理工具主要功能是对构件进行分类管理和维护, 包括选择刻面和对术语空间的动态维护;构件管理工具的主要功能是验证构件的合法性, 将不合格或者不需要的构件去除, 使构件库不断更新;反馈工具主要是建立在使用者和构件管理者之间供二者交流的机制, 构件开发和管理者可根据用户的使用体会和建议不断完善构件库, 有利于构件库系统的不断升级, 使其发挥应有的作用。

结束语

构件库系统对于构件的分类、组织、存储和检索均具有十分重要的作用, 当前有限的构件库系统在使用过程中存在着检索效率低、辅助决策不足等缺陷, 因此在建立构件库系统时应当充分考虑这些问题, 以使构件库系统为用户提供更好的服务。

参考文献

[1]彭博, 王普, 李亚芬.面向Web领域的构件库系统的设计与实现[J].现代电子技术, 2009, 32 (20) :116-122.

[2]陈平平, 谭定英, 曾艳.面向领域的软件构件技术研究[J].现代计算机 (专业版) , 2007 (3) :15-17.

面向构件的软件开发 第2篇

构件技术是软件复用的.主要发展方向之一.简要介绍基于构件的软件开发方法(CBSD),提出了基于构件的高速公路联网收费系统车道软件开发模型,并在此基础上实现了高速公路联网收费系统车道软件.该软件具有可靠性强、耦合度低、重用性高、扩展性好、升级维护方便等特点,已经在高速公路收费系统中得到应用,效果良好.

作 者:徐延军 唐又林 作者单位:徐延军(上海交技发展股份有限公司,上海,35;同济大学经济与管理学院,上海,92)

唐又林(上海交技发展股份有限公司,上海,200135)

基于构件重用的软件开发方法研究 第3篇

关键词:软件重用;构件;实现;软件开发

中图分类号:TP311.52 文献标识码:A文章编号:1007-9599 (2011) 08-0000-01

Software Development Methods Research Based on Component Reuse

Jin Xin

(Jiangxi Tourism Business Vocational College,Nanchang330100,China)

Abstract:Because of its many elements characteristic of software development is becoming a hot,component-based software development method is considered to solve the software crisis and to improve software productivity and quality of a realistic way.The goal is to achieve component reuse requirements,analysis,design,coding,test reuse.

Keywords:Software reuse;Component;Achieved;Software Development

一、构件软件开发过程

(一)构件选取

构件选取是将过去开发的组件按照适合新系统的原则选取出来的过程。也可以是在构件交易中购买合适构件的过程。这个过程甚至延伸到开发构件和维护构件的质量保证。

构件选取包括两个阶段:发现阶段和评估阶段。在发现阶段,构件将会被明确属性。如构件的功能(能提供什么样的服务),构件的接口(使用的方法)。这些属性还应包括一些不能孤立看待的要求,如构件的可靠性、可用性、可扩展性。在有些情况下也要考虑构件的非技术特性,如提供者的市场占有率,构件开发组织的过程和成熟度等。

在评估方面,现在已经有了好多种成熟的评估方法。例如Standards Organization(ISO)描述的产品评估的通用标准,以及IEEE的特定域的构件评价技术,还有适用于特定问题域的技术。这些方法都是基于一定的构件研究理论产生的解决构件质量评估的方法。但就构件评价技术本身来说是不确定的,这是使用难以互相比较的标准,不明确的系统期望,不精确的评价方法以及构件的快速修改造成的。

(二)构件的调整

由于单个的构件是为了完成特定的需求,基于不同的上下文假设。因此构件在应用于新系统之前需要调整。必须将构件之间的冲突降低到最小。常用的方法包括:1.白盒法。用户可以通过修改构件的源码使构件能与其他构件相互作用。该方法可以对构件的特性进行细致的控制,但修改源码可能会导致维护和升级问题。2.黑盒法。用户可以得到构件的二进制可执行形式,构件没有提供扩展机制或API。3.灰盒法。源码不可以修改,但提供了构件自身的扩展机制或可编程接口(API)。

二、系统的实现

(一)系统中的构件实现

软件工程网络课堂教学系统的开发环境为前台开发选择ASP,后台采用SQL Server 2000数据库,构件模型通过B/S构架的三层体系结构(表示层、业务逻辑层和数据访问层)实现。

现以课件构件的开发过程为例,说明一个构件中的用户界面/表示层、功能/业务逻辑层和数据访问层的实现。

1.课件上传构件的用户界面层实现。表示层的用户界面可分成动态和静态两种。通过Dreamweave的模板实现静态界面功能,通过ASP技术生成动态页面。动态页面中常见的动作是:解释用户请求;分发这些请求到相应的业务逻辑;选择下一个显示视图;生成和传送下一个视图给用户。

2.课件上传构件的功能/业务逻辑层实现。课件上传的业务逻辑层的作用是将用户上传的文件存入数据库,并将与文件相关的说明在用户界面层上显示出来。出于系统安全性的考虑,在构件设计时,对文件格式进行了限制,只能上传RAR压缩文件,并按照上传时间以“年+月+日+分+秒”的数字组合为文件重新命名,这将有效避免文件重名。

该层实现上使用VBScript脚本语言构造了一个类模块(add.asp)。该类包括如下属性:MMtitle(课件标题)、MMteacher(上传用户(系统自动生成))、MMunit(所属章节)、MMdiscrib(内容说明)、set upload(上传路径)、set file(存储路径(系统自动生成))。

3.课件上传构件的数据访问层实现。在系统数据库的开发过程中,为了方便今后数据库的维护与重用,将其具体功能如查询、插入等操作封装到一个构件(kejian.asp)中。

(二)基于构件的系统组装

1.原子构件的组装。现以课件上传构件为例,说明原子构件的组装过程。原子构件组装的思想是将构件模型中涉及到的三个层次组装成构件。通过原子构件的组装,以上用户界面、功能/业务和数据访问三个层次的成分组合成一个完整的课件上传构件。

在上述三个构件中,功能/业务层处于用户界面层之下、数据访问层之上,因此以功能/业务层构件add.asp作为组装的基础。其具体组装过程为:将用户界面层构件module.asp用VBScript脚本进行引用。引用语句为:

〈!--#include file="module.asp"--〉

数据访问层调用采用面向对象方式,将类FileInfo和类upload_file通过内部接口与类kejian组装成一个高内聚低偶合的原子构件,再通过外部接口与功能构件add.asp连接。

2.复合构件的组装。复合构件是由多个原子构件组装后形成的独立构件,封装在文件夹中,构件之间既没有数据上的耦合,也没有行为上的耦合,故采用黑盒方法进行组装。在组装时,通过接口绑定建立复合构件组装的外部接口和内部接口的对应关系。通过各种不同的连接件可以完成一些复杂的接口绑定,以实现所需的复合构件。复合构件的外部接口采用扩展连接件。由于扩展连接件据具有可扩展的特性,由其组装成的复合构件也具有可扩展的特性,同时内部接口是基于消息传递的,从而使组装出来的复合构件具有动态性。

参考文献:

[1]傅音翔.一种基于构件的软件开放方法[J].微计算机信息,2006,22

面向构件的系统开发及其形式化 第4篇

在不同上下文中,软件构件有不同含义,例如功能模块、类、对象或一组相关函数;另外的定义还包括标准类库、框架、CASE模型,以及任何可重用的软件制品等。通常,构件应具有这几个方面的特性,即:有用性,构件必须提供有用的功能;可用性,构件必须易于理解和使用;所需质量,构件能保证服务质量;适应性,构件应易于通过参数化等方式在不同语境中进行配置;可移植性,构件应能在不同硬件运行平台和软件环境中进行工作。

根据应用的范围,构件可分为三类,即基本通用构件,如数据结构、界面元素等;领域共性构件,仅在该应用软件所属领域内经常出现的构件;应用专有构件,仅在该应用软件中出现的特定构件,此类构件不可复用。可复用构件指前两者,通常情况下构件指可复用构件。

现在最常用的构件标准有三种:①对象管理组织OMG制定的公共对象请求代理体系结构CORBA,它是一套分布式对象技术标准,涉及接口、注册、数据库、通信和出错处理等方面的问题;②微软公司开发制定的COM/COM+;③SUN公司提出的基于Java的构件模型EJB/Java Bean,它采用纯Java编写,独立于平台,具有良好的互操作性。

形式化方法是一种用于规范、设计和验证计算机系统的基于数学的方法,包括各种语言、技术和工具等。形式化方法可以分为形式规范和形式验证两大类,形式规范包括各种基于数学的表示法、规范语言以及对应的工具;形式验证包括各种模型检查器、定理证明器以及证明和验证的方法等。形式规范使用规范语言来描述系统,这种规范语言具有严格数学定义的语法和语义,使用形式化的规格说明语言描述系统及其性能,可以帮助开发人员获得对所描述系统的深刻理解,有助于发现需求中隐含的不一致性、二义性、不完整性,在早期发现设计中的错误和缺陷。近年来,人们研制出多种形式化语言和半形式化的语言用以对系统的状态和行为进行描述和验证,如LOTOS、E-LOTOS、CSP、Petri网、Larch、Clear、OBJ、过程描述语言PDL、Z语言、B语言、VDM、统一建模型语言UML。形式验证使用严格的数学方法来推理验证产品或设计是否符合其全部或部分规范,它要求产品的规范和实现均需要有严格的形式描述,目前形式验证主要有两种方法:模型检验和定理证明。

1 软件构件的形式化

典型的构件形式化描述方法有代数规格说明方法、多形式体系方法和多层次规格说明方法。代数规格说明S = (T,F,A)描述可复用构件的核心思想是,通过类型T的函数集F描述构件的功能,T的元素作为F中函数的输入输出集,公理集A描述了函数的功能。它的语义允许一些类型可见,一些不可见。对代数规格说明可进行三个方面的扩充:增加操作、参数化、附加接口描述。所以可以从不同的抽象层次和不同的角度来描述构件。多形式体系方法是从多个角度来描述构件。多层次规格说明方法允许每个高层规格说明对低层规格说明施加一些约束。在垂直方向,设计实例的规格说明必须继承父对象的规格说明;在水平方向,设计实例的规格说明可以继承设计框架的规格说明,设计框架的规格说明必须继承领域模型的规格说明,这种方法可以提供不同抽象层次的规格说明,适用于大型构件的复用。

一般来说,一个构件由需求、设计知识、代码片段或检测计划组成,可以实施封装和数据隐藏,是基本的可重用单元。用户定义类型的构件,其行为可由形式化规格说明进行描述如下[1]:

在method部分的规格说明定义了这个构件的动态行为,其余部分描述的均是构件的静态特征。一个方法的规格说明格式如下:

method method-name ((Var:DomainSort)*) → Var:RangeSort

requires:Pre-conditions

ensures:Post-conditions

其中requires描述的是方法的前置条件,ensures描述的是方法的后置条件。若一个方法没有一个精确的requires子句,其缺省值是true。

文献[2]提出了一种形式化的方法对软件构件集成行为进行描述,将构件接口作为线程进行研究,并将构件接口分为触发器和响应器,介绍了如何从线程的角度对同步、异步并行以及异步互斥情况下表达构件交互语义等。该方法克服了在构件集成过程中,构件接口交互语义难以描述的问题,能够更加直观、清楚、完整地描述接口交互的语义和系统集成的静态与动态特性。文献[3]根据AND-CASE环境提出了一个构件表示模型,采用综合刻面表示方法,把刻面方法和规格说明的方法结合起来,以兼顾刻面方法的灵活易用性和规格说明方法的规范性。根据构件表示模型框架内建层次词典,将分类进程半自动进行,使其适用于各种类型的构件库,并为具有不同技术水平的用户提供不同的搜索等级。该文在可复用构件表示模型中把软件构件看成一个四元组C=<CN,CP,CI,CS>,其中C表示构件,CN为构件名称,是构件的标识符;CP是描述构件重要特征的属性集合;CI={Operation|Operation=<Operation-Name,Description>},Operation-Name是操作名,Description是对操作的描述;CS是对构件功能进行描述的形式化规格说明,描述构件的动态行为特征,规格说明语言可以采用谓词逻辑的形式。

Resolve是一个较有影响的构件描述语言,用基于方法的数学模型表达构件的形式化规格说明。它给出构件的类型、操作所满足的前置和后置条件、实现、构件模型和表示法的对应关系。Resolve用数学模型描述构件的接口需求、接口需求与一个可能的实现间的关系,适合于可重用构件的设计。文献[4]详细介绍了构件属性模型、构件描述方法、构件描述语言、构件的BNF表示法、构件的操作原语。近来,由于XML的逐渐成熟与广泛应用,出现了利用XML来描述构件的研究,并发表了一些成果,如IBM的Bean Markup Language(BML)(http://www.alphaworks.ibm.com/formula/bml,1999)、加利福尼亚大学欧文分校(University of California,Irvine,UCI)的C2体系xADL(http://ftp.ics.uci.edu/,2002)等。利用XML技术,可以大大提高构件描述语言的开放性与可扩展性。

2 典型的面向构件的软件开发

面向构件的软件开发的理论建立在软件工程、软件复用和分布式计算等基础之上,已经成为新一代的软件开发方法,是通过组装现有构件的方式来建造新系统,可见基于构件技术的新系统是容易理解和演化的。典型的面向构件的软件开发过程如图1所示。

软部件经设计阶段后,由程序员实现,编译器进行编译,以二进制代码的形式存放于可重用软部件库,通过封装,自成一体,支持相应的功能,并最终成为某应用程序的组成部分。

WREN是C.Luer等提出一种基于构件的开发环境[5],它是用JAVA语言编写的,支持JAVA语言开发的构件和用JAVA语言来描述构件的组装,不但将JAVA作为编程语言,也将JAVA作为构件描述语言。由北京大学主持、研制的集成环境“青鸟III系统”对构件获取、构件制作、构件组装进行了系统而深入的研究[6],提出了基于体系结构的构件组装技术和相应的体系结构描述语言ABC(Architecture Based Composition)/ADL。Michihiro Matsumoto等从研究构件连接子的可靠性出发,设计了支持高度可靠的基于构件的软件开发工具[7]。其提高可靠性的方法是自动验证求精后的需求规约和自动生成连接子。该工具以体系树为基于构件的软件体系结构,用行为规约投影来表示原始需求规约和精化后的描述构件关联的规约,并根据精化后的规约中的连接子部分和原构件连接子之间的对应自动生成新的连接子。John Penix提出了一种构件自动自适应和集成的框架Rebound[8]。由于其核心思想是通过构件规约及应用需求规约的匹配来选择构件的自适应策略,因而被称为“基于理解的复用”。

3 基于形式化方法的面向构件的软件开发

集软件重用、分布式对象计算、企业级应用开发等技术为一体的基于构件的软件开发以软件构架为组装蓝图,以可重用软构件为组装模块,支持组装式软件的重用,将大大提高软件生产效率和软件质量。

然而,现有的构件模型往往没有形式化的规格说明。非形式化的描述可以帮助了解构件的接口是怎样的,但是它不能描述构件的功能是什么(虽然可以用自然语言来描述,但自然语言有其模糊性,而且也不利于构件检索与组装的自动化)。描述的接口只有各个函数的特征标识,没有规定接口的语义。也就是说,某个构件即使在语法上实现了某接口,也不能保证在语义上实现了该接口,这是因为完全不相关的函数也可以使用相同的函数特征标识,所以,必须在构件模型中引入新的方法来进行描述。形式化方法是以数理逻辑、代数、自动机、图论、集合论等数学理论为基础构造程序设计语言、技术及工具来规范和验证系统的方法,可以用来描述构件的语义和软件的开发。而且,形式语言可以交由计算机自动处理,可利用相应的软件工具对规格说明进行分析、查错、验证以及求精变换,便于对规格说明的各种性质进行推理或证明。

因此,将形式化方法应用于基于构件的软件开发,能更有效地提高软件开发的效率,改善软件的质量,降低软件的维护成本。图2是本文根据典型的面向构件的开发流程和基于形式化方法开发软件的特点提出的一个基于形式化方法的面向构件的系统开发模型。

当存在大量构件时,要获得所需的构件,必须对其进行检索。形式化规格说明方法依赖于其语言的表达能力,具有较高的查准率,能适应大型构件库的构件组织和检索要求。在形式化的方法中,可把构件C表述成以下的二元组[9]:

C=(CS,CODE)

其中CS为软部件的规约;CODE为软部件的程序代码。对于规约CS可进一步划分为语法、语义两部分:

CS=(∑,A)

其中:∑为标记集合;A为公理集合。在检索过程中,先进行语法检查,再进行语义检查,判断是不是所需的构件,这种方法克服了非形式化方法不够精确的缺点。文献[10]用谓词逻辑的形式给出了构件的匹配、易修改性和检索效率等概念的形式化描述。文献[1]提出了基于构件重用的社会化软件工程模式。

形式化方法和工程界的常规方法相比有明显的区别,它们的开发原则不同。形式化方法希望能直接构造出尽可能正确的系统,而常规方法主要是通过测试来发现系统的错误。

4 讨论与总结

基于构件的软件开发模式已经成功地应用于软件开发活动中,采用构件技术进行软件开发可以减少程序的代码量,提高软件开发效率,并且随着构件重用度的提高,可以减少开发软件的成本。用形式方法开发软件可提高软件系统的正确性和可靠性,进而增强软件开发的可维护性。将形式化方法应用于基于构件的软件开发,是解决系统开发难点的一个可行方案。鉴于构件技术和形式化方法的特点,提出以下建议和研究方向:

(1) 实施构件标准化,包括构件模型的标准化和构件库的标准化。

(2) 建立对构件质量有效的评价模型,以及针对构件质量模型的可操作的度量方法。

(3) 构件组装和组装推导是基于构件的软件开发的关键技术,寻求提高构件组装的抽象级别和粒度的方法。

(4) 软件开发受到各种因素的制约,且形式化方法也有自身的弱点(如易读性比非形式化方法差),在基于构件技术开发软件时,应根据实际情况适当地、适时地应用形式化方法。

本文根据典型的面向构件的开发流程和基于形式化方法开发软件的特点,提出了一个基于形式化方法的面向构件的系统开发模型。

参考文献

[1]王淑红,袁兆山.基于排序形式化规格说明的软构件匹配[J].合肥工业大学学报:自然科学版,2000,23(4):477-481.

[2]李阳,吴朝晖.一种形式化构件集成语义的研究[J].浙江大学学报:工学版,2004,38(2):135-140.

[3]袁兆山,王淑红.可复用构件表示模型研究[J].计算机应用,2001,21(1):1-3.

[4]罗铁祥,徐正权.异质可复用构件属性模型[J].中南民族学院学报:自然科学版,2000,19(3):28-33.

[5]Luer C,Rosenblum D S.Wren—An Environment for Component BasedDevelopment[A].On the Foundations of Software engineering[C].Joint8th European Software Engineering Conference and 9th ACMSig-soft intl.Symp.,Vienna,2001.

[6]杨芙清,梅宏,李克勤,等.支持构件复用的青鸟III型系统概述[J].计算机科学,1999,26(5):50-55.

[7]Michihiro Matsumoto,Kokichi Futatsugi.The Support Tool for HighlyReliable Component-based Software Development[A].Proceedings ofthe Seventh Asia-Pacific Software Engineering Conference(APSEC0'0)[C],IEEE,2000,172-179.

[8]John Penix.Deductive Synthesis of Event-based Software Architectures[A].14th IEEE International Conference on Automated Software Engi-neering[C],Cocoa Beach,Florida,USA,IEEE,1999.

[9]屈延文.形式语义学基础与形式说明[M].北京:科学出版社,1989.

[10]郑建丹.基于组件的逐步求精程序设计方法[D].北京:中国科学院软件所,2001.

面向构件的软件开发 第5篇

在航空领域中树脂基等复合材料因其具备高比模量和高比强度的作用优势,被广泛应用于实践。然而,随着该类材料应用技术研究的不断深入,其使用成本较高的缺陷问题日益突出。在此行业状态下,开发出一种树脂基复合材料的新型成形方法,已经成为实现航空业快速稳定发展的急需解决问题。VARI(VacuumAssisted Resin Infusion),是一种在真空状态下利用单面模具,将树脂浸润于纤维后固化成型的工艺方法。该工艺方法的应用不仅能够使树脂基复合材料在低温固化、热压罐以及结构件整体性的条件要求下实现成型,还能作用于零孔隙含量的航空典型结构件成型。因此,其被誉为生产航空典型结构件的制造工艺中最具发展潜力的工艺技术。然而,在该工艺技术的实际应用过程中,其存在制造复杂、涉及技术标准多以及工艺规范要求高的问题特点,这就在一定程度上阻碍了技术普及的发展进程。基于此,相关建设人员应通过仿真软件来提高VARI 工艺方法成型的过程效率,从而满足航空业发展对典型结构件的应用需求。

面向构件框架的研究与设计 第6篇

基于构件软件开发的主要思想是使用现存的构件来建构软件系统。在软件复用方面,传统的开发方法最多只能做到代码复用,面向对象技术促进了软件复用,但也只是实现了类和类继承的复用,对于整个系统来说,还存在很大的缺口,不能做到核心功能的复用。面向构件的开发是软件复用领域的研究热点,被视为软件工业化生产的必由之路。

2 构件技术概要

2.1 构件的定义

什么是构件(component)?“软件构件是一种组装单元,它具有规范的接口规约和显式的语境依赖。软件构件可以被独立部署并由第三方任意地组装。”[1]它的基本理念是把软件开发过程中会重复用到的部分封装起来,等到有新的同样的需求时再调用。被封装的对象类、类树、一些功能模块、(framework)、软件构架(或体系结构Architectural)、文档、分析件、设计模式(Pattern)等都可视为构件。

2.2 面向构件技术

构件技术(如CORBA、COM、JavaBean),关注的是构件的描述方法、调用方法和运行体系,业界用得比较多的是“基于构件的软件开发(CBSD)”。而这里的面向构件的软件开发是指在软件开发中,以构件为中心组织整个开发过程,从分析、设计、开发、测试、发布和管理,一直到维护,整个软件生命周期中的每个阶段都统一以构件为基本单位进行工作。

面向构件的软件开发,使得开发人员能够通过拖拉式的图形化编程方式快速地实现面向构件的系统的设计、开发、组装和调试。整个开发工作屏蔽了技术细节,使得开发工作像“搭积木”一样利用构件库中的每个构件的映射实现编程,从而实现了业务和技术的分离[3]。

2.3 面向构件与面向对象的比较

面向构件的软件开发(CBD),吸收包括面向对象技术在内的众多传统方法和技术的优点。因此,面向构件技术与面向对象技术即紧密相关,又有区别。首先,在概念层面上,对象描述客观世界实体,构件提供客观世界服务;其次,在复用策略上,对象是通过继承实现复用,而构件是通过合成实现复用;再次,在技术手段上,构件通过对象技术而实现,对象按规定经过适当的接口包装之后成为构件,一个构件通常是多个对象的集合体。最后,从抽象程度来看,面向对象技术己达到了类级重用(代码级),它以类为封装的单位,构件将抽象的程度提到一个更高层次,它是对一组类的组合进行封装,并代表完成一个或多个功能的特定服务,也为用户提供了多个接口。

2.4 面向构件的软件生产模式及其优点

面向构件的软件体系,使得用户的需求改变可以直接通过构件装配式的图形化设计思路得以体现,使得软件架构师和程序员跳出传统开发模式的局限,是代码式软件体系的颠覆和革新,使得软件生产有了一全新的模式,如下图1所示。

面向构件开发能够屏蔽技术实现细节、提高软件的质量和稳定性、得化软件开发流程、提高开发的灵活性、降低大型系统的复杂度和维护难度等优点。目前,CBD主要被用来帮助控制大型系统开发的复杂度和风险,在开发的构造和部署阶段中提供一种以架构为中心和以重用为中心的方法。

3 框架的设计与实现

3.1 设计思想

为降低大型系统的复杂度,软件系统的架构经历了对问题空间分解,垂直分割、横向切割,横切竖割相结合的发展过程。面向构件的思想,就是把复杂业务进行横切竖割的分解,再用一个个的不同粒度的构件“编织”整个架构,它可以把精力全部放在业务功能上而不必操心太多技术细节。[3]

本系统采用多层次的构件体系,在实现上,利用现有成熟的技术支撑,在eclipse平台上,结合开源技术如Hibernate、Spring、Struts等,以插件的方式实现框架功能。系统框架如图2所示。

3.2 具体设计与实现

本平台使用主流的开源框架Hibernate实现O-R实体映射;再通过对Hibernate的封装,实现与低层数据库无关的通用数据库操作构件。另外,本框架采用现行主流框架Spring来实现事务管理。

这里的运算构件层主要用是带静态的方法的Java类来实现,以XML文件描述其接口和参数,对业务逻辑提供接口调用,给应用开发人员提供图形化组装。

业务构件层,主要由业务引擎和业务构件组成,实现对应用逻辑的处理过程。对上层提供规范的接口以被调用,对下层,调用运算构件,以流程化的方式使之构件粒度较大的业务构件。

展现构件层,是连接用户界面与业务处理的中间层次。由展现引擎和展现逻辑流程组成。对于应用展现引擎接受服务请求,调用业务构件层的业务构件计算处理,再返回给用户界面。

页面层主要提供对应用系统的用户界面支持。由于在展现引擎返回给页面之前,采用Struts动态Bean对XML数据进行转换封装,使得JSP页面即可支持JSTL表达式语言,同时支持Struts标签。在整个架构中,从运算构件层到展现层,各层的引擎都将数据规范为XML格式,放在XML总线中,通过XML的DOM方式,封装了应用的各个数据区构件。

最后,图形界面用Eclipse的GMF技术结合基于模板引擎的代码生成技术做成Eclipse插件来实现。用户在拖拉(组装)构件,使之成为业务流程,GMF在后台则生成对应的XML描述配置文件,系统通过对xml配置文件的解析封装,用模板引擎成生业务流程的java文件并编译。

4 框架的设计和实现的优点

在吸取经典的三层体系结构优点,使得构件粒度更加细化,软件开发更为有效。平台在软件开发周期的每一阶段,都以构件为核心,具有统传构件技术的优点。

本架构实现了应用系统和代码的分离,程现给应用开发人员的是图形化构件和规范的接口,使得应用逻辑易于调整以适应需求的变化;而业务数据则通过XML总线方式独立于应用逻辑,使应用系统的具有良好的数据扩展能力。Struts+Spring+Hibernate的整合开发,是现行J2EE开发为程序员所喜爱的开发方式,基于这些开源框架的开发人员成熟性和稳定性。

由于对问题空间的有效分割,框架具有清晰的分层结构,在实现上又吸取了主流开源框架的优点,使得整个框架具有良好的可扩展性。

5 总结

本文文阐述了构件技术的基本概念和面向构件的软件生产模式,接着对面多层次的架构进行研究设计并结合主流的开源框架在eclipse开台上以插件的形式实现,最后,用实现的面向构件开发平台,来组装企业应用的合同管理系统。

被视为解决软件危机的构件技术将促进软件产业的变革。专业化的构件生产将成为独立的产业而存在,软件系统的开发将由软件系统集成商通过购买商用构件,集成组装而成。目前国内外越来越多的软件系统采用面向构件的技术进行开发,围绕构件的生产、管理和组装将形成具有相当规模的构件市场和构件开发工具市场。随着构件应用的推广和深入,对构件组装技术、构件构架技术、分析设计构件的描述和复用、特定领域软件构架、构件库部署等问题的研究也会不断深入发展。总之,面向构件的软件工厂正日趋成熟,其应用前景十分广泛。

摘要:面向构件软件开发的主要思想是使用现存的构件来建构软件系统,是提高软件开发效率和质量的有效途径,可复用的构件在软件复用技术中作用重大。该文首先阐述了构件的概念和面向构件技术优点,研究并设计了一种面向构件的架构,接着结合现行主流的开源框架,以eclilpse插件的方式给予实现和检验;最后,对面向构件技术的发展进行了展望。

关键词:软件复用,构件,面向构件

参考文献

[1]Szyperski C,Gruntz D,Murer S.构件化软件——超越面向对象编程[M].2版.王千祥,译.北京:电子工业出版社,2004.

[2]黎娅.基于构件的软件复用技术应用研究[D].重庆大学,2008.

[3]Mili H,Mili F,Mili A.Reusing software:Issues and research directions[J].IEEE Trans Software Engineering,1995,21(6):528-562.

[4]Whittle B.Models and languages for component description and reuse[J].ACM SIGSOFT SoftwareEngineering Notes,1995,20(2):76-89.

[5]刘伟.基于观测模型的构件化软件集成测试方法研究[D].中国优秀硕士学位论文全文数据库,2007.

[6]户军茹.嵌入式软件关联测试方法的研究[D].中国优秀硕士学位论文全文数据库,2007.

[7]杨芙清,梅宏,李克勤.软件复用与软件构件技术[J].电子学报,1999(2):68-75.

面向图形的构件依赖关系的描述方法 第7篇

随着软件规模和复杂度的增加,人们越来越多地利用构件技术开发出单独部署运行、完成相对独立功能的构件,再通过构件来建造软件系统[1]。现有开发工具和开发方法都关注在构件本身的设计上,系统中的依赖关系描述则散落在系统的各个地方[2]。由于缺少依赖关系的描述,开发者很难发现或者很好地解决这些依赖关系,尤其是隐式的依赖关系,因此很难构建出健壮高效的系统[3]。

基于以上原因,我们提出了基于图形的OrbGOP模型[4],它采用面向图的编程模型来描述基于构件的系统的软件体系结构,以图形操作原语实现构件间的调用。在此模型基础上,我们提出一种描述构件间依赖关系的方法,进而实现OrbGOP对软件的体系结构描述和动态配置的良好支持。

1 OrbGOP模型

OrbGOP是一种建立在GOP(Graph-Oriented Programming,面向图形编程)方法基础上的CORBA实现[5]。如图1所示,它用一种逻辑结构图形来直观地描述构件之间的关系。在OrbGOP中,基于CORBA的分布式应用可定义为运行在不同处理器上的CO(Component Object)的集合,图的顶点代表CO,边则表示CO之间的各种关系,如方法调用、消息广播、数据库查询等。OrbGOP允许用户自定义图形,这些图形具有CO的命名、依赖关系和配置,并且还具有描述CO之间的消息传递机制等功能。在此基础上,用户就可以撇开底层细节,而实现较高层次的CORBA程序设计,当然该框架也支持其它分布式应用的编程。图形本身具有直观、易理解的特点,用户还可以通过改变图形结构的命令,实时更新系统来完成应用程序的动态配置。

2 OrbGOP中依赖关系的描述

2.1 依赖关系定义

对于整个系统的依赖关系的描述,我们采用了分治法,即只要把每一个构件自身的依赖关系描述清楚,整个系统的依赖关系也就清楚了。对于每一个构件,以下定义所包含的信息是必须要描述清楚的:

定义1 构件提供的服务信息,是指构件自身对外提供的服务,是对构件自身所具备功能的描述。

定义2 构件主动调用的服务信息,是指构件作为客户端调用其它构件的服务的信息。

定义3 构件被动调用的服务信息,是指构件被其它构件使用的情况。

2.2 实 例

下面以一个实际生活中的场景来举例,对OrbGOP中的依赖关系描述作分析说明。这是一个用户在ATM机上进行转帐操作的例子,为了完成这个功能,系统定义了5个构件,业务的流程和体系结构如图2所示。

图2中,结点和构件存在映射关系,结点之间以有向边代表关联关系,根据图2的体系结构,就可以生成图信息的定义,图定义的代码在此略去。根据图信息OrbGOP可以分析并自动产生以XML为描述语言的构件间依赖关系的描述,以Transfer构件为例,Transfer构件被动调用的服务信息可以描述为:

这段代码描述了Tansfer构件的TransferMoney服务正在被ATM构件使用,所以,当Transfer构件被更新时一定要考虑到ATM构件的情况。为了严格规范上述对依赖关系的描述,OrbGOP中依赖关系的描述都定义了XML Schema规范,如果依赖关系的描述不符合这些XML Schema的约束,系统将给出错误信息。

用类似的方法,可以从构件服务信息、构件主动调用服务信息、构件被动调用服务信息这三个方面,把一个构件自身的依赖关系描述清楚。OrbGOP中每一个构件都包括这样三个方面的依赖关系的描述。

3 OrbGOP中动态依赖关系的描述

以上所描述的依赖关系,是一种静态的依赖关系,或者可以称之为是构件部署的先决条件。本节仍然以上述的ATM机转帐业务的场景为例,对另一种动态的依赖关系进行分析。

3.1 依赖关系的更新

假设Transfer构件有了一个增强安全功能后的更新版本,该构件需要在系统不停止运行的情况下被更新,这样动态地替换一个构件,在OrbGOP中可以理解为在图上用新结点替换一个旧结点。在OrbGOP框架中有一个事件传递和处理的机制,一旦依赖关系发生变化,也就是图信息发生了变化,图信息变化事件会立刻产生并在OrbGOP框架中传递,OrbGOP可以捕捉这个事件并加以处理。OrbGOP中所有结点类都继承了一个抽象结点类,由这个所有结点的超类来产生依赖关系发生变化的事件,并负责回调事件处理方法。以下是该类的部分定义:

从定义中我们可以看出,当对图信息进行更新操作时,除了对图信息本身立即作更新以外,相应的图信息变化事件会立即产生,并且调用对应的事件处理方法。

3.2 受影响构件的分析

下面以Transfer构件为例,来具体分析一下当Transfer构件被删除时,OrbGOP是如何分析其依赖关系的变化,并且是如何处理这种变化的。从图2可以看出当Transfer构件不再被ATM调用时,它的一条入边被删除,以下代码表示了图信息的更新:

TransferNode.deleteInEdge ( “ATM”,“Transfer” ) ;

Transfer构件被删除一条入边时,TransferNode是AbstractNode的子类,所以图信息更新的事件被触发。根据多态的特性,TransferNode的eventOnDeleteInEdge方法会接着被调用来处理该事件,在eventOnDeleteInEdge方法中,可以按预定义的图信息更新策略来处理这个事件。由于图信息是构件之上的一个抽象,我们还可以把TransferNode中的事件继续向下传递给Transfer构件,在Transfer构件中再来进一步处理预定义策略以外的一些操作。图信息的更新策略都是基于上节所述的静态依赖关系描述的信息。

4 结 论

构件技术和基于构件的分布式程序设计是当今学术界和企业界广泛关注的热点,而清楚地描述构件系统中各个构件间的依赖关系是建立高效健壮的分布式应用的基础。

本文所提出的基于图形的构件间依赖关系的描述方法可以较清晰地描述基于OrbGOP模型的应用系统的依赖关系。同时,对于基于构件的分布式程序设计的依赖关系描述也是一种探索与尝试。

参考文献

[1]Heineman George T,Councill Bill T.Component-Based SoftwareEngi-neering:Putting the Pieces Together[M].Massachusetts:Addison-Wesley,Reading,2001.

[2] Fabio Kon,Roy H,Campbell.Supporting Automatic Configuration of Component-Based Distributed Systems[C].the Proceedings of the 5th USENIX Conference on Object-Oriented Technologies and Systems,San Diego,California,USA.May 3-7,1999.

[3] Fabio Kon,Campbell,Roy H.Dependence management in component-based distributed systems[C].the Concurrency,IEEE,Jan-Mar 2000,8(1):26-36.

[4]CAO Min,Gengfeng WU.Dynamic Architecture Description of COR-BA-based Distributed Applications[C].The2004International Confer-ence on Computer and Information Technology(CIT2004),Wuhan,Sep.2004:444-449.

[5]Cao Jiannong,Cao Min,Chan Alvin S T,Wu Gengfeng,Sajal S K K.Das A framework for architecting and high-level programming support of CORBAapplications[J].Journal of Parallel and Distributed Compu-ting,2004,64(6):725-739.

面向构件的软件开发 第8篇

1 模型检验在变异测试中的应用

1.1 模型检验

模型检验[1]技术中用状态迁移系统(S)表示系统的行为,用模态/时序逻辑公式(F)描述系统的性质,这样“系统是否具有所期望的性质”就转化为数学问题“状态迁移系统S是否是公式F的一个模型”,用公式表示为“S|=F”。当系统不满足所要求的性质时,模型检验工具就会依据检验算法自动生成一个反例(一条执行路径)来说明系统不满足性质的原因所在。模型检验的流程如图1所示。

1.2 基于模型检验的变异测试方法

由于模型检验工具以有限状态机所描述的系统和时序逻辑公式所描述的系统性质作为输入,因此,基于模型检验的变异测试方法通常包括对有限状态机迁移描述进行改变和对施加于系统模型的时序逻辑约束进行改变两种变异算子[2]。

首先,对有限状态机迁移描述进行改变与程序变异的思想类似,对系统模型的变异可能会引入一些错误的行为。如果这个错误行为与原有规约所定义的行为不一致,那么可以通过使用模型检验器验证模型的变异体和规约来发现这一错误,并生成一个反例路径。该反例分析了一个错误行为的执行过程,因此正确的被测系统在执行该反例时应该表现出不同的系统行为,这样的轨迹被称为否定性测试用例[2](negative test-case)

其次,通过对施加于系统模型的时序逻辑约束进行改变就可以迫使原始系统模型不能实现相应的行为,并且生成反例路径。将描述系统性质的规约表达式的变异体和原始系统模型输入模型检验工具进行验证,通过这种方法所生成的反例路径(测试用例)就分析了一个正确系统应该表现出来的行为。当在实际被测系统上执行所生成的测试用例的时候,系统希望能够表现出与轨迹所描述的一样的行为,因此这种测试用例被称为肯定性测试用例[2](positive test-case)。图2即为该方法的流程图。

由于等价变异体与原系统具有相同的性质,因此模型检验工具就不会产生反例,从而可以自动的区分等价变异体,提高变异测试的效率,也使得测试用例可以自动生成。

2 基于模型检验的接口变异测

2.1 构件之间接口的交互关系

对于构件在集成时的接口测试而言,如果要正确的建立由被测构件所组成的系统的模型,就必须对系统中构件之间接口的交互关系进行正确的描述,从而合理的构造构件之间接口的交互关系模型。文献[3]和文献[4]在通过对构件之间的交互关系进行分析后,认为在对构件化软件进行测试时,应该考虑如下三个与交互特性相关的主要因素:1)接口,它对构件所提供服务的一个或者多个方法函数进行了封装,描述了在特定环境中,构件应该具备的功能以及应该产生的相应的行为;对于接口的使用者来说,接口内部的具体细节通常都被隐藏了起来;2)事件,对一个接口的调用产生一个接口事件,同时,事件通常还会包括异常处理事件和用户行为事件;3)依赖关系,文献[4]中提出了数据依赖和控制依赖两种依赖关系,但是由于本文所研究的是在源代码未知情况下构件集成时的接口测试,因此本文主要考虑的是接口函数之间在调用时的控制依赖关系。如果接口I1和I2之间存在控制依赖关系,那么存在一条执行路径当触发I1的时候将直接或间地接触发I2;另外控制依赖还存在于事件和事件、接口和事件的关系中。

对于构件化软件系统的结构,我们可以将其抽象的用框图集合的形式进行描述,该集合包含了表示构件系统中实体的框图以及框图之间的连接,而这种连接代表了系统中实体之间的交互关系[5]。构件的使用者(包括构件的测试人员)可以根据构件开发人员所提供的构件接口规约说明和文档信息得出与构件接口交互相关的信息,以此对构件系统,特别是构件中接口函数的交互关系进行分析,通过分析并构造构件系统中被测试构件的接口交互图来体现构件之间接口的交互关系。对于本文的研究而言,构件的接口交互图可以用G=(V,E)来表示,其中V表示系统中的构件节点E表示构件节点之间交互的边的集合。在这里以描述三角形问题[6]的构件为例进行相关说明,该构件包括三个接口函数,具体如表1所示。

为了对三角形问题构件进行接口测试,需要通过上述信息为被测试构件提供一个能够正常工作的外部系统环境,实际上这个外部环境是通过一个测试驱动程序对三角形问题构件的接口函数进行调用,我们将这个测试驱动程序视为一个构件,并将其称之为测试驱动构件。图3给出了三角形问题构件的接口交互图。其中,C1代表三角形问题构件,C2代表测试驱动构件。

2.2 接口变异算子

本文是针对在构件源码信息未知情况下对构件的接口进行测试,因此,对于文献[7]提出的作用于被调用函数内部的变异算子和作用于调用函数内部的变异算子两种变异算子而言,只有后者适合于本文后续的研究工作。在分析了“作用于调用函数中的接口变异算子”和文献[8]提出的面向IDL描述语言的接口变异算子后,本文根据Java语言的基本特性和JavaBean构件在集成时的特点,在表2中给出了所选择的适用于JavaBean构件在集成时的接口变异算子。

2.3 测试用例生成框架

图4所示为基于模型检验技术的接口变异测试方法的基本框架,该方法以Java PathFinder作为模型检验工具。

2.3.1“建模与变异”阶段

首先需要通过被测试构件的接口交互图来建立被测试构件在集成时的接口调用关系模型,建立模型的过程就是利用构件的接口交互图来开发被测试构件的测试驱动程序的过程。运用模型检验技术对构件的接口进行测试,一方面除了要通过接口规约说明保证所建立的构件系统模型能够正常运行以外,另一方面,也是更为重要的一个方面就是所建立的模型能够在验证过成中对被测试构件中所有的接口函数进行全面的、任意的测试。

基于上述两个方面的考虑,在建立被测试构件的接口调用关系模型的时候,首先需要依据被测试构件的接口规约说明对具有控制依赖关系的接口函数确定它们之间的控制依赖关系。其次,通过JPF提供的非确定性选择机制[9],利用“switch-case”语句对被测试构件中的接口函数进行建模,这样,当被验证的系统模型在模型检验工具JPF中进行验证的时候,JPF在提供了对系统模型进行反复执行的同时,也实现了对系统模型进行穷尽的搜索。通过上述方法建立接口调用关系模型之后,就可以利用接口变异算子对该模型中的接口函数进行变异,生成原始系统模型的变异体。

2.3.2“搜索与检验”阶段

在第一阶段中,分别得到了原始的被测试构件在集成时的接口调用关系模型及其变异体模型,此时,就需要将两个模型作为模型检验工具JPF的输入进行验证。为了能够生成测试用例,就需要通过“assert”断言违背机制对两个模型的状态进行比较和判断,并以此作为模型检验工具JPF在验证过程中判断的入口,从而达到触发错误产生的目的,实现反例路径的生成。

如果在验证过中模型检验工具JPF没有检查出原始系统模型和变异体模型中性质违背的地方,则说明这一个变异体模型是一个无效的变异体,该变异体模型等价于原有模型。反之,如果模型检验工具检查出错误,则说明这一个变异体模型是一个有效的变异体,同时模型检验工具会给出一条导致发生这个错误的执行路径,这条路径包含了导致发生这个错误的接口调用信息,并且该路径是一个可以将所生成的变异体“杀死”的路径,实际上这也就是期望得到的能够满足变异测试覆盖准则的一个测试用例。

3 实例分析

为了进一步分析输出结果,本节以三角形构件的接口函数TriType(int a,int b,int c)为例加以说明。在正确情况下,该构件接口函数可以对输入的任意三边进行判断并给出判断结果(一般三角形、等腰三角形和等边三角形)。假设在构件开发中随机为该接口函数注入一个错误,使其在判断输入能否构成一个等腰三角形时只能够判断a等于b和b等于c的情况,而当a等于c的情况发生时,该接口函数并不能够判断出输入参数可以构成一个等腰三角形。建立模型后,利用接口变异算子ArgLocChg对模型进行变异,产生的变异体如表3所示。

由于在调用接口函数TriType后可以改变三角形构件的状态属性,因此,通过断言违背机制对原有三角形构件模型和变异后的三个三角形构件模型分别进行比较,这样就会触发产生错误。第三个变异体是对输入参数a和c互换位置,使函数输入的参数由(a,b,c)变换为(c,b,a)。事实上,在已知导致构件错误存在原因的情况下进行分析可以知道,这个变异体是一个等价变异体,当a等于c的情况发生时,这个变异体并不能够发现该接口函数中所隐藏的错误。

在实际应用中,特别是对于在源码未知情况下的构件接口变异测试而言,如果要判断出上述等价变异体,就必须以人工的方式穷尽地搜索整个输入空间构造相应的测试用例并进行执行对比以后才能够做出相应的结论,而这个过程却是一个相当复杂繁琐的过程。但是,对于模型检验而言,模型检验工具JPF通过自动的搜索整个状态空间来检验原有模型和变异体模型,由于原有模型与变异体模型的行为是一致的,因此在整个搜索过程中不会产生任何错误,因此会在验证结束的时候给出“no errors detected”的验证结果。这样,就能够有效的判断等价变异体,减少测试的成本。

第二个变异体是对输入参数b和c互换位置,使函数输入的参数由(a,b,c)变换为(a,c,b)。该变异体是一个非等价变异体,其模型与原有模型的行为并不一致,因此模型检验工具JPF在搜索状态空间时会在发现状态不一致的时候停止搜索并给出导致该不一致状态的完整的反例路径。

该接口变异算子所产生的上述有效变异体为原有模型引入了一些不一致的行为,模型检验工具JPF将给出了导致发生这个不一致行为的输入参数(1,2,1),而反例路径则描述了导致这个错误的整个过程,如果将测试用例t(1,2,1)输入原系统执行后,由于系统本身存在该错误,因此系统在执行时将表现出与反例路径相同的输出结果。这也就是我们需要的一个完整的测试用例。

4 结束语

本章在深入讨论了基于模型检验的变异测试方法后,通过分析构件接口函数的交互关系,以构件的接口交互图为基础对被测试构件进行系统建模,并在此基础之上提出了基于模型检验的接口变异测试方法的测试用例生成框架。

本章最后以三角形问题的JavaBean构件为例,通过分析其接口函数的交互关系建立了被测试构件系统的接口交互模型并对其进行变异,随后利用程序模型检验工具Java PathFinder对变异前后的模型进行验证并生成测试用例,通过实验表明该方法能够在很好的处理等价变异体判定问题的同时自动的生成测试用例。但是,由于模型检验中固有的“状态空间”爆炸的问题[1]使得JPF在验证过程中效率较低,如何通过对系统模型的状态空间进行压缩也是下一步研究的重点。

参考文献

[1]林惠民,张文辉.模型检测:理论、方法与应用[J].电子学报,2002,30(12A):1907-1912.

[2]Fraser G,Wotawa F.Using Model-Checkers for Mutation-Based Test-Case Generation,Coverage Analysis and Specification Analysis[C].ICSEA,2006:16.

[3]WU Y,PAN D,CHEN M-H.Techniques for Testing Component-Based Software[A].7th IEEE International Conference on Engineering of Complex Computer Systems[C].2001:222-232.

[4]曹严元,张为群.一种基于CBD的软件测试方法[J].计算机科学,2005,32(2):156-158.

[5]胡军.构件化嵌入式软件设计的分析与验证[D].南京:南京大学,2005.

[6]Paul C.Jorgensen.软件测试[M].韩柯,杜旭涛,译.2版.北京:机械工业出版社,2003.

[7]Delamaro M E,Maidonado J C,Mathur A P.Interface mutation:An approach for integration testing[J].IEEE Trans.on Software Engineer-ing,2001,27(3):228-247.

[8]杨建军,陈卫东,叶澄清,等.面向组件的接口变异测试方法[J].浙江大学学报:工学版,2003,37(2):129-133.

面向构件的软件开发 第9篇

针对上述情况,本文提出了一种基于扩展的MVVM模式的面向服务软构件模型[2]。在SaaS系统的Web前端增加了一个用以容纳SOC(ServiceOriented Computing)的业务逻辑处理模块的软构件平台,并设计了相应的构件动态挂接的接口,同时支持用户将有效的业务逻辑处理构件作为一种服务构件发布至云平台中,以供平台中的其他用户使用。因此该模型一方面有效增加了SaaS系统前端业务处理模块的可扩展性,同时也增加了个性化业务数据分析处理构件的可复用性。

1相关研究

在以往的分布式计算环境中有很多学者对软构件的机制和操作进行了深入的研究。

常志明[3]等从软件体系结构的角度上提出了一种多Agent系统中软构件的动态绑定机制。设计了通用的多Agent系统模型,并建立了Caste与Agent之间的动态绑定机制,并对建立在其上操作的形式化语义给出了完整的描述。但是并没有对资源的调度问题进行详细讨论。而云计算环境中将一切服务(资源服务、计算服务等)都进行了量化,因而无法直接将该模型应用至云环境。本文作者在文献1中对标准MVVM模式进行扩展(如图1),在Web端增加商业逻辑处理模块,并在此模块中部署SOC(Service-Oriented Computing)[4]环境,设计一个针对SaaS系统的SOC模型,用以支撑对资源服务质量评估的业务逻辑处理[2]。但是没有对Web前端的软构件动态加载平台进行详细地描述。

2 设计思想及模型描述

本文所描述的模型主要解决两个问题,一个是构建Web前端的软构件平台,以支持个性化数据分析处理业务构件的动态加载,并完成SOC任务;另一个是如何将行之有效的数据分析处理软构件发布至云平台中,以备其他用户使用。

2.1 模型逻辑架构

扩展MVVM模式下的软构件模型逻辑架构主要分为两部分(如图2所示)。

(1) 服务器端:主要包括资源中心、核心代理模块、服务发布模块以及软构件列表;

(2) Web前端:包括软构件平台、服务执行模块、运行时环境模块(虚拟机)、用户接口以及本地数据缓存。

2.2 面向服务软构件模型基本思想

在云平台的服务器端建立核心代理模块(如图2),通过该模块对整个SaaS系统的各类服务及资源进行统一的管理和调度,主要描述对动态加载的针对业务的软构件的管理以及对平台底层数据资源的调度。在Web前端的Model层设计了软构件平台,针对不同地理区块的数据特点,支持行业专家设计个性化的数据分析处理方法构件,通过虚拟机将此构件动态地挂接至软构件平台,并将数据分析处理任务对应的数据缓存至本地,采用新构件执行数据分析处理任务,最后将结果发送至Server端,并将有效的构件通过Server端的软构件代理发布至软构件列表。

2.3 软构件动态加载方案

基于扩展MVVM模式的面向服务软构件模型在实现利用动态加载软构件进行海量数据分析处理大体需要六个步骤,如图3所示。

(1) 行业专家依据Web前端软构件动态加载接口的定义,创建针对不同地理区块的个性化数据分析处理方法;

(2) 从Server端获取编译所依赖的运行时环境(虚拟机),并调用编译模块将业务方法动态生成个性化业务处理构件;

(3) 利用反射机制将新构件动态挂接至本地软构件平台,以备做数据分析处理时调用;

(4) 通过SaaS系统Server端核心代理的资源服务代理取得具体的数据分析处理任务,并将任务对应的数据缓存至本地;

(5) 执行数据分析处理任务,采用新加载的数据分析处理构件对本地缓存的相应数据资源完成SOC任务;

(6) 将任务对应的数据分析处理结果上传至Server,并将该软构件通过Server端的数据分析处理软构件Agent发布至Server端的Soft-Component列表以供其他用户使用。

3 核心Agent及软构件平台设计

3.1 核心Agent设计

Resources Service Agent(资源服务代理):资源服务是云计算的核心服务之一,而资源服务代理是对SaaS资源服务调度的核心。 其功能是根据数据分析处理任务要求将任务分成各个子任务,并为每个子任务配置相应的数据资源,然后依据任务将资源调度至相应的网络节点的缓存中。当节点完成处理任务后,再将数据分析处理结果保存至云存储中。

Data Analysis & Processing Soft-Component Agent(数据分析处理软构件代理):负责对SaaS系统发布的所有数据分析处理构件进行统一的管理,响应从网络节点发送过来的构件服务请求,并负责对构件进行相应的调度。

3.2 软构件动态加载接口设计

实现软构件动态加载的基础是定义构件加载的接口,利用反射机制将编译后的构件加载至平台。图4描述了经简化抽象后的软构件平台的UML类关系示意图。数据分析处理方法动态加载接口中定义了 “方法对应参数”、“数据源”、“结果范围”和“处理类型”四个输入参数,返回的结果存放在结果集ResultsStruct中。新的构件通过动态编译加载至软构件平台,在Web前端采用新构件执行数据分析处理时,通过构件反射类的实例利用反射机制将新构件模块动态加载,参与到SOC任务中。

3.3动态构件加载及数据分析处理任务调度核心算法

输入:数据分析处理任务列表List T;处理方法构件实例pm;软构件列表List scl;

输出:Ti采用动态加载的处理方法构件在SaaS系统进行处理分析后所得到的结果。

具体算法流程参见图5。

4 结论

本文提出的基于扩展MVVM模式的软构件模型已经在实际SaaS系统中得到应用,利用反射机制动态加载个性化数据分析处理方法的软构件平台满足了用户的要求,有效地提高了SaaS系统Web前端功能的可扩展性;通过Sever端的软构件Agent提高了软构件的可复用性。但是云计算环境中在Web前端将业务构件动态接入SaaS系统是当前处于探索阶段的研究课题。在实际应用中发现还存在一些尚未解决的问题,如SOC业务组件接口与资源服务接口之间的动态协调调度一致性问题;对于已发布的SOC业务构件的有效性进行合理评估的问题等,这些都是我们下一步将要研究的内容。

摘要:在面向石油行业的SaaS系统上进行海量数据分析处理时,需要针对不同的地区地理信息特点动态地采用相应的数据分析处理方法。设计了一种基于扩展MVVM模式的面向服务软构件模型,该模型在Web前端增加容纳SOC(Service-Orien-ted Computing)的业务逻辑处理模块的软构件平台,并允许用户动态添加个性化业务逻辑处理模块,以便支撑对石油行业数据的各种不同业务数据逻辑处理需求。该模型使得用户在以Web的方式享受云服务的同时,可以动态在SaaS系统上添加符合预定义接口标准的个性化处理模块。实验证明,该模型可以有效地提高SaaS系统的Web前端可扩展性,同时提高了数据分析处理的质量。

关键词:软构件模型,扩展MVVM模式,海量数据处理

参考文献

[1]陈明,李猛坤,张强.一种基于扩展MVVM模式的SaaS面向服务计算模型.微电子学与计算机,2010;27(8):27—30

[2] Hand E.Head in the clouds.Nature,2007;Oct(449):963

[3]常志明,毛新军,王戟,等.多Agent系统中软构件的动态绑定机制及其操作语义.计算机研究与发展,2007;44(5):806—814

基于构件的开发 第10篇

2010年6月, 我作为某市电子政务管理中心的一名工程师, 组织软件公司和网络公司开发我市的OA系统, 在本系统的开发中, 我负责完成整个系统的设计和项目管理的工作。在OA系统开发中, 我们使用了基于构件的开发技术。大量复用构件是有效地使用基于构件的开发技术的前提, 获取构件的途径有很多种:

(1) 在现有构件库中提取符合要求的构件, 直接使用或做适当修改。

(2) 从市场上购买现成的商业构件。

(3) 开发新的符合要求的构件。

1 在现有构件库中提取符合要求的构件, 直接使用或做适当修改

由于开发我市OA系统的软件公司对Microsoft的.net比较熟悉, 对.net下的开发语言也比较熟悉, 且熟悉com构件技术, 所以用C++.net编写了一些常用的构件, 经过测试后, 写成DLL文件, 同时注册成COM构件, 存于服务器中, 形成构件库, 供各构件调用。COM构件既可以被插入动态web页面中, 也可以在网络或单机环境的.net中使用。构件有若干个对外接口, 可以根据不同的需求, 选择不同的接口。构件之间是彼此独立的, 当需求发生变化时, 可能只需要更改个别COM构件, 但不会影响到其它构件的继续使用。同一构件可以在不同的应用环境中重复使用。

在该系统的开发中, 我们主要获取了如下一些构件库中的COM构件:

(1) 身份认证构件USECHECK.DLL, 它主要完成两个功能:一是身份认证, 主要提供用户登录时验明身份, 保证系统的安全性。二是根据用户的输入的用户名确定该用户的类别, 如它是普通用户还是系统管理员。因此, 该构件具有两个接口, 一个接口连接普通用户平台, 另一个接口连接系统管理员平台。

(2) 查询构件QUERY.DLL, 它完成的功能是查询相关信息。该构件具有两个接口, 一个是连接所查询的页面, 另一个是连接无此信息的页面。

(3) 连接数据库构件CONECTOR.DLL, 它完成一个功能就是连接所需的数据库。该构件有一个接口, 就是连接后台数据库。

此外, 还获取了错误处理构件ERROR.DLL;删除构件DELETE.DLL;添加构件ADD.DLL;修改构件UPDATE.DLL;异常管理ABNORMALl.DLL等构件, 由于篇幅有限, 这里就不再一一详细介绍了。

2 从市场上购买现成的商业构件

在OA系统中, 需要使用图书光盘点播和视频点播功能, 然而这些功能的构件在我们的构件库中没有, 如果让开发人员去编写, 我们初步的算了一下, 所花费的成本, 大于购买的成本, 况且开发还需要浪费时间, 所以我决定到市场上购买现成的商业构件。由于在开发OA系统中我们使用的构件都是COM构件, 为了让构件之间可以很容易的组装, 我们在购买视频点播构件时, 也考虑了购买COM标准的构件, 并把新买来的商业构件装入构件库中。

3 开发新的符合要求的构件

造成重复开发;还有就是对构件不理解, 无法很好的使用构件库里的构件。这些问题的产生都是程序员对在OA系统的开发过程中, 我们发现了一些新开发的控件可能以后经常会用到, 如:数据批量上传控件、日志控件、短讯控件、数据维护控件、支持翻页的数据绑定控件等等。我们把这些控件经过测试后, 写成DLL文件, 同时注册成COM构件, 存入构件库中, 供各构件调用。

当多个构件获取后就要将这些构件进行组装, 在构件组装过程中, 我们采用了基于功能的组装技术和面向对象的组装技术相结合。根据系统需求, 把构件库中提取的符合要求的构件、从市场上购买的现成的商业构件和当前开发系统中的软件元素相连接, 最终组装成新的目标软件。

在开发过程中我们也遇到了一些问题, 主要是有些程序员不知道构件库里已有某个构件, 现有构件不够了解造成的, 今后应该不定期的进行已有构件知识培训, 加强程序员对已有构件的熟悉程度。并且应该开发一个构件管理系统, 对已有构件进行描述、分类与组织。

在该项目的开发中, 采用了基于构件的开发技术。比起采用传统的开发技术, 开发周期明显的缩短了, 大大降低了开发成本, 提高了软件质量。目前, 该系统已经上线并顺利运行了两年多, 达到了开发的目标, 得到了市领导的一致好评!

参考文献

[1]杨芙清.软件复用及相关技术[J].计算机科学, 1999, 26 (5) .

[2]陈菲, 刘克勤.计算机软件复用技术研究[J].现代电力, 2002, 19 (6) .

[3]武悦, 廖哓莘.网络远程教学的XML实现[J].计算机与现代化, 2002, (4) :40-41.

[4]朱俊波, 史素娟.浅议软件开发中的复用技术[J].福建电脑, 2008, (02) .

[5]杨敬君.基于构件的软件复用技术研究与应用实践[D].大连海事大学, 2009.

[6]仉新刚.浅谈软件复用的理论与技术[J].科技信息 (学术研究) , 2008, (13) .

[7]张友生.系统分析师教程[M].北京:清华大学出版社, 2010, 2.

[8]余雪丽, 须毓孝, 李林峰等.软件体系结构及实例分析[M].北京:科学出版社, 2004, 8.

上一篇:结构化软件开发方法下一篇:医院中药材原料的管理