




已阅读5页,还剩68页未读, 继续免费阅读
(计算机科学与技术专业论文)基于元数据的构件软件回归测试技术.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
中文摘要 摘要 构件式的软件开发( c b s d ; c o m p o n e n t b a s e ds o f t w a r ed e v e l o p m e n t ) 代表了 软件开发模式的转变,即由“庞大单一平台的,从零开始”的传统模式转变为基 于平台独立的第三方提供的已有构件的集成组装模式。这种新型软件开发为提高 软件生产效率提供了一种有效的途径,已经成为目前软件工程领域研究重要热点 之一。 然而,构件式的软件系统( 构件软件) 给传统的软件测试提出了新的挑战, 即复用的构件必须要和新环境融为一体,这通常需要实时的检测、诊断和处理软 件错误。在构件的开发过程和在开发使用该构件的某个系统的过程中,构件的提 供者和使用者需要交换各种信息,如构件的功能、使用条件等。然而,由于各种 原因交换这种信息是有条件的,构件的提供者和使用者都面临信息不足的问题。 缺少信息会导致各种困难,例如没有源代码没办法生成测试用例,没办法只好要 求构件提供者完成构件的测试。但是一个构件经过提供者的充分测试过并不表示 该构件的质量百分之百是有保证的。那只好构件的使用者也做测试,而使用者在 缺少信息的情况下测试构件是困难的。 本文从构件使用者的角度提出一种对构件软件进行回归测试的方法,就是利 用构件开发者提供的关于构件的一些功能或结构上的描述信息( 即元数据) 对构 件在新的环境中进行测试。为此我们提出了各种类型的元数据,实现了构件行为 约束的动态检查,并改进了c p m 方法以利用元数据信息对测试用例进行选择。实 验结果表明改进的c p m 方法可以选择出了较少的测试用例用于回归测试,这样就 提高了构件回归测试的效率。 关键字:元数据:契约式设计( d b c ) ;构件软件;回归测试;范畴划分方法( c p m ) 英文摘要 a b s tr a c t c b s dr e p r e s e n t sap a r a d i g ms h i f ti ns o f t w a r e d e v e l o p m e n t :f r o mb u i l d i n g m o n o l i t h i c ,s i n g l e p l a t f o r m ,b u i l t f r o m s c r a t c hs y s t e m st oc o n s t r u c t i n ga s s e m b l i e so f r e a d y m a d ec o m p o n e n t st h a ta r ep l a t f o r m i n d e p e n d e n ta n ds u p p l i e db yt h i r d p a r t i e s t h i sn e ws o f t w a r ed e v e l o p m e n tp a r a d i g mp r o v i d e sa ne f f e c t i v ew a yt oi n c r e a s e s o f t w a r ep r o d u c t i o n ,a n dh a sb e e nah o tt o p i ci nt o d a y ss o f t w a r ee n g i n e e r i n g h o w e v e r , c o m p o n e n t b a s e ds o f t w a r e ( c b s ) p r e s e n t sn e wc h a l l e n g e st o t r a d i t i o n a ls o f t w a r et e s t i n g ,t h a ti s ,r e u s a b l ec o m p o n e n tm u s tb ei n t e g r a t e di n t oan e w w o r k i n ge n v i r o n m e n t ,w h i c hu s u a l l yn e e d st oc h e c k ,d i a g n o s e ,a n dh a n d l es o f t w a r e e r r o ra tr e a lt i m e c o m p o n e n ts u p p l i e r sa n du s e r sh a v et oe x c h a n g eav a r i e t yo f i n f o r m a t i o ns u c ha sc o m p o n e n tf u n c t i o n sa n du s a g ec o n d i t i o n si nt h ed e v e l o p m e n t p r o c e d u r ea n di nd e v e l o p i n gas y s t e mb yu s i n gt h i sc o m p o n e n t h o w e v e r , t h ee x c h a n g e o ft h i si n f o r m a t i o ni sc o n d i t i o nd u et ov a r i o u sr e a s o n s c o m p o n e n tp r o v i d e r sa n du s e r s a r ef a c i n gt h ep r o b l e mo fi n s u f f i c i e n ti n f o r m a t i o n l a c ko fi n f o r m a t i o nw i l ll e a dt oa l l k i n d so fd i f f i c u l t i e s ,f o re x a m p l e ,c o m p o n e n tu s e rc a n t g e n e r a t et e s tc a s e sw i t h o u t s o u r c ec o d e ,s ow eh a v en oc h o i c eb u tt or e q u i r ec o m p o n e n tp r o v i d e r st e s t i n gt h e c o m p o n e n t b u taf u l l y t e s t e dc o m p o n e n td o e sn o tm e a nt h a tt h eq u a l i t yo ft h e c o m p o n e n ti s 10 0 g u a r a n t e e d ,i np a r t i c u l a ri nan e ww o r k i n ge n v i r o n m e n t s o c o m p o n e n tu s e r sa r ee x p e c t e dt od ot e s t i n gt o o ,b u ti ti sd i f f i c u l tf o rc o m p o n e n tu s e r st o t e s tc o m p o n e n t si nc a s eo fl a c ki n f o r m a t i o n t h i sp a p e rp r o p o s e sam e t h o df o rc o m p o n e n t b a s e ds o f t w a r er e g r e s s i o nt e s t i n g f r o mt h ep e r s p e c t i v eo fc o m p o n e n tu s e r s t h ei d e ai st h a tc o m p o n e n tp r o v i d e r sp u b l i s h m e t a d a t ad e s c r i b i n gc o m p o n e n tf u n c t i o n so rb e h a v i o rc o n s t r a i n t s ,a n dc o m p o n e n tu s e r s u s et h e s em e t a d a t at o t e s tc o m p o n e n t si nn e ww o r k i n ge n v i r o n m e n t t od os o ,w e p r o p o s ev a r i o u sm e t a d a t a ,i m p l e m e n td y n a m i cc h e c k i n go fc o m p o n e n tb e h a v i o r c o n s t r a i n t s ,a n di m p r o v et h ec p mm e t h o dt os e l e c tt e s tc a s e sb yu s i n gm e t a d a t a i n f o r m a t i o n t h ee x p e r i m e n t a lr e s u l t ss h o wt h a tt h ei m p r o v e dc p mc a ns e l e c tf e w e r t e s tc a s e sf o rc o m p o n e n tr e g r e s s i o nt e s t i n g t h i se n h a n c e st h ee f f i c i e n c yo fr e g r e s s i o n t e s t i n g k e yw o r d s :m e t a d a t a ;d e s i g nb yc o n t r a c t ( d b c ) ;c o m p o n e n t b a s e ds o f t w a r e ; r e g r e s s i o nt e s t i n g ;c a t e g o r y - p a r t i t i o nm e t h o d ( c p m ) 大连海事大学学位论文原创性声明和使用授权说明 原创性声明 本人郑重声明:本论文是在导师的指导下,独立进行研究工作所取得的成果, 撰写成硕士学位论文= = 基王丞麴堡的构鲑筮鲑回归型这撞苤:。除论文中已经注明 引用的内容外,对论文的研究做出重要贡献的个人和集体,均已在文中以明确方 式标明。本论文中不包含任何未加明确注明的其他个人或集体已经公开发表或未 公开发表的成果。本声明的法律责任由本人承担。 学位论文作者签名:拉 学位论文版权使用授权书 本学位论文作者及指导教师完全了解大连海事大学有关保留、使用研究生学 位论文的规定,即:大连海事大学有权保留并向国家有关部门或机构送交学位论 文的复印件和电子版,允许论文被查阅和借阅。本人授权大连海事大学可以将本 学位论文的全部或部分内容编入有关数据库进行检索,也可采用影印、缩印或扫 描等复制手段保存和汇编学位论文。同意将本学位论文收录到中国优秀博硕士 学位论文全文数据库( 中国学术期刊( 光盘版) 电子杂志社) 、中国学位论 文全文数据库( 中国科学技术信息研究所) 等数据库中,并以电子出版物形式 出版发行和提供信息服务。保密的论文在解密后遵守此规定。 本学位论文属于:保密口在年解密后适用本授权书。 不保密1 2 5 ( 请在以上方框内打“”) 一:产佳翟。日 基于元数据的构件软件回归测试技术 第1 章绪论 1 1 选题依据 构件式的软件开发( c b s d ;c o m p o n e n t b a s e ds o f t w a r ed e v e l o p m e n t ) 通过组装 现有软件构件来建造大型软件系统1 。这种新型软件开发使得软件开发由“从零开 始 的传统模式转变为基于已有构件的集成组装过程。这为提高软件生产效率提 供了一种有效的途径,已经成为目前软件工程领域研究重要热点之一【2 1 。 然而,构件式的软件系统( 构件软件) 给传统的软件测试提出了新的挑战, 即复用的构件必须要和新环境融为一体,这通常需要实时的检测、诊断和处理软 件错误p j 。在构件的开发过程和在开发使用该构件的某个系统的过程中,构件的提 供者和使用者需要交换各种信息,如构件的功能、使用条件等。然而,由于各种 原因交换这种信息是有条件的,构件的提供者和使用者都面临信息不足的问题。 缺少信息会导致各种困难,例如没有源代码没办法生成测试用例,只好要求构件 提供者完成构件的测试。但是一个构件经过提供者的充分测试并不表示该构件的 质量百分之百是有保证的。那只好构件的使用者也做测试,而使用者在缺少信息 的情况下测试构件是困难的。 而由于构件变更的频繁性,构件的使用者在得到构件的新版本之后,必须对 整个系统进行重新测试,也即是通常所说的回归测试。构件变更的频繁使得系统 回归测试也很频繁。而回归测试是一个很费时费力的事。据统计,回归测试占整 个软件系统开销的1 3 ( 4 1 ,所以提高回归测试的效率是当前的首要工作。 基于这种现状,本文提出了一种能够有效的提高构件回归测试效率的方法, 即将契约式设计应用到构件软件回归测试选择中,用来选择出高效的测试用例应 用于构件软件的回归测试。并在可能的情况下为构件系统生成测试用例。 1 2 研究内容 为了能够提高构件软件回归测试效率的问题,并且要确定构件在新的环境中 能够正确执行。本文提出了一种使用契约式设计理念和构件规格说明书来选择测 试用例的方法,并且用注入代码的形式来检查构件在新环境下执行的正确性。本 第1 章绪论 文的研究内容如下: 一、元数据的定义及表达,根据契约式设计理念提出了两种类型的元数据, 用于解决构件使用者信息不足的问题。 二、检查代码生成算法及其实现,主要研究如何生成判断构件运行是否正确 的检查代码,该算法需要考虑获取构件内建的元数据、增加和删除构件使用者定 义的元数据以及如何执行元数据。 三、测试用例选择算法及其实现,主要利用契约式设计的理念的核心断言和 构件的规格说明书来生成测试格,利用测试格的改变为变更的构件选择提高回归 测试效率的测试用例。 1 3 论文结构 本文共分七章,除本章外其它各章的内容概括如下: 第2 章为“构件软件测试技术概述”,在本章中主要对构件测试技术进行了简 单介绍,并且介绍了构件软件回归测试及其现有技术。 第3 章为“契约式设计理念及其应用”,介绍了契约式设计的理念及其核心, 并简单介绍了契约式设计的应用。 第4 章为“构件元数据及表示 ,主要介绍构件中元数据的类型以及在本文中 将要用到的三种新类型的元数据及其在系统中的表示方法。 第5 章为“检查代码生成技术介绍与实现”,本章利用元数据来调节构件开发 者和使用者之间的矛盾,并将断言式的元数据解析成检查代码,利用检查代码判 断构件在新环境中执行是否正确。 第6 章为“测试用例选择 ,这一章主要利用契约式设计的理念来改进c p m 方法,从而利用构件的规格说明书和元数据信息来为构件选择出能够提高回归测 试效率的测试用例。并用一个实例来证明这种方法的有效性。 第7 章为“总结与展望,这部分主要总结了作者在本课题上已完成的工作, 并提出了下一步的研究内容。 基于元数据的构件软件同归测试技术 第2 章构件软件测试技术概述 2 1 构件软件测试研究现状 构件是按照一定规范编写的程序模块【5 】。构件的广泛使用,使得构件系统的测 试和维护问题越来越受到人们的重视。构件软件在其生命周期中会经历多次演化, 在演化过程中会对构件系统进行修改。要验证修改的正确性和新系统的可靠性, 就必须对构件系统重新执行测试。构件系统回归测试能够大量复用先前测试用例, 只对受演化修改影响范围内的构件进行测试,因此可以节省大量测试时间和成本。 2 1 1 构件软件和传统软件的区别 构件与传统软件模块的区别主要体现在: 以第三方复用为目的进行开发,多数情况下源代码对使用者不可见卜 是一个可发布、可执行、有良好接口的高质量模块; 可在不同项目的不同上下文环境中被复用。 一般而言,基于构件的软件系统( c o m p o n e n t b a s e ds o f t w a r es y s t e m ) 简称构件 软件,有如下特点: 以独特的软件组装过程开发,是多种异质构件的松耦合结构; 由于构件易被替换,因而构件软件的演变速度快; 系统的可靠性对构件质量高度依赖; 系统有更好的互操作性、可扩展性和重用性; 此外,构件软件常应用于网络分布式环境之中。 构件及构件软件所固有的新特性却给测试带来一系列问题:构件提供者需要使 用相当充分的覆盖准则进行测试以提高构件的可复用性;对用户使用构件的上下 文环境并不十分了解;并且不能很好地获得构件的错误报告对构件使用者而言, 源代码不可见性给测试设计和用例生成带来极大的障碍;系统中构件的异质( 混 杂) 性不利于测试标准的统一及自动化的实现;构件版本变更快及不确定性迫使 要对构件系统进行较为频繁的回归测试等。 第2 章构件软件测试技术概述 2 1 2 构件软件测试面临的困难 h a 盯o l d 【6 1 认为应该从构件开发者和构件使用者两个不同的角度来看待构件软 件的测试问题。构件的开发者认为构件相对于使用构件的环境是独立的,所以要 用与上下文独立的方式测试构件所有的功能。相反,构件使用者开发的应用程序 提供了构件的运行环境,所以构件使用者不把构件看成独立的单元,而且仅仅考 虑与应用程序相关的构件功能。另一个重要的区别是构件开发者有构件的源代码, 而使用者则通常没有构件的源代码。 1 、构件开发者面临的测试问题 ( 1 ) 测试充分性判据的可扩展性( s c a l a b i l i t y ) 由于复杂性问题和组合爆炸问 题,对小规模程序适用的判据对大规模程序不一定适用。 ( 2 ) 测试数据的产生:由于同样的原因,难以产生合适的测试输入,使得对 低层次元素( 分支、定义一使用对,需求功能可看作是高层元素) 难以达到较高的覆 盖率。 ( 3 ) 如何配置构件的测试环境:对单个构件进行测试的环境,与构件在实际系 统中运行的环境可能不同。所以在测试构件时应该考虑模拟真实环境,如构件的 竞争和死锁,多线程等。但是由于构件的复用,难以完全模拟构件使用的所有真 实环境。 ( 4 ) 构造测试驱动器和打桩技术:传统的技术是面向特定的工程。但是构件的 多样性和其功能的专用化使得传统的技术达不到应有的效果。 ( 5 ) 构件测试的可重用性:对构件的测试应该是可重用的。 构件的开发者和使用者很可能不同( 尤其对于商业构件来说) ,这导致了以下问 题:开发者对构件做的测试可能不充分,而使用者对此难以确定;开发者和使用 者使用构件的环境不同,包括编程语言、操作系统、硬件平台的不同;对于构件 使用者来说,源代码很可能是未知的。这些问题是构件软件测试问题与传统的软 件测试问题的最大区别。 2 、构件使用者面临的测试问题 - 4 - 基于元数据的构件软件回归测试技术 ( 1 ) 测试充分性判据的可扩展性问题依然存在。 ( 2 ) 构件的测试顺序:如果软件采用分层结构,可以先测试底层构件,因为 不需要其他构件提供服务;然后再测试高层构件,所调用到的其它构件都是经过 测试的。如果不是分层结构,可能就难以确定测试的顺序。 ( 3 ) 冗余测试问题:通常先对构件进行单独测试,然后使用相同的充分性判据 进行集成测试,这就导致有些测试是重复的。 ( 4 ) 源代码是否可用:源代码可用与否导致不同的系统测试方法。 ( 5 ) 编程语言、操作系统平台、硬件结构的混杂性( h e t e r o g e n e i t y ) :系统使用 的构件可能是用不同语言编写的,运行在不同的平台上,这就要求测试方法和工 具与平台和语言无关。 2 2 构件软件回归测试 构件软件在生命周期内,要进行多次演化,对构件系统进行修改,这就需要对 修改后的系统重新测试,称之为构件软件的回归测试【1 3 】。构件软件的后期变更主 要源于两个因素:一是由于构件供应商提供了新版构件或者不再提供某些构件的 服务等;二是构件软件的开发者改变了组装模式或是重新定制了某些构件。构件 软件回归测试同样有确定受影响的模块、选择能检测新引入缺陷的用例等问题。 2 2 1 回归测试范围的限定 一般来讲,变更的只是极少一部分构件,因此没有必要对所有构件和交互都重 新展开测试。通过对构件之间交互行为的图形建模表示,可以计算出变更构件所 影响到的构件和接口交互。例如,文献 1 4 l q b 使用模块推理( m o d u l a rr e a s o n i n g ) 确定需要重新测试的构件集合;而w u 等人则在构件交互图c i g 的基础上为每个 测试用例构建接1 2 1 事件执行图( i n t e r f a c ea n de v e n te x e c u t i o ng r a p h ,i e e g ) 1 5 】,利 用i e e g 图很容易得到受影响的接口、事件和依赖关系等此外,运用切片技术也 能计算出变更所波及的范围1 6 1 。 2 2 2 典型回归测试技术 l 、黑盒测试技术 第2 章构件软什测试技术概述 黑盒测试技术不仅对单个构件和构件间交互的测试有效,也能用到回归测试 中。文献 1 7 】从系统开发者对构件进行定制的角度出发,将构件定制分为泛化、特 定化和重构3 种类型,再将多种黑盒测试技术( 如等价类划分、边界值分析) 调 整用于每类定制的重新测试中所提出的构件软件黑盒回归测试框架如图2 1 所示。 图2 1 构件软件黑盒回归测试框架 f i g 2 1t e s t i n gf r a m e w o r kf o rb l a c k - b o xt e s t i n go fc b s 2 、基于u m l 的协作图或状态图 面向对象的软件中,对象通过交互来实现行为,u m l 的交互图是描述一组对 象问的结构关系和交互行为设计的最佳选择,主要有顺序图和协作图两种,顺序 图关注全局的时序,协作图关注协作对象之间的关系。 u m l 状态图描述了系统中的对象在其生命周期中的行为和状态变迁。在软件 分析和设计建模中占有重要地位。u m l 模型可作为测试阶段的依据,不同的测试 可以使用不同的u m l 状态图作为测试依据。u m l 状态图在回归测试中的应用尤 为有效。基于依赖分析的u m l 状态图中对测试比较有效的是数据流依赖和控制流 一6 - 基于元数据的构件软件回归测试技术 依赖。将u m l 状态图应用回归测试中,现有的方法包括对u m l 状态图中新增变 迁的测试以及u m l 状态图中删除变迁的测试。 如果从系统规约的角度考虑变更,则依据u m l 的协作图或状态图可以分析出变 更对控制序列的影响,从协作图还可以获得对数据依赖的影响。s a j e e v 等j k t 掩】则在 方法级考虑变更,对构件的版本数据进行建模并用x m l 文件存储,通过分析对变 更方法的直接或间接调用,从用例库中选择出用于回归测试的用例版本变更信息、 用例与方法调用序列的关联关系是该方法的两个基本前提。 基于构件元内容( m e t a c o n t e n t ) 的回归测试技术【1 9 】运用描述构件信息的元数据 和用以计算或检索这些信息的元方法指导用例选择。除了基于代码元内容的技术 外,基于规约元内容的方法使得在构件源代码不可见的情况下也能开展测试实验 表明,基于元内容的回归测试用例选择技术能平均节省2 6 左右的用例。 此外,基于构件行为捕获与测试的方法也能用于回归测试【2 0 , 2 1 】,通过检查i 0 不 变式和交互不变式发现由于变更所引发的交互错误【2 2 1 。 2 3 本章小结 本章主要对构件软件测试进行了详细的介绍,阐述了构件软件测试和传统软件 测试的区别,对构件式软件的回归测试的现有技术进行了简单介绍和分析,从而 明确了对构件软件进行回归测试时所面临的困难。 基于元数据的构件软件同归测试技术 第3 章契约式设计理念及其应用 3 1 契约式设计的简介 许多人在考虑软件开发的新方法和新工具时,都是把提高生产率或产量 ( p r o d u c t i v i t y ) 作为主要的期望目标。产量不仅直接受益于方法途径,也受益于对 质量的重视。 软件质量的一个主要部分是可靠性( r e l i a b i l i t y ) :系统要能够完成所规定的任 务( 正确性一c o r r e c t n e s s ) ,也要能够妥善处理异常情况( 稳固性一- - r o b u s t n e s s ) 。 一句话,可靠性就是系统没有错误故障。 我们如何来建造可靠的软件呢? 答案有几个部分。s t a t i ct y p i n g ( 静态类型严格 兼容) 能够帮助我们及早抓住源码中那些不一致的部分,从而避免使其成为故障 之源。g a r b a g ec o l l e c t i o n ( 无用存储单元收集) ,尽管有时被认为是属于实现的层 次而被排除在外,实际上也是很基本的,因为它从根本上避免了进行存储器管理 时容易犯的错误。复用也是很有用的:如果你能复用那些由信誉良好的机构开发 并验证的软件部件,而不是对遇到的每一个问题都自己开发解决方案,就能开始 信任部分的软件,就像信任运行软件的机器一样。这样,可复用的程序部件库就 变成了硬一软机器( 硬件,操作系统,编译器) 的一部分。 但这还不够。要确定地让我们的软件系统正确地运行,我们需要一个系统的方 法来描述和实现软件单元以及它们在系统中的关系。基于上面的问题,本文介绍 这样一种方法,称之为契约式设计( d e s i g nb yc o m r a c t ) 。在契约式设计的理论中, 一个软件系统被视为一组相互交流的部件,它们之间互动的基础是一组准确定义 了的规范,它规定了这些部件相互之间的义务即契约。 3 1 1 契约式设计( d b c ) 的理念 由b e r t r a n dm e y e r 提出的契约式设计( d e s i g nb yc o n t r a c t ) 是一种软件设计方 法学【2 6 】。对软件系统来说,只保证它的各组成部分的正确无误的运行是远远不够 的,而最有价值的是在任何两个组成部分的交接处设计明晰的彼此义务和权利规 范,即所谓的契约。契约式设计通过将社会经济生活中的契约思想引入到软件开 第3 章契约式设计理念及其应用 发领域,从而确保开发出高质量的软件。契约用来约束人与人之间的关系,规定 了契约双方的权利和义务。契约式设计的基本思路是将各软件元素赋予客户与供 应商的角色,契约即相当于客户与供应商之间的合同,合同制约了双方的权利和 义务。契约式设计的数学来源是h o a r e 三元式能够说明什么模型元素被约束。被约束的元素称为约束的上下文。 能够通过模型导航,确定与所定义的约束相关的其他对象。利用导航表达 式可以做到。 能够对上下文对象和借助于导航表达式检出的对象做出断言。这些断言类 似于程序设计中使用的布尔表达式,但是断言具有更强的表达力。 从上面的o c l 的定义可以看出,o c l 是针对u m l 定义的一种约束语言,它 提供识别断言的功能。o c l 这种对断言的标识是在u m l 类图中进行的。 基于元数据的构件软件同归测试技术 3 2 2j a v a 模型语言j m l ( j a v am o d el in gl a n g u a g e ) j a v a 建模语言( j a v am o d e l i n gl a n g u a g e ,j m l ) 3 i , 3 2 】是一种用来进行详细设计的 表示法( n o t a t i o n ) ,它倡导一种思考方法和类的新思路。 使用j m l 来说明性地描述所希望的类和方法的行为,可以显著地改善整个开发 过程。将建模表示法添加到j a v a 代码中,其好处包括以下几点: 能更加精确地描述代码所完成的任务 能有效地发现和纠正错误 能减少随着应用程序的进展而引入错误的机会 能较早地发现客户没有正确使用类 能产生始终与应用程序代码保持同步的精确文档 j m l 注释始终位于j a v a 注解( c o m m e n t ) 内部,因此它们不会对进行j 下常编译 的代码产生影响。当我们想将类的实际行为与其j m l 规范进行比较时,可以使用 开放源码j m l 编译器。用j m l 编译器编译过的代码如果没有做到规范中规定它应 该做的事,那么该代码在运行时会抛出j m l 异常。这不仅能捕获代码中的错误, 还能确保文档( j m l 注释格式) 与代码保持同步。 j m l 为说明性的描述行为引入了许多构造。这些构造包括模型字段、量词、断 言的可见度范围、前提条件、后置条件、不变量、合同继承以及正常行为与异常 行为的规范。这些构造使得j m l 的功能变得非常强大。 3 2 3e n t e r p ris ed a v a b e a n s ( e j b ) e n t e r p r i s ej a v a b e a n s ( e j b ) t 3 3 , 3 4 , 3 5 是一个软件组件模型。如今开发电子商务平台 已大量使用组件技术这是因为组件技术提供了服务器上的自治、企业级和分布 式功能,并帮助开发者在不同颗粒度级别上定义和封装系统功能。通过采纳组件 技术、已建立旧系统的企业在与从一开始就围绕前沿组件体系结构设计的新公司 竞争起来更容易。而且软件组件比传统程序更易于为同后的需求进行维护、支持 和修改。在金融行业中,利用以服务器为中心方式的优势在于,可以定义商业过 程将它作为一组软件组件编写一次,然后通过多种渠道传递。一旦使金融系统 变为由单独的自治组件( 而非单一庞大程序) 组成灵活性就随之而来了。 第3 章契约式设计理念及其应用 e j b 的组件结构是以作为可复用的服务器端组件而设计的,它使企业能够建立 可升级、安全可靠、可运行于多重平台且以商务为重点的应用程序。e j b 可以让企 业开发人员只集中于开发商务逻辑,而不用花费精力处理分布式服务器端系统所 带来的底层问题,从而使开发人员可以快速开发大规模的企业应用。 3 2 4i c o n t r a c t 契约式设计的理念可以应用到任何语言当中,将他应用至l j j a v a 中开发出的工具 就是i c o n t r a c t 3 6 1 。由于断言是写在程序的j a v a d o c 注释中的,它本身不会对程序的 编译运行产生任何影响,如果想要我们添加到程序中的断言起到应有的作用,我 们就需要对程序进行改写,将j a v a d o c 注释中的限制条件添加到程序当中来,所要 实现对源程序的改写就需要有相应的工具,i c o n t r a c t 就是这样的一种工具。 i c o n t r a c t 的主要功能是解耄) r j a v a 类以及类中方法上的断言。 i c o n t r a c t 解析断言可以将它分成三个步骤: 1 、代码解析 在这一阶段主要对程序进行解析的,目的是得至l j j a v a d o c 注释当中的内容即断言 以及这个断言所对应的方法或类。在一阶段解析的结果是一个集合,存放的是程 序的各个部分( 类,变量,方法) 。 2 、依赖分析 这一阶段主要是针对的是有继承,实现关系的类,为了解决编译依赖问题。 3 、断言解析注入代码 在前两个阶段的基础上,利用代码解析得到的结果,定位断言所对应的方法, 区分断言类型,将断言转化为i 储句的判断,插入到程序的相应位置,得到对断言 进行了解析以后的程序。 如果再次编译运行该程序时,就将断言对类或方法的限制添加到了程序中。如 果执行程序时没有满足断言的要求,就会抛出异常,返回详细的异常信息。 3 3 本章小结 本章通过对契约式设计理念的详细描述,说明了契约式设计的应用前景以及 当前对契约式设计的支持的技术。并详细的介绍了契约式设计的相关应用,包括 基于元数据的构件软件回归测试技术 o c l ,j m l ,e j b 以及i c o n t r a c t 。通过对这些相关应用的介绍,明确契约式设计理 念的优点,以及它的核心断言,将在后面章节介绍契约式设计理念在本文中的应 用。 基丁:元数据的构件软件回归测试技术 第4 章构件元数据及表达 通常,构件开发者提供给构件使用者的只有二进制代码,接口描述、功能描述、 使用环境即上下文的描述。由于源代码无法得到,构件开发者提供的信息又无法 满足构件使用者对构件的测试要求,因此,本文提出了使用构件元数据的方法, 让构件开发者提供必要的信息来帮助构件使用者进行测试。 4 1 目前流行的构件技术包含的元数据 当今最流行的构件模型标准有c o r b a 4 0 1 、c o m 4 1 】和e j b l 4 2 1 。这些模型中都 使用了元数据来描述构件。例如:在e j b 中,j a v a b e a n 构件中包括的b e a n l n f o 对 象封装了关于构件的元数据的附加信息。这些信息包括构件名、构件功能的文本 描述、以及构件属性的文本描述;在c o m 构件中,接口i u n k n o w n 允许获得关于 构件接口的元信息。虽然这些构件模型都提供了元数据来完成特定的任务,但是 它们的描述缺乏通用性。在现存的构件模型中使用的元数据仅仅提供了关于构件 的普通的使用信息,( 例如:构件名、方法名、方法的参数类型等等) 或者关于 g u i 构件的显示信息( 例如:背景颜色,前景颜色,显示大小、字体大小等等) 。 4 2 构件元数据类型 当将第三方提供的构件集成到系统中时,系统开发者需要执行一系列任务,比 如:收集关于该构件的第三方认证信息,对系统进行评估和测试,评估集成该构 件后系统的质量等级。这些任务除了需要构件开发者提供构件的二进制代码外, 还必须有更加高级的关于构件特征的描述。 当构件开发者实现了某个构件时,他根本无法预测该构件可能在哪些环境中被 使用。为了支持系统开发者对系统所进行的各种软件工程活动,构件开发者不得 不提供足够的元数据信息,使得构件在不同的领域中被使用。从构件使用者的角 度考虑,可能会需要以下几种类型的构件元数据信息: 1 、关于定制和扩展构件的信息 构件属性 对构件属性的约束 第4 章构件元数据及表示 用来修改属性的方法 2 、集成构件的信息 接口语法 a ) j a v a 的反射、c o m 的查询接口、c o r b a 的d i i b ) 产生和处理的事件 接口语义 幻前置、后置条件和不变量 b ) 方面信息 c ) 协议规范 3 、评估构件的信息 静态和动态度量:复杂性和开发者对构件进行测试的覆盖级别 服务质量信息 价格、租金信息 4 、测试和调试构件的信息 输出的状态机表示 内嵌的拥有覆盖信息的测试套件 拥有覆盖数据的回归测试套件 接口输入、输出依赖 动态计算的覆盖信息 5 、分析构件的信息 流信息汇总:控制依赖和数据依赖 图形模型:调用图和控制流图 如果构件源代码可以得到,上述构件信息都可以通过分析获得。不幸的是,当 构件由第三方提供时,源代码是无法获得的。构件开发者是不会提供太多的关于 构件的细节信息给构件使用者的,其中源代码就是该类信息。构件开发者不想公 开的其他信息可能还包括以前的构件版本的缺陷或者构件功能的算法细节。使用 元数据的方法可以使构件开发者只提供他想公开的信息,而构件使用者可以利用 基于元数据的构件软件回归测试技术 这些提供的元数据进行构件单元测试、构件交互测试以及进行回归测试。本文主 要是利用这些元数据对构件进行回归测试。 4 3 元数据的表达方式 前一节介绍了很多种元数据,并且也说明本文的目的,主要是对构件式软件进 行回归测试。然而并不是所有的元数据在进行回归测试的时候都是有必要的。由 于本文将契约式设计的理念应用到了构件软件的回归测试当中,所以,本文主要 利用契约式设计中的核心断言作为元数据来对构件软件进行回归测试。 本文在前面章节已经介绍过了契约式设计的理念,并且对契约式设计的核心断 言有了一定的了解,本文中断言式元数据就是根据契约式设计中的断言而来的。 4 3 1 断言式元数据表达方式 由于本文是i 土t j a v a 语言实现的,我们在这里就只考虑d b c 毛e j a v a 语言中的实现 以及应用。d b c 中的断言和在i a v a 语言中提到的单纯的a s s e r t 关键字是不完全相同 的,在某种意义上可以说是有很大的区别。它不单纯是一个语句,它有自己的标 记、类型以及表达方式。它包括前置条件( p r ec o n d i t i o n ) ,后置条件( p o s t c o n d i t i o n ) 和不变式( i n v a r i a n t ) 三种基本类型4 6 1 。 1 、断言的标记及类型 断言的标记和类型是一对应的,将断言放在j a v a d o c 注释( p 木和木之间) 中。 ( 1 ) 标记 p r e :p r e c o n d i t i o n ( 前置条件) ,是方法在执行前必须要满足 的条件。含有“ p r e ”标记的断言的j a v a d o c 注释置于方法前。 ( 2 ) 标记 p o s t :p o s t c o n d i t i o n ( 后置条件) ,是方法在执行后必须要满足 的条件。含有“ p o s t 标记的断言的j a v a d o c 注释置于方法前。 ( 3 ) 标记 i n v :i n v a r i a n t ( 不变式) ,是方法执行前后都必须满足的条件。 含有“ i n v ”标记的断言的j a v a d o c 注释置于类或接e l1 前。 2 、断言表达式 ( 1 ) 断言表达式中可使用的变元 p r e :方法的形式参数、类中的成员; 类和接1 2 1 统称为t y p e 第4 章构件元数据及表示 p o s t :方法的形式参数、类中的成员、r e t u r n 年l 变量 p r e 。“r e t u r n 代表方法的返回值,而“变量 p r e ”表示使用“变量”在方法执行前 的值; i n v :类中的成员。 ( 2 ) 断言表达式的定义 b o o l e a ne x p r e s s i o n 是断言表达式; 若 是断言表达式,则”f o r a l l i n ”也是断言表达式; 若 是断言表达式, ”也是断言表达式; 若 是断言表达式, 表达式。 3 、断言的表达方式 断言的表达方式可用如下描述来表示: 则”e x i s t s i n 则“ i m p l i e s “也是断言 【断言标记断言表达式】十 每一条断言都是由断言标记和断言表达式两部分组成,对于同一个方法可以有 多个断言,在上面的描述中用“牛”表示,方法上是否有断言是可选的,根据程序 的设计人员对方法功能的实现来确定,这种可选性用“【】”表示。下面举例来说明 断言的具体写法,如图4 1 所示: 基丁元数据的构件软件回归测试技术 图4 1 断言的书写方法实例 f i g 4 1e x a m p l eo fw r i t i n ga s s e r t i o n 需要强调的是:断言是写在程序的j a v a d o c 注释中的,本身对于程序的执行是 起不到任何限制作用的。如果想要它们真正的起到作用,那么就需要对断言进行 解析,这一部分将在下一章详细阐述。 了解了断言式元数据的种类及表达方式之后,需要对他们之间的逻辑关系做进 一步的说明。断言之间的逻辑关系可以分为两类:一是在单个类中的同一方法上 的多个断言之间的关系;一是由于j a v a 中类的继承,接口的实现,接口的扩展以 及内部类( 将这四种情况统称为类型扩展) 等关系而产生的断言之间的继承关系, 下面将详细讲述这两种逻辑关系。 4 。3 1 单类中断言的逻辑关系 对于三种断言式的元数据,我们用下面的数学表达式来表示它们在单类中的逻 辑关系:其中r 表示当前t y p e ;m 代表方法,m t 。 l 、 前置断言:p r e 朋7 = a ip 厂e _ ,m r 表示的含义是对于同一个类型肚的方法m ,它的前置断言的值等于m 上每一条 前置断言的值的合取。下面用实例来解释,如图4 2 所示: 第4 章构件元数据及表示 在图4 2 中,所描述的方法s e t a g e 上有两条前置断言,那么方法s e t a g e 上前置断言的总的表达式即是: a g e 0 入a g e 0 a s q u a r e ( f ) 0 0 当程序执行时,有了h u m 和f 的值后,断言表达式的值就确定了。 4 3 2 类型扩展中断言的逻辑关系 j a v a 语言中存在四种类型扩展:类的扩展( c l a s se x t e n s i o n ) ,接口扩展( i n t e r f a c e e x t e n s i o n ) ,接口实现( i n t e r f a c ei m p l e m e n t a t i o n ) 以及内部类( i n n e r c l a s s ) 。针对 这四种类型扩展方式,断言的逻辑关系也有相应的实现。同前面讲述的,用数学 表达式来表示这种逻辑关系,首先:设c u r r t 表示当前t y p e ,e x t e n d e d t 表示被 c u r r t 扩展的t y p e :则 t = c u r r t u e x t e n d e d t ,m m 水,其中 舻= 劬i 朋劬丁八叫v m e 叼v “v 聊p 乙) e r , e e x t o d e d ) m 水的含义是:在当前考虑的t y p e 中并且也包含在它所扩展的任意一
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电信竞争对手分析工作措施计划
- 光伏硅料提纯工艺优化方案
- 交通运输安全问题整改清单及整改措施
- 水利工程配套设施建设方案
- 市政工程危大清单及安全措施
- 水景工程施工技术与养护方案
- 共享储能项目施工进度管理方案
- 金融工程风险保密措施
- 水利工程资金使用管理方案
- 虚拟仿真技术在手外科教学中的应用研究
- 《住房租赁条例》培训解读课件
- 中国邮政集团工作人员招聘考试笔试试题(含答案)
- 2025年高考语文全国一卷试题真题及答案详解(精校打印)
- 通过测试-失效测试-老化测试-三者有何区别
- 动漫人物欣赏课件
- 让主动问好成为一种习惯(优秀主题班会)
- DB15T 2412-2021 蒙餐 蒙式牛肉丁
- ACLS-PC-SA课前自我测试试题及答案
- OTN技术概述PPT课件
- 农业气象观测规范-土壤水分分册
- 交通运输安全常识
评论
0/150
提交评论