已阅读5页,还剩54页未读, 继续免费阅读
(计算机应用技术专业论文)com构件测试的研究和实现.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
论文摘要 随着计算机软件的发展,软件提供了强大的功能,但软件的复杂度成指数增长。 现代软件开发,要求庞大的团队分工协作,软件开发的错误更复杂、更难纠错。因此 软件测试逐渐受到重视,并从软件开发小组分离,成立专门的软件测试队伍。软件测 试理论逐渐成熟,历经模块化软件测试、面向对象软件测试两个阶段。随着软构件的 开发,成为软件工程发展的趋势。软构件测试理论是目前软件测试理论发展的新领域。 构件具有严格的封装性、二进制级代码复用的特点,使得基于构件的软件开发更 具优势,但也带来了分析、设计、实现、测试和维护的一系列问题。目前还没有软件 构件测试的专用工具,软构件测试基本是沿用过程模块测试工具和面向对象方法的测 试工具。 探针模型较好地解决了构件测试的交互问题。它的原理是;测试时,在构件的源 代码内插装探针,以解决外界与构件的数据交换困难和客户程序无法访问构件封装的 属性和方法的矛盾。 本论文从软构件测试出发,建立构件动态交互模型,并应用传统的软件测试技术 测试构件,把探针技术和传统软件测试技术有效地结合起来。根据探针模型在 j a v a b e a n 的实现原理,实现了基于探针模型的c o m 构件测试技术。 针对现有探针模型的缺点,本文提出相应的改进措施:设计触发器解决探针与构 件的递归调用问题;编写标准化的探针以提高探针的复用;简化探针的数据类型;增 加消息发送器帮助测试者动态观察测试结果;编写格式输入数据简化编、解码等。 关键词:构件软件测试探针模型插装技沭 a b s t r a c t f o l l o w i n gd e v e l o p m e n to fc o m p u t e rs o f t w a r e ,w h i c hp r o v i d e sg r e a f a c i l i t y , b u t c o m p l e x i t yi n c r e a s ee x p o n e n t i a l ly m o d e md e v e l o p m e n to fs o f t w a r er e q u i r e sg r e a tg r o u p s t oc o o p e r a t ee a c ho t h e r p r o b l e mb e c o m em o r ec o m p l e xa n d d i f f i c u l t yt oc o r r e c t s ow i t h s o f t w a r et e s t i n gb e i n ga t t a c h e dm o r e i m p o r t a n tg r a d u a l l y , a n dd e v e l o p e df r o mc r e a t i n go f s o f t w a r e ,t h es p e c i a lg r o u pw o u l db ef o u n d e d t h r o u g ht h et w o p e r i o do f s o f t w a r e t e s t i n g , w h i c h j u s ta r et h et e s t i n go f m o d u l es o f t w a r e a n dt e s t i n go f o b j e c to r i e n t e ds o f t w a r e ,t h e s y s t e mi n f oo fs o f t w a r et e s t i n gb e c o m em o r ep e r f e c tg r a d u a l l y w i t hd e v e l o p m e n to f c o m p o n e n t sb e c o m i n gt h et r e n do fs o f t w a r ee n g i n e e r i n gd e v e l o p m e n t ,t h et h e o r yo f t e s t i n gs o f t w a r e j u s ti s 疗e s hf i e l do f s o f t w a r et e s t i n g c o m p o n e n tr e q u i r e s t r i c t e n c a p s u l a t i o na n dh a v eb i n a r yc o d er e u s i n gp e c u l i a r i t y , w h i c hm a k et h es o f t w a r ed e v e l o p m e r i to fb a s e dc o m p o n e n t sm o r ea d v a n t a g e ,b u tb r i n ga s e r i e so ft r o u b l ei n c l u d i n ga n a l y z i n g 、d e s i g n i n g 、i m p l e m e n ta n dm a i n t e n a n c ea n ds oo n n o w , t h e r e i sn os p e c i a li n s t r u m e n tt ot e s tc o m p o n e n t ,t h ei n s t r u m e n to fm o d u l es o f t w a r e t e s t i n g a n d o b j e c to r i e n t e dt e s t i n gc o n t i n u et ob eu s e do ns o f t w a r ec o m p o n e n tt e s t i n g t h em o d e l o f p r o b ec o u l ds o l v eb e t t e rt h et r o u b l eo f i n t e r a c t i o n t h et h e o r ys h o wt h a t d u r i n gt h et e s t i n g ,t h ep r o b ew i l lb ei n s e r t e di nc o m p o n e n tp r o g r a m ,i no r d e rt os o l v et h e d i f f i c u l t yd a t ai n t e r a c t i o na n d n o w a y t oa c c e s st h ea t t r i b u t ea n dm e t h o d o f c o m p o n e n t a c c o r d i n gt oc o m p o n e n tt e s t i n g ,t h ep a p e rs t u d yo nh o wt o b u i l dt h em o d e lo f d y n a m i c i n t e r a c t i o nw i t hc o m p o n e n t ,h o wt ou s et h et r a d i t i o n a lt e c h n i q u eo nc o m p o n e n t t e s t i n g a n dh o w t oc o m b i n et h et r a d i t i o n a lt e c h n i q u e 、 ,i mt h ep r o b em o d e le f f e c t u a l l y a c c o r d i n g a st h et h e o r yo f p r o b em o d e lb a s e do nj a v a b e e n ,t h ep a p e ra c h i e v et h ec o m c o m p o n e n tt e s t i n g b a s e d p r o b em o d e l a i ma tt h es h o r t c o m i n go fe x i s t e n c ep r o b em o d e l ,o nw h i c ht h ep a p e rp r e s e n tt h e i m p r o v e m e n t t h a t a d d i n gt r i g g e r t os o l v er e c u r s i o no fc a l l i n gb e t w e e n p r o b e a n d c o m p o n e n t ;c o d i n g t h es t a n d a r dp r o b et oi m p r o v ep r o b er e u s i n g ;s i m p l i f y i n gt h ed a t at y p e o f p r o b e ;a d d i n gm e s s a g es e n d e r t oh e l pc o n n e rt ow a t c hd y n a m i co u t c o m eo fc o m p o n e n t t e s t i n g ;c o d e t h ef o r m a td a t at os i m p l i f yc o d i n ga n dd e c o d i n g k e y :c o m c o m p o n e n t ;s o f t w a r et e s t i n g ;p r o b em o d e l ; c o d ei n s t r u m e n t a t i o n 第一章引言 近年来,国内外软件开发单位都意识到软件测试的重要性,并且现阶段构 件开发技术的发展,迫切需要一套有效的软构件测试技术和工具。特别在缺乏构 件测试工具的状况下,如何利用传统的软件测试工具和面向对象的软件测试工 具,来发展构件测试的有效方法,是构件测试的研究重点。本论文正是针对这一 命题展开的。 1 1 构件测试的重要性 软件测试是使用为发现错误所选择的输入和状态的组合而执行代码的过程 【“。软件测试是以查找错误为目的的,而不是证明程序的正确性。因此软件狈4 试 的策略是尽可能地发现错误并纠正之。但软件产品是逻辑产品,其无形可观给测 试带来了困难。同时软件的错误种类繁多、错综复杂。想要通过测试来保证软件 产品的无错误是不可能的。但要提高软件产品的质量必须重视和加强软件测试。 据统计。国外软件开发机构4 0 的工作量是花在软件测试上,软件开发费用的近 1 2 用于软件测试儿】【2 9 】。对于一些要求高可靠、高安全的软件,如飞行控制或核 反应监控等软件,测试费用可能相当于软件工程所有其他步骤费用总和的3 = 5 倍【1 2 1 。 软件产品应用的范围广或其在整个生产蓉统的重凝性的特点,不允许出现故 障,微小的软件故障都可能造成不可能量的代价。但软件开发鼹不可避免错误的, 朗往优秀豹软传人员绽写兹软传,憋溅在其中鑫萼错误毽是不可忽褪的。因此鳃决 这一矛盾的唯一途径怒进行软件测试,尽管软件测试不是软件质量的保证,但软 孛溺试是疆蹇较俘产菇霞耋约壤靠鹣零段。据绕诗,没骞溺试静软终瓣错误率院 测试过的软件的错误率高出几倍,甚至几十倍 现代软件开发缀麸结槁纯方法、转向西囱对象和较梅释的开发方法。软件 产品的规模越来越大,代码从几百行发展到几十万行,甚至百万行以上。如此庞 大复杂的软件,即使以每千行1 6 个错误计算f 捌。其故障规模也是相洒巨大的。 嚣越较箨测试鼹重要性在理代鹱霉 舞发孛更突如。 现代软件汗发是以庞大的团队为基础的,备技术人员相互分工协作。这也是 较斧翳出错懿稼霞。不胃怒象,没毫潮试夔较隼孛箍岛繁场熬磊莱是魏懿。众多嚣 因决定软件测试是软件开发不可缺少的环节,特别现代方法的软件开发。 构件测试除了具有上述的软件测试的重要性外,还有其独特的必要性。首先 构件是以代码复用为目标的,代码的复用率越高,则代码效益越高。因此许多开 发商专门供应构件,以支持下一级开发商。如此,构件的故障,传播的范围更广 泛,影响程度更深。这就要求构件测试更充分,以保证构件功能正确运行。 其二,构件是二进制代码的复用。传统软件的源代码的复用不同,构件是二 进制代码复用。构件的使用者未必了解构件的源代码,而构件供应商般仅提供 构件的说明。构件使用者对构件的功能的理解与构件开发者有歧义的。因此构件 使用者也要就他们感兴趣的功能,对构件迸彳亍测试。 构件技术不是具体的语言,而是软件开发的规范。构件是跨平台、跨系统的, 不同语言和系统的具体环境,也会造成构件的理解的歧义。不管是开发还是使用 构件,对构件关联的测试不但是必要,而且是非常重要。因为构件关联的故障不 是局部发作,而是全局性的,往往会造成构件的失败。 1 2 构件测试的研究方向 t 、针对不同领域的构件开发技术开展的构件测试技术研究与开发吼i n t e m e t 技术、j a v a 语意、叁动生成软馋等熬软传测试技术戆骚突。擐据各自琢壤瓣特性, 研究软件测试的方法及策略。构件技术已经渗透到计算机的各应用领域,不同的 应惩领域,梅佟矮有不同的特患。 2 、构件测试方法的研究。以方法研究为起点,选取适当的软件测试和技术 应用予实证研究,铁实诞研究中敬进软件溅试技术,箍池新的技术研究麓题,并 为工具开发提供有用信息;在测试技术翻方法上应发展秘完善构件测试的理论基 础,改进构件测试方法【2 】。 3 、测试自动纯技拳瓣研究【2 】。露跌提寒测试各玲段王终戆囊动纯糗凄,减 轻繁重的人工测试负担为目的开展的测试技术研究。如测试用例自动生成技术、 鬻翅测试靛鑫动执行技术。 4 、测试工具与测试环境的研究2 1 。如测试计划工具、测试设计工具、测试 管理工具等。 本文主要以探针模型为基础,把探针模型和传统的软件测试结合起来完成构 件测试。 1 3 构件测试的现状 软件开发已从结构化开发、面向对象方法发展到构件技术。尽管软件测试 也在发展,但软件测试的发展是相对滞后的。基本上,软构件测试的理论和工具 沿袭结构化软件测试的理论和工具,虽然也做了一定的修改,但并不完全适合面 向对象和软构件技术的需要。目前的软件测试理论,对面向对象、特别构件技术 的封装性和继承性等特性的潜在错误,认识不完全。 构件测试并未有成熟的工具,基本是沿用传统的软件测试工具。因此,有 必要介绍软件测试工具。 现阶段可使用的测试工具大体可分为如下几类:1 、单元测试工具,单元 测试工具主要需完成的任务是:为每个单元开发驱动模块和桩,测试单个单元, 如结构化的模块、面向对象的类、软构件的构件。有代表性的是j u n k ;2 、功能 测试工具,部分工具可自动生成测试用例,以探针方式插入测试点,生成静态数 据流图和对象或构件的结构图及相互的关系图。捕捉和回放测试信息,检查数据, 有代表性的有:m i 公司的w i n r u n n e r 和r a t i o n a l 的s q ar o b o t ;3 、性能测试工具。 m i 公司的w i n l o a d 、c o m p u w a r e 的q a r u n 和r a t i o n a l 公司的s q ar o b o t ;4 、其它的 测试工具,例如数据库测试工具、w e b 澳l j 试工具等。 构件测试可把探针模型和构件有效地结合起来,然后可用上述测试工具。专 门的构件测试工具主要有:1 、m i c r o s o f t 系列的o l e c o mv i e w e r 、o l e c l i e n to l e s e r v e r n i 试系列、a c t i v e x c o n t r o lt e s t 等。这些工具都是黑盒测试工具。2 、j a v a b e a n 系列的工具【1 0 l 。s u n 公司开发的b e a n b o x ,即为一个面向构件开发者,支持构件功 能测试的工具,同时可以被作为基于构件的小型软件系统的可视化构造工具。专 门开发测试工具的e m p i r i x 公司,针对e j b 的广泛应用,也提供了能够支持e j b 性 能测试的专用工具b e a n t e s t 。s i l v e r m a r k 公司在推出的其测试系列工具t e s t m e n t o r 中,有支持j a v a b e a n 构件功能性测试的工具。构件测试工具还很不成熟, 主要用于构件的黑盒测试,自盒测试的工具几乎没有。因此构件白盒测试主要用 传统的软件测试工具。 爨戆较籀传溅试静方法圭簧畜1 2 j :l 、c e r t i f i c a t i o nc o m p o n e n t 。对掇俘基于 系统运行剖面的熙箱测试。确保构件完成应有的功能。w 限制构件的部分功能, 麓蓑包装攘毯,饶熹是梭嵇煞搜爝者蜀羧据擒终瓣珐藐谈甥蔷,象牙透露构 譬测 试不需源代码;2 、心ec o m p o n e r t tm e t a d a t aw a y 。由构件的开发者提供必要的测 试原数据,以方便构件的使用者在没有构件源代码的情况下也可对构件进行系统 级的测试。现阶段,构件开发没有统一标准要求开发者提供测试数据,因此该方 法仅在小范围内使用。3 、c t b ( c o m p o n e n tt e s tb e n c h ) 。由构件开发者给出个 测试规格,其中描述了构件的方法、接口和相应的测试集,用户可以在实际的系 统中使用该规格进行测试,该规格用x m l 描述。优点是:支持符号执行,无需运 行系统,缺点:运行速度慢。4 、u m l ( b a s e d t e s tm o d e lf o r c o m p o n e n ti n t e g r a t i o n t e s t i n g ) 。运用u m l 时序图和协作图得到系统中接口相互作用产生的错误,该方 法要求构件经过充分的单元测试。把构件看着黑箱。首先根据时序图得到正常的 和非正常的事件流,通过协作图得到并发事件的事件流。然后根据判断模式,构 造测试用例,使测试用例尽量充分。该方法有望实现测试自动化。5 、 c i t ( c o m p o n e n ti n t e r a c t i o nt e s t i n g ) 。该方法首先建立构件相互作用的形式化数 学模型,建立每个构件的形式化测试需求,然后根据测试需求生成单元测试用例, 进行单元测试,之后集成构件,进行集成测试。该方法考虑了集成的顺序,避免 重复测试。6 、b i t ( b u i l t i n - t e s t si nc o m p o n e n t s ) 。该方法在构件的源代码中增加 用于内建测试的成员函数,在维护模式下可以调用该函数,在正常情况下该函数 不会被激涯。7 、c i g ( t e s t i n gs o t t w a r ec o m p o n e n tu s i n gc o m p o n e n ti n t e r a c t i o n g r a p h ) 。用c i g 图来表示接口和事件的随接关系,把c i g 图作为输入,作深度 饶先算法,褥嚣辩瑟溱试籍经静鬃合。灏试充劳臻蘩俸毽捻每令接箱和潺掰事薛。 该方法和路径测试方法一样,随潜程序的复杂化,其测试用例集台呈指数膨胀。 8 、r e s t r o s p e c t o r s 。r e s t r o s p o c t o r s 记录构件豹执行历史,以便测试者可以利用这 燎测试信息。r e s t r o s p e c t o r s 测试有三种模式:设计模式、测试模戏狃运 亍摸式。 但没有强制构件歼发者掇供r e s t r o s p o c t o r s 测试储息的标准,构件开发者不一定 提供这项珐戆。9 、c b s f g ( c o m p o n e n t - s o f t w a r e f l o wg r a p h ) 。蘩走挺钛敬磐霉 嫩和源代码中得到的信息进行可视化处璁,生成流程图,然后利用结构化测试方 法霰试,主要嗣数据瀛耨控隶l 滚溅试。1 0 、t d s ( t e c h n o l o g i e s ,d e v e l o p m e n t f r a m e w o r ka n d q u a l i t y a s s u r a n c es c h e m e s ) 。确定构件的接口和和方法,覆盖不 必要的接口和方法,然盾按照充分性原则,创建测试用例集合。l l 、a n a p p r o a c h u s e p r o g r a ms l i c i n g c o n t r o l - d e p e n d e n c ea n a l y s i sa n d d a t a - f l o wt e s t i n g 。该方法由构 件开发者对构件进行充分测试,并提供概要信息,构件使用者通过概要信息进行 系统测试,而不需要源代码。概要信息可包括:程序分片、控制依赖分析和数据 流测试。 1 2 、s e q u e n c eg e n e r a t i o nt e c h n i q u e 。 先用数据流的方法对单个构件进 行充分性测试,然后采用渐增的办法,分析构件之间的依赖关系。该方法的优点 是考虑了构件的集成顺序,以减少重复测试。 目前国内在基于软构件的测试方面已做的工作主要有 2 1 :1 、北京航空航天 大学的刘超教授等提出了一种白盒测试工具的设计方怯,就是基于构件的思想。 2 、在软件测试工具的开发方面。3 、有暨南大学的c h e nh u o y a n 教授的基于代 码插装的类簇级测试工具。4 、有北京航空航天大学的c h e nx u e s o n g 教授等的构 造运行剖面和产生测试数据的计算机辅助工具。5 、北京航空航天大学的金茂忠 教授基于探针模型的j a v a b e a n 构件的测试技术【9 】【1 0 1 。但是对基于构件的软件测 试技术研究与测试工具开发方面的研究很少见到。 1 4 构件测试的特点 构件测试技术是从传统软件测试发展而来的。因此构件测试技术与传统软 件获l 试技术一样。可分为:萃露涌试、集成灏诚、系统测试和酗扫测试等。绝大 郝分的传统软件测试的方法均可应用于构件测试的相应阶段。德构件测试具有特 殊性的。 l 、擒 孚测试酌语蠢无关姓、跨平螽。搀仕楚与语京无关戆,一里擒终发鸯 后,复用它的客户端的代码语畜是不应该受限的。因此,构件测试时,成考虑语 言无关拣。暴量羯多秘潺言编霉溅试豹壤动模块,把稳髂萋予不蠲熟诿富环境中 测试。跨平台也是构件测试有别于其它软件测试的特点之一。跨平台的调用有许 多阔题。这是容荔产熏错误的方箍,密予个人辩不同平螽的环臻豹瑾解不嚣,蓠 此会产擞许多歧义。例如:当构 牛的接口函数的实现部分是从其它基类继承来鼠 还有开发者的部分代码时,这样跨平台测试,当返回错误结果时,无法确定,怒 继承关系错误还是开发鹃代玛镄误。 2 、构件的严格封装性。封装带来测试的障碍。与灏向对象和结构化软件的 瓣试不阂,接掰楚穆辞溺试懿蓠簧任务。毽为掬l 睾嚣全筠数撂爨不是诲藏接谤阑 的,构件内的数据访问一般用g e t 和s e t 方法。c o m 构件的接口对客户是可 觅酶,德由于接西的说鞠没有强希l 往要黎,困j 毙并非新有的接鞠都有详缩说鞠。 构件测试要求有一种途径能访问到所有的属性和方法,以便测试到所有的构件状 态。 3 、构件的二进制代码级的测试。构件二进制代码级的测试不同于结构化模 块和面向对象软件的测试。首先构件是可按测试的需要,将构件分块组合。测试 可在不同的平台和语言环境。而结构化软件和面向对象软件是无法将模块分割 的。若没有源代码,结构化软件和面向对象软件是无法通过开发驱动模块来进行 二进制级模块测试的。这给构件的二进制代码级测试带来方便。测试者可不需要 源代码,仅凭二进制代码就可进行软件测试。现在构件开发,虽然没有强制要求 给出测试构件的说明和接口,但逐渐形成共识:构件的发布,要把必要的、客户 可测试的接口留在构件体内,以便客户的功能测试。有的构件开发商还会发布构 件的测试包,以方便客户的测试。 4 、构件测试要求更严格。构件的目的是代码重用,这一目标决定了构件的 健壮性和稳定性要求比其它软件更高。这是通过细致的测试,减少程序的错误来 保证的。构件的问题影响广泛,代价巨大,受影响不仅有开发企业,还有以构件 为平台的二级开发或更多级的开发商甚至包括使用者,这要求构件的测试更充 分。 5 谦蘧研究内容与意义 本论文是豁馁统躺软律溅试技本强墓礁,砖c o m 搀 孛豹溅试摸鍪避雩于分毫跨 与研究,根据c o m 构件的特点及探针模澄的原理。提出在v i s u a lc 十+ 环境下的c o m 秘 孛测试鹩探钟模墼,怒传统煞软 串溺试技术帮深赞撬装技术络会怒采,并嚣橡 件的静态测试和动态测试的方法及策略进行阐述。主要内容如下: l 、c 0 m 擒俘豹基本原理稻运行税制、c o m 的特点秘优势、c o m 构件测试靛 困难以及c o m 构件测试与传统软件测试豹区别等。 2 、构件测试的现状、方法以及构件钡4 试的发展等。构件测试的分炎、软件测 试豹过程概要等。 3 、构件静态测试的策略选择、静态分析的内容、测试包设计的各方法的优缺 点跑较簿。确定深铮植入熹篷鬻豹纛剩等。 4 、构件动态测试,如何设计合理的探针模型,并如何把探针与测试构件有机 缝结合在一莛,把探针对构件功能和陡能的影响降至簸低。构件测试怒本文的鲞 点,并用一实例验证探针模型的可行性和效率。针对现有的探针模型提出改进的 方法。 探针模型是把传统的软件测试技术和构件开发相结合的关键技术。本文实现 了在v i s u a lc 抖c o m 构件测试的探针模型并对现有的探针模型作相应的改进, 提高探针模型测试的工作效率:降低探针模型对被测试构件功能和性能的影响; 简化探针的形式,以提高探针的复用率。本文对探针模型的改进作了有益的探索。 7 第二章c o m 构件 2 1c o m 构件概念 关于构件的定义历来没有统一的概念。构件是能独立的开发、获取、发布 的功能单元,能相互作用组成一个功能系统“l 。目前构件主要有三个开发标准: 1 、c o m c o m + ;2 、c o r b a ;3 、j a v a b e a n 。本文以c o m 构件测试为例阐述软 构件的测试,但这些方法同样适用于其它标准的构件测试。 根据概念,抽象类也是软构件,是源代码级上的复用。但它与面向对象方 法的类的形式上很相似,且测试方法与基类的测试方法差别不大。因此我们不把 它列入本文所定义的构件的范畴。 c o m ,即构件对象模型,是一种以构件为发布单元的对象模型,这种模型 使各软件构件可以用统一的数据格式进行交互。本文中“组件”和“构件”属于 同一概念,为方便叙述将不再区别。c o m 既提供了构件之间进行交互的规范, 也提供了交互的环境,因为构件对象之间交互的规范不依赖于任何特定的语言, c o m 是实现不同语言协作开发的一种标准。c o m 构件具有复用性、封装性、组 装性。 c o m 不是其钵豹缡疆嚣壤戡菜糖特定语富,嚣是一攀争标准。c o m 不涉及具 体编程及软件实现的细节。c o m 指定一种构件模型以及c o m 构件( 或对颓) 之间 翻互俸麓掰需翼餐浆编稔瓣范。c o m 构释虿教分痞在秘一令避程内,或者在不 同的进程间,甚鬣是远端的机器上。c o m 构件可以是用不同的语言编写,结构 魂可良有很大的不同。c o m 被认为是一稀二进镱慵i 准,因为它怒稀蛰程序被 编译成- - 2 进制代码矮才越作用的标准。c o m 构 牛最匿形成动态链接库一d l l ) 和可执行文件( 串e x e ) 。瞬前软彳牛构件的标准大致有:微软提出的c o m c o m + 、 s u n 公司提凄懿j a v a b e a n e j b 、o m g 提蹬熬c o r b a 、b o r l a a d 公筏提基数v c l 、 微软与i b m 提出的w e b s e r v i c e 镩。 2 2c o m 、e j b 、c o r b a 的比较 三静稳俘蕊藏翁魄较魏表2 ,l 溺所示。 表2 - 1 三种构件规范的比较 c o r b ae j b c o m 开发环境开发中有多 二进制接口标准非二进制的 基于c o m j a v a二进制接口标准是c o m 构件的核心 兼容性、可移植性与标准语言有很强的结基于j a v a 语言规范,可 完全没有源代码级的 台,可移植性不太好移植性好,兼容性略差合:可移植性不太好 标准化语言绑定概念 修改和维护使用c o r b a i d l 定义构不包含i d l 文件在容使用m i c m s o l 【i d l 定义 件的接口,需要额外的修器与构件之间定义接口,构件接口,需要额外的修 改和维护易于修改维护改维护 提供的服务提供一整套标准化服务,既不标准又缺少实际应已经被一些关键服务所 但是缺乏实际应用用支持 平台依赖性无无有 语言依赖性无 无无 应用善于传统的企业级运算善于一般的w e b 处理普于传统的桌面应用 c o r b a ( c o m m o no b j e c tr e q u e s tb r o k e r a r c h i t e c t u r e ) 悬由o m g ( o b j e c t m a n a g e m e n t g 姻嘲襄隧黪应溪较箨露系镕褥鞍辩象蓑零缀蘩。c o r b a 舔系结擒 宝要是幽霁尊象实现、公熬对象请浓代理、i d l 存根和框裂、对教遥配器o a 、接 西存储麾、实璃存储瘁等缀成。c o r b a 怒由标潦组织铡订酶稼壤,霞褥鬃有遴 搦瞧,鞠辩c o r b a 必爨灏颞众巍家豹穰整,嚣瑟穗对繁琐。鬈鸷c o r b a 是黧 际通用的标准,c o r b a 的发布晚于其它构件规范,因而c o r b a 的应用一陡较差。 e j b ( e n t e r p r i s ej a v a b e a n s ) l 裙是交s t k m i c r o s y s t e m 公司撬接寒黪。e j b 蒸 j a v a 中的商业成用组件技术,它烧一种歼放的应用组件模型。e 阳的体系结构觎 籍鞭务器( s e r v e r ) 、容器( c o n t a n e r ) 、远程按曩辫e 黻8 姆秘燃嚷瓣e ;双及e j bh o m e 等。e j b 熬特点:掰b 鸯众多商家支持,霹移植擞强,出于8 阳靓救颁布丁组明 确的e 豫容器( 供斑商服务器) 和掰b 维襻( 裔、监对象) 之海静契约,这傈谣了掰b 勰 咎在不弱f - j b n 务器主懿可移槎经;警鑫猿立热,f j b 髂燕络梭究全独立予任秘 特定的平台、协议和中间件等基础设施。一个平台上开发的应用程序不需要做任 何修改就可移植到另一平台,完全实现了“编写次,到处运行”。简化了分布式 对象的开发、部署和访问。e j b 分布式对象( - - 种e n t e r p f i s eb e a n ) 的开发人员只需 依照为e n t e r p r i s ej a v a b e a n 建立的契约和协议实现对象。这使整个开发、发布和 管理变得非常简单,可降低系统建设成本、减小开发周期。 c o m ( c o m p o n e n to b j e c tm o d e l ,组件对象模型) 是m i c r o s o f t 软件组件标准是 构造二进制兼容软件组件的规范。c o m 的体系结构包括统一数据传输、持久存 储和智能命名、c o m 核心等。其中c o m 核心包括服务控制管理、接口代理、接 口基和c o m 库。c o m 核心定义了c o m 对象与使用者( 客户) 如何通过二进制标准 接口进行交互的规格说明。持久存储通过i s t o r a g e 和i s t r e a m 接口提供了一个“文件 系统”。智能命名通过对象实现接口,使用户可以在以后重新连接一个指定的对 象实例,并且使对象实例仍保持原来的状态,另外还提供保存它们名字和其他持 久信息的机制。c o m 库提供对所有客户及组件都非常有用的组件管理服务。c o m 构件的特点:语言无关性,c o m 规范的定义不依赖于特定语言,它采用的是一 种二进制代码级的标准,而不是源代码级的标准;可重用性,c o m 重用性是建 立在构件对象的行为方式上的,它指示了c o m 对象如何重用已有的c o m 对象功 能;位置透明性,组件从一台计算机转移到另一台计算机仅涉及到重新配置的问 题。 2 3 c o m 构件的舔璃 2 。3 1c o m 接蠢 接i :1 是构 孛提供给步 爨调用的方法,接鞠也是客户访阅车句 串属性的难一方 法。客户只能通过接阴与构件交互。因为软件兼容的需要,构件接口必须保持不 交蛙帮接强一艇定义零褥更改。接日怒霜接蜀定义语蠢( i d l ) 接述夔。接h 定义 语言( i d l ) 怒一种描述性语嵩,而不是一种程序设计语言,它描述由构件对氖 实现静接口。i d l 审定义了揍翻的名字、每个耩往与方法静名牢等等。 c o m 接册的实现主要是定义纯虑函数或藿载抽敷基类的缒虚函数。v i s u a l c + + 的c o m 接口是从i u n k n o w 接臼派生而来的。按豳重载抽象类的纯虚函数。 缝虚弱数是是耀= o 橱记的虚磁数,燹下铡。撼象类怒包含有缒虚函数敬类,该 类不能直接产生实例,因此无法直接调用,只有从抽象类的派生的类才可生成实 例。纯虚函数是没有实现部分的,它只在头文件的定义。当继承抽象基类时,必 须实现基类的纯虚函数。 s t r u c ti u n k n o w n v i r t u a lh r e s u l ts t d c a l lq u e r y i n t e r f a c e ( i i d & n i i d ,v o i d + + p p v o b j ) = o ; v i r t u a lu l o n gs t d c a l la d d r e f 0 = 0 ; v i r t u a lu l o n g _ s t d c a l l r e l e a s e 0 = 0 ; ) v i r s u a l c 抖提供类c o l e o b j e c t f a c t o r y ,称为类厂。通过类厂方法: o n c r e a t e i n s t a n c e ( ) 可以创建构件的对象。g e t c l a s s l d ( ) 可返回创建对象的娄 的i d 。c o c r e a t e i n s t a n c e 是创建构件对象最简单也是使用最多的一种方法。此醒 数需要一个构件标识符c l s i d 参数,在此基础上创建相应构件的一个实例,并 返回此构件实例的某个接口指针。该函数的定义如下: h r e s u l ts t d c a l lc o c m a t e l n s t a n c e ( c o n s tc l s i d & r c l s i d ,构件标识符 i u n k n o w n * p u n k o u t e r ,在构件聚合时,传递外层构件接口指针 d w o r dd w c l s c o n l e x t ,j l t 务器种类 c o n s ti i d & d i d ,接口标识符 v o i d * * p p v 存放返回的接口指针 ) 可以看出,c o c r e a t e i n s t a n c e 。有四个输入参数蒂日一个输出参数。第一个参 数是谂铷建秘件的c l s i d ;第= 个参数是用予聚台构件静;第三个d w c l s c o n t e x t 参数搬定了所创建的构件的类别;第暇个参数r i i d 是构件上特使用的接口的l i d ; 最后一个是输出参数,用来存放这个接口的指针。类厂c o l e o b j e c t f a c t o r y 的方 法o n c r e a t e l n s t a n e e ( ) 重载踺,热入c o c r e a t e l n s t a n e e 潮可创建热耱越象。 c o m 构件的接口既可直接在汰文件定义,也可用i d l 语言描述。在头文件自已 定义,籍叠绶姨i u n k a o w n 或i u n k n o w n 派垒黪接墨缀承。鑫趱定义接瑟薅,粼 必须自己管理斑函数表,即必须重载i u n k n o w n 的三个纯虚函。i c l a s s f a c t o r y 是 献1 u n k n o w n 派生来静c l a s s f a c t o r y 的接口。饪直接定义的接西,在诵用前,须 重载q u e r y i n t e r f a c e 函数。 s t l l a c ti n e w i n t e r f a c e :p u b l i ci u n k n o w n v i r t u a lv o i dn e w f u n c t i o n 0 = 0 ) ; m i d l 是v i r s u a lc + + 的接口描述语言编译器,它可以把用i d l 描述的接口 直接翻译成头文件。接1 :3 用i d l 描述更通俗易懂。由于i d l 是接口的描述性语 言,在v i r s u a lc + + 编译器中不能编译,因此编译器直接把接口翻译成c + + 的头 文件i n t e r f a c e h因此初学v i r s u a lc + + 会迷惑,似乎重复定义接口。 v i r s u a lc + + 提供自动化的接口i d i s p a t c h 。同其它标准c o m 接口一样,它 受到c o m 调度的完全支持,也得到m f c ( m i c r o s o f tf u n c t i o nc l a s s ) 类库的完 全支持。在构件端要带有i u n k n o w n 接口的类。在客户端,可使用标准的c o m 技术获得接口i d i s p a t c h 指针。m f c 类库中,c c m d t a r g e t 类的方法:g e t i d i s p a t c h ( b o o l b a d d r e f ) 可获得i d i s p a t c h 指针。 v i r s u a lc + + c o m 构件的编程时,有可能我们没有定义纯虚函数,也没有发 现公共接口i u k n o w n 和i d i s p a t h ,因为m f c 类库已把这两个公共接口定义放基 类中。因此没有接触到公共接1 3 。例如在基类c c m d t a r g e t 有返回接口指针 g e t i d i s p a t h ( b o o l b a d d r e f ) 方法。 客户程序用一个指向接口的指针来调用接口成员函数。如图2 - l 所示,接口 指针实际上又指向另一个指针,第二个指针指向组函数,称为接口函数表,接 口函数表中每一项为4 个字节长的函数指针,每个函数指针与对象的具体实现连 接起来。通过这种方式,客户只要获得了接口指针,就可以调用对象的实际功能。 厂、 对象实现 鞠2 - 1 接秘结梅 通常我们把接口函数表称为虚瀚数表( v t a b l e ) ,指向v t a b l e 的指针定义为 p v t a b l e 。通常把接口的指针放在虚函数表。对一个接口来说,它的虚函数表v t a b l e 是确定的,因此接口的成员函数个数是不变的,而且成员函数的先后顺序也是不 变的;对于每个成员函数来说,其参数和返回值也是不变的。客户调用构件的接 口方法,首先必须查询接口指针,通过接口指针取得虚函数表的指针。并根据参 数i i d 和c l s i d 获得接口函数。 c o m 接口的特点是,一旦公布了一个接口,它将永远保持不变。升级构件 时,不会修改己有的接口,而是加入一些新的接口。在c o m 中,用一个1 2 8 比 特( 1 6 个字节) 的g u i d ( g l o b a l l yu n i q u ei d e n t i f i e r ,全局唯一标识符) 的结构来标识 一个接口,称为i i d ( i n t e r f a c ei d e n t i f i e r ) 。根据定义,g u i d 在时间和空间上都是 唯一的,可以保证每个接口标识符都是唯一的。在微软的集成编程环境v i s u a l s t u d i o 中编写c o m 构件时,系统会自动生成g u i d ,并加入到源程序中。 查询接口方法必须有参数i i d 。每个接口有全局唯一的标识符l i d 。查询接 口正是通过i i d 标识符获得接口的指针。l i d 、c l s i d 、u u i d 、g u i d 的结构相 同均是四个字节。其结构定义如下: t y p e d e fs t r u c t _ g u i d u n s i g n e dl o n gd a t a l ; u n s i g n e d s h o r t d a t a 2 ; u n s i g n e d s h o r t d a t a 3 ; u n s i g n e d c h a r d a t a 4 8 ; g u i d ; 2 。3 ,2 c o m 捻传瓣臻构 c o m 构件是由两部分组成的。首先是c o m 构件的类簇,另外是c o m 的接 口。c o m 构
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 施工进度计划调整与优化方案
- 输电线路巡检与清障工作流程优化方案
- 2025年职高美育考试试卷及答案
- 汽车油漆项目融资计划书
- 长治中考英语真题及答案
- 音乐考编福建题库及答案
- 编办招考面试真题及答案
- 遂平小学考试试卷及答案
- 考传媒的试题题库及答案
- 陕西事业编历真题及答案
- 药剂证书考试题库及答案
- 前庭大腺囊肿课件
- 雨课堂学堂云在线《医患沟通与调适(广州医大 )》单元测试考核答案
- 2023数字图像处理重修试题
- 小区游泳池经营承包合同
- 离职手续委托书范本
- HY/T 0330-2022海滩养护与修复工程验收技术方法
- 医疗卫生事业单位结构化面试题打印
- 第11章-量子力学基础
- GB/T 12467.1-2009金属材料熔焊质量要求第1部分:质量要求相应等级的选择准则
- 中药材的采收与加工
评论
0/150
提交评论