(计算机系统结构专业论文)构件软件测试及充分性的研究.pdf_第1页
(计算机系统结构专业论文)构件软件测试及充分性的研究.pdf_第2页
(计算机系统结构专业论文)构件软件测试及充分性的研究.pdf_第3页
(计算机系统结构专业论文)构件软件测试及充分性的研究.pdf_第4页
(计算机系统结构专业论文)构件软件测试及充分性的研究.pdf_第5页
已阅读5页,还剩48页未读 继续免费阅读

(计算机系统结构专业论文)构件软件测试及充分性的研究.pdf.pdf 免费下载

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

文档简介

独创性( 或创新性) 声明 本人声明所呈交的论文足我个人在导师指导下进仃的酬究j 作及i 双甜的刊f 究 成果。尽我所则,除了文t t ,特别加以标注和致测中所列的内容l :s , j , b ,沦义。 ,不包 含其他人已经发表或撰写过的研究成果:也不包含为获得西安电子科技人学或其 它教行f j l f s , j 的学位或证书而使用过的材利。与我一,同工作的同志埘本研究所做的 任何贡献均在论文中做了明确的说蹦并表示了c 身:j 意。 本人签名雒 n 期2 竺三彖旦! g 日 关于论文使用授权的说明 本人完全了解西安电子科技大学有关保留和使用学位呛文的规定,即:学校有 权保留送交论文的复印件,允许查阅和借阅论文;学校可以公靠论文的仝部或部 分内容,l 可以允i ”t 采取影印、缩印或j e 他复制手段保存沦文。( 保密的论文n 解:许 后遵i 此舰定) 导师签名 s 眇稻 r | 期翌垦互孙土日! _ 8 日 同;嘲j 翌j 量9 摘要 摘要 本论文主要在两方面进行:一是对构件软件测试技术进行了深入地研究,包括单元 测试、集成测试和回归测试:是研究了构件化软件系统的测试准则,并对测试数据选 择的充分性进行了分析。 论文首先综述了目前国内软件测试发展动态:接着介绍了构件软件的发展特点以及 由此带来的对软件测试的影响:提出了一种针对构件单元的b t 黑盒测试方法:介绍了 一种基于s a 的c h a m 模型描述和l t s 表示的集成测试方法;从缩小测试范围和减少测试 数据的角度提日 了一种构件软件回归测试方法:最后从集合论的角度给出了构件软件测 试充分性定义,对本文提出的方法进行了充分性研究。 关键词:软件测试软件构件软件体系结构测试充分性 c h a m a b s t r a c t a b s t r a c t t h i s p a p e r d i s c u s s e sm a i n l yt w oa s p e c t s :o n ei st od os o m ed e e pr e s e a r c ho i l c o m p o n e n t - b a s e ds o f t w a r et e s t i n gt e c h n o l o g y ,i n c l u d i n g u n i tt e s t i n g ,i n t e g r a t i o nt e s t i n g , a n dr e g r e s s i o nt e s t i n g ;t h eo t h e ri st od os o m er e s e a r c h0 1 1a d e q u a t ec r i t e r i o no fc o m p o n e n t s o f t w a r es y s t e m a n da n a l y s et h ea d e q u a c yo f t h et e s td a t a o f o u r t e c h n i q u e s f i r s t l y , w es u m m a r i z et h ed o m e s t i cs o f t w a r et e s t i n gt r e n d s l a t e r ,w ei n t r o d u c et h e d e v e l o p m e n tf e a t u r eo fc o m p o n e n ts o f t w a r ea n ds o m ed i f f i c u l t i e s i nc o m p o n e n ts o f t w a r e t e s t i n g a f t e rt h a t ,w ep u tf o r w a r db i tb l a c k b o xu n i tt e s t i n ga p p r o a c ha b o u tc o m p o n e n t s o f t w a r e ,i n t r o d u c ea ni n t e g r a t i o nt e s t i n ga p p r o a c hb a s e do nc h a mm o d e lo fs aa n dl t s , a n dt h e n ,p u tf o r w a r dan e wr e g r e s s i o ns o f t w a r et e s t i n gs t r a t e g yw h i c hl i g h t e n st h et e s t i n g w o r k l o a db yl i m i t t i n gt e s ts c o p ea n dr e d u c i n gt e s td a t a f i n a l l y ,f r o mt h ep o i n to fv i e wo fs e t t h e o r y ,w eg i v et h et e s ta d e q u a c yd e f i n i t i o no f c o m p o n e n ts o f t w a r et e s t i n g ,a n dt h a ts t u d yt h e a d e q u a c yo f t h ea p p r o a c h sa b o v e k e yw o r d s :s o f t a r et e s t i n g s o f t w a r ec o m p o n e n t s o f n v a r ea r c h i t e c t u r et e s t a d e q u a c y c h a m 第一章绪论 第一章绪论 1 1软件测试的概念与意义 信息技术的匕速发展,使软件产品应用到社会的各个领域,软件产品的质量自然成 为人们共同关注的焦点。不论软件的生产者还是软件的使用者,均生存在竞争的环境中, 软件开发商为了占有市场,必须把产品质量作为企业的重要目标之一,以免在激烈的竞 争中被淘汰。软件测试工作做得怎样,直接决定着软件产品质量的好坏。c m m ( 软件 能力成熟度模型) 专门开发了一个独立的k p a ( 关键处理领域) 来强调软件的评估和测 试。到目前为止,软件测试作为软件 j 程学科的一个重要分支,还远未成熟。不仅测试 的理论,而且现有的测试方法都需要进一步深入,以满足当前软件开发实践的需要。 1 构件开发生命周期模型 任何软件系统都有一个软件开发生命周期。图1 1 是软件开发生命周期的的v 模型。 它强调了客户与供货者之间的关系,还强调了软件开发过程中的各个测试阶段更明确 地表示了各个中间产品之间的关系,是一个比瀑柿模型更好的模型。 图1 1 软什 f 发生命周期的v 模型 c m m 提山了 种迭代式模型。它认为设计规格经三个迭代产生,第一个迭代定义 体系结构它是人工的还是自动的,是集中的还是分散的,是在线的还是批命令式的, 是直接文件存储还是关系数据库等等。第二个迭代町能继续推动设计,来鉴别所有的模 块和模块间的数据交换机制。第三个迭代则定义模块内部的伪代码。每个迭代都应当基 于适当的特性来进行评价。 软件测试的一个相对坚固的内涵范围必须包括项目在丌发生命周期每个阶段的 每一个交付产品,必须考虑每一个交付产品的每一个预期特性,包括每一个测试步骤。 构件软件测试及充分性的研究 软件测试是根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用 例( 即输入数据及其预期的输出结果) ,并利用这些测试用例去运行程序,以发现错误的 过程。 2 。软件测试的概念及目的 c m m 认为,测试是一种基于机器行为、对代码执行测试和确认测试的活动。测试 活动通常分为验证和确认( v e r i f i c a t i o n & v a l i d a t i o n ) ,验证是检查结果是否与需求规格说 明书一致,即“丁f 确地构造了系统吗”;确认是检查实际结果是否为客户所要求的,即 “构造的系统正确吗”。 i e e e ( 1 9 8 3 ) 标准定义了几个重要概念: i 测试:是选择适当的测试用例执行被测程序的过程,目的在于发现程序错误。 i i 调试:渗断程序的错误性质、出错位置并加以改正的过程。由编码人员承担。 i i i 失败:当个程序不能运行时称失败。失败是系统执行中出现的情况,源于代 码缺陷。 i v 错误:程序中的缺陷所产生的不正确结果称错误。 e w d i j k s t r a 指出:“测试只能证明程序有错( 有缺陷) ,不能保证程序无错”。因此, 能够发现程序缺陷的测试是成功的测试。当然,最理想的是进行程序正确性的完全证明, 遗憾的是除非是极小的程序,至今还没有实用的技术证明任意程序的正确性。为使程序 有效运行,测试与调试是唯一手段。 g r e n f o r dj m y e r s 认为软件测试的目的是:、软件测试是为了发现错误而执行程 序的过程:、测试是为了证明程序有错,而不是证明程序无错误。、一个成功的测 试是发现了至今未发现的错误的测试。这种观点可以提醒人们测试要以查找错误为中 心,而不是为了演示软件的正确功能。但是仪凭字面意思理解这一观点可能会产生误导, 认为发现错误是软件测试的唯一目的,查找不出错误的测试就是没有价值的,事实并非 如此。首先,测试并不仅仅是为了要找出错误。通过分析错误产生的原因和错误的分布 特征,可以帮助项目管理者发现当前所采用的软件过程的缺陷,以便改进。同时,这种 分析也能帮助我们设计出有针对性的检测方法,改善测试的有效性。其次,没有发现错 误的测试也是有价值的,完整的测试是评定测试质量的一种方法。详细而严谨的可靠性 增长模型可以证明这一点。例如b e yl i t t l e w o o d 发现一个经过测试而】e 常运行了n 小时 的系统有继续正常运行n 小时的概率。 3 静态测试和动态测试 静态测试的基本特征是在对软件进行分析、检查和测试时不实际运行被测试的程 序。用于对各种软件文档进行测试,是软件开发中十分有效的质量控制方法之一。在软 件开发的早期阶段,由于可运行的代码尚未产生,不可能进行动态测试,而这些阶段的 中间产品的质量直接关系到软件开发的成败与开销的大小。因此在这些阶段,静态测试 的作用尤为重要。主要有结构化走通、正式检查等静态测试方法。 第一章绪论 动态测试是一个周期长、开销大的软件开发活动,必须有组织、有计划地进行。是 软件质量控制的主要手段之一,尤其是对软件开发过程中较后阶段意义重大。所谓软件 动态测试,就是通过运行软件来检验软件的动态行为和运行结果的正确性。包括三个要 素:被测程序、测试用例、软件的需求和规约。根据在软件丌发过程所处的阶段及其作 用,动态测试可分为如下几类: 单元测试:是对软件中的基本组成单位进行测试,如个模块、一个过程等等。 它是软件动态测试的最基本的部分,也是晟重要的部分之一,其目的是检验软件基本组 成单位的】e 确性。单元测试以被测试单位的规约为基准。 集成测试:是在软件系统集成过程中所进行的测试,其主要目的是检查软件单位 之间的接口是否正确。它根据集成测试计划,一边将模块组合成越来越大的系统,一边 运行该系统,以分析所组成的系统是否正确,各组成部分是否合拍。 系统测试:是对已经集成好的软件进行彻底的测试,以验证软件系统的正确性和 性能等满足其规约所指定的要求。它将开发的软硬件和其他相关因素综合起来进行全面 的检验。 验收测试:旨在向软件的购买者展示该软件系统满足其用户的要求。它的测试用 例通常是系统测试的测试用例的子集。验收测试有软件系统的购买者代表在现场,这是 软件在投入使用之前的最后测试。 叫归测试:是在软件维护阶段,对软件进行修改之后进行的测试。其目的是检验 对软件进行的修改是否正确。修改的i r = 确性有两重含义,一是指所做的修改达到了预定 的目的,如错误被改i h 二是指不影响软件的其它功能的正确性。 按照选择或产生测试用例所根掘的信息来源,软件测试可分为如f 几种方法: ( 1 ) 以程序为基础的测试。即通过对程序的分析来产生或选择测试用例,以程序被执 行的程度来判断测试是否充分。 ( 2 ) 以需求和功能规约为基础的测试。即通过分析软件的需求和功能规约束选择和产 生测试用例,并根扼软件需求和功能规约中所规定的功能和性能是否都得到了充分的检 验来判断测试是否充分。 ( 3 ) 程序与需求相结合的测试。即综合考虑软件的需求和实现来选择和产生测试用 例,判断测试的充分性。这一途径早已为人们所公认为软件测试的必由之路,可以发扬 以程序为丛础的测试和以需求为基础的测试,避免两者的不足之处。 ( 4 ) 以界面为基础的测试。仅仅依靠软件及其运行环境之f 、日j 的界面来选择剌产生测试 用例,m 4 i 管软件的具体实现细节。 根据对被测软件的控制观察方式,软件测试方法分为三种:白盒测试、黑盒测试和 灰盒测试。程序和需求相结合的测试和以程序为基础的测试都需要了解程序的实现细 节,称为白盒测试。而以需求和以界面为基础的测试方法均无须了解软件的实现细节, 把软件看作是一个“黑盒”,因此称为黑盒测试。白盒测试的测试能力非常强,但是过 构什软件:则试及充分性的研宄 程过于复杂,对被测软件要求也很高。黑盒测试只关心被测软件的输入和输出,测试能 力虽然弱了一些,但是测试过程本身相对简单,对被测软件也无特殊要求。灰盒测试是 将白盒测试和黑盒测试结合起来形成的一种测试方法,吸收了两种方法的优点。 1 2 国内软件测试研究现状 软什测试研究范围很。泛。目前主要研究的方向有自动测试、面向刘象软件测试方 法、w e b 测试、构件测试、回归测试、测试充分性研究等。我国现阶段软件测试研究方 向则主要集中于面向对象软件测试、网络协议测试技术、测试充分性研究等方面。 1 面向对象软件测试 从8 0 年代中期开始,面向对象范型( o b j e c t o r i e n t e dp a r a d i g m ) ,包括面向对象程 序设计( o o p ) 、面向对象开发方法( o o m e t h o d s ) ,受到了学术界和工业界的广泛重视, 并取得了迅速发展。进入9 0 年代,o o 范型己普遍应用于大规模复杂系统的开发。但是, 到目前为止,研究人员的注意j 主要集中在面向对象分析( o o a ) 、面向对象设计 ( o o d ) 、而向对象程序设计语言( o o p l s ) 领域。一段时期内,各种o o 方法竞相涌 现。但是o o 软件测试技术的研究尚未受到应有的重视,目前o o 软件测试技术还有待 提高。 面向对象样序设计语言的基本特征是提供了数据抽象、继承和动态绑定等设施。这 些特征促进软件发展的同时也带来了些测试的问题。 ( 1 ) 信息隐藏对测试的影响 类的重要作用之一是信息隐藏。它对类中所封装的信息的存取进行控制,从而避免 类中有关实现细节的信息被错误地使用。而这样的细节性信息正是软件测试所不可忽略 的。由于面向对象的软件系统在运行时是由一组协调工作的对象组成,对象具有一定的 状悉,所以对面向对象的程序测试来说,对象的状态是必须要考虑的因素,测试应涉及 对象的初态、输入参数、输出参数、对象的终态。对象的行为是被动的,只在接收有关 消息后才被激活进行所请求的工作,并将结果返回给发送者。在工作过程中对象的状态 可能被修改,产生新的状态。面向对象软件测试的基本工作是创建对象,向对象发送一 系列消息然后检鱼结果对象的状态,看其是否处于正确的状态。但问题是对象的状态往 往是隐藏的,若类中未提供足够的存取函数来表明对象的实现方式和内部状态,则测试 者必须添加这样的函数。因此类的信息隐藏机制给测试带来困难。 ( 2 ) 封装和继承对测试的影响 在面向对象的程序中,由于继承的作用,一个函数可能被封装在多个类中,子类中 还可以对继承的特征进行重定义。但问题是,未重定义的继承特征是否还需要进行测试 昵? 重定义的特征需要重新测试是显然的,但应该如何测试重新定义的特征的? 测试充 分性是软件测试研究的一个重要问题。 参考文献1 3 3 1 提出了一种面向对象的测试技术,将o o 程序中类和类之间的关系分为 第一章绪论 3 种:继承,聚集和关联,并在此基础上提出了对象关系图( o b j e c tr e l a t i o ng r a p h ,o r g ) 的概念。在把o r g 作为o o 测试的参考模型的基础上,认为测试级别的划分应符合面 向对象设计思想( 即突出类作为独立基本构造单元的特点) 。应当把方法级和类级测试更 紧密地绑定在一起,作为一个测试级来进行测试。 2 网络协议测试技术 在计算机网络的发展历程中,协议一直处于核心地位。从a r p a n e t 发展到i n t e m e t , 其关键环节就是形成了国际标准化的协议。协议是计算机网络和分布式系统中各种通信 实体之l 、日j 相互交换信息所必须遵守的一组规则,就像是一种语法规则,是构建网络的基 石。1 9 8 4 年,i 訇际标准化组织i s o 提出了开放式系统互连i s o o s i 参考模型。1 9 8 3 年 1 月1 日,t c p i p 被宣布为i n t e m e t 上唯一正式的协议,为i n t e m e t 的发展铺平了道路。 网络通信协议研究最显著的成果是在2 0 世纪8 0 年代,将形式化技术和软件工程方法用 于协议研究,形成了一个崭新的学科协议工程学,它的研究范围包括:协议说明 ( p r o t o c o ls p e c i f i c a t i o n ) 、协议证实( p r o t o c o lv a l i d a t i o n ) 、协议验i t t ( p r o t o c o lv e r i f i c a t i o n ) 、 协议综合( p r o t o c o ls y n t h e s i s ) 、协议转换( p r o t o c o lc o n v e r s i o n ) 、协议性能分析( p r o t o c o l p e r f o r m a n c ea n a l y s i s ) 、协议自动实现( p r o t o c o la u t o m a t i ci m p l e m e n t a t i o n ) 私l 协议测试 ( p r o t o c o lt e s t i n g ) 。 协议测试研究领域的兴起源于对其必不可少的需求。目前的网络协议多是以自然语 言描述的文本,实现者对于协议文本的不同理解以及实现过程中的非形式化因素都会导 致不同的协议实现,有时其至是错误的协议实现。即便协议实现正确,也刁i 能保证4 i 同 的实现彼此之间能够准确无误地通信,而且同一协议的不同实现其性能也有差别。在这 种睛况下,需要。种有效的方法对协议实现进行评价,这就是“协议测试”。 伴随着计算机网络的普及和网络需求的增多,计算机网络协议越来越复杂庞大,协 议实现1 i 仅仪要求功能f 确完善、能够互通,而且要求具有良好的性能,因此协议的实 现和j t 发越来越复杂。为了保证质量协议测试是一个必需而且十分重要的手段。目前 的协议测试已经不仅仪是产品,r 发研制过程中一个简单的检测支持过程,而是发展成为 计算机刚络技术的一个重要分支。对协议测试技术的研究将直接影响到计算机网络技术 的进步和世界网络市场的竞争与发展。所以很多国家都投入了大量的人力物力从事协议 测试的研究工作。例如:英国的国家物理实验室n p l 、法国国家通信研究中心、德国国 家通信研究局g m d 、美国国家标准化研究局、美国新罕布什尔大学互操作研究实验室、 中国清华人学计算机科学与技术系的计算机网络与协议测试实验室等单位都在这个领 域投入了大量的研究力量。 协议测试足一种黑盒测试,它按照协议标准,通过控制观察被测协议实现的外部行 为对其进行评价。目前协议测试分成三个方面进行研究:一致性测试( c o n f o r m a n c e t e s t i n g ) 、互操作性测试( i n t e r o p e r a b i l i t yt e s t i n g ) 和性能测试( p e r f o r m a n c et e s t i n g ) 。一致性 测试主要测试协议实现是否严格遵循相应的协议描述:互操作性测试关注的是对于同一 构什软件测试及充分性的研究 个协议标准,不同协议实现之间的互连通问题。性能测试是用实验的方法来观测被测协 议实现的各种性能参数,如吞吐量和传输延迟等等,其结果往往与输入负载有关。在上 述三个方面,一致性测试开展最早,也形成了很多有价值的成果。1 9 9 1 年国际标准化组 织i s o 制订的国际标准i s 0 9 6 4 6 一“o s i 协议一致性测试的方法和框架”,用自然语言 描述了基于o s l 七层参考模型的协议测试过程、概念和方法。但是随着计算机网络技术 的不断发展,新的协议越来越复杂。1 9 9 5 年,i s o 推出了致性测试中的形式化方法” 国际标准,对协议一致性测试过程各个阶段使用的形式化方法进行了说明。但由于协议 一致性测试本身的复杂性,使得该标准一直停留在草案阶段。对于互操作测试的研究技 术基本上是从一致性测试继承过来的。由于对网络应用的需求急剧增长,网络性能已经 变得与功能同等重要了。协议实现性能测试的研究工作也正在进行之中。在进行大量的 测试实践的同时,理论研究也正在起步。 目前,国际协议测试研究领域已经取得了以下两点共识:第一,理顺了协议一致性 测试的过程。第二,将形式化技术引入了协议测试领域,力图用严格的数学语言清晰、 无二义性地研究协议测试的概念和方法。但是也发现这种方法存在着很多不足,其中最 明显的就是这些理论研究与实际应用之间还存在着巨大的差距。 清华大学计算机科学与技术系从1 9 8 9 年开始一直坚持在协议测试方面进行深入探 索与研究,从“八五”计划开始就得到了国家各部门的资助,承担了研制协议一致性测试 系统的任务,并研制成功了可以对o s i 七层参考模型中各层协议进行一致性测试的协议 一致性测试系统p c t s ( p r o t o c o lc o n f o r m a n c et e s t i n gs y s t e m ) 。“九五”期间,在对o s i 参 考模型的通信协议进行成功测试的基础上,研制开发协议集成测试系统p i t s ( p r o t o c o l i n t e g r a t e dt e s t i n gs y s t e m ) ,目标是在形式化理论的指导下,研制一个通用的测试平台, 任何协议只要是利用统一的测试表示法进行描述,都可以进行测试。 今天,协议测试面临着比以往更严峻的挑战。协议的发展是全方位的,不仅功能增 强增多,而且也从单一的通信协议发展到更复杂的路由协议。面对从i s o 参考模型各层 协议到t c p 1 p 系列协议,从x 2 5 、帧中继到a t m 协议乃至更复杂的路由协议( 如r i p 、 o s p f 、b g p 等) ,协议测试也必然要从单一的功能测试发展到可以进行多方位的测试, 既包括传统有限状态机可以描述的功能,电包括复杂结构的数据。所以目前在协议测试 领域中有很多问题是开放的、没有定论的,非常值得深入研究。 3 软件测试的充分性 一个成功的测试包括两个主要方面:一是软件在所有的( 或足够多的) 测试用例上是 正确的;二是测试用例是充分的,即软件在测试用例上的表现能够充分地反映软件的总 体表现。 软件测试的充分性是从软件在有限多个测试用例上的行为判断软件在所有输入数 据上的行为的逻辑基础。良好的软件测试充分性准则应该具有如下基本性质: ( i ) 空测试对任何软件都是不充分的。空测试用例集意味着软件未被测试。 第一章绪论 ( 2 ) 时任软件都存在有限的充分测试集合。因为测试必须在有限的时间内完成,所 以充分的测试集合必须是有限的。这“陆质称为有限性。 ( 3 ) 如果一个软件系统在一个测试用例集合上的测试是充分的,那么再多测一些数据 也应该是充分的。这一性质称为单调性。 ( 4 ) f f i j 使对软件所有成分都进行了允分的测试,也并不意味着整个软件的测试已经充 分了。这“r e 质称为反复合性。 ( 5 ) 即使刈一个软件系统整体的测试是充分的,也并不意味着软件系统中各个成分都 已经充分地得到了测试。这一性质称为反分解性。 ( 6 ) 软件测试的充分性应该与软件的需求和软件的实现都相关。 ( 7 ) 软件越复杂,需要测试的数据越多。这一性质称为复杂性。 ( 8 ) 测试得越多,进一步测试所能得到的充分性增长就越少。 南京大学对软件测试充分性进行了较深入的研究,主要进行了充分性公理、公理度 量以及逻辑基础和归纳解释等方面进行了探讨和研究,提出了一套基y - w e y u k e r 公理系 统的路径准则公理系统。同时,研究了多种测试充分性准则,并将这些准则的充分性进 行了分析和比较。 1 3 本文主要工作 在本论文中,作者主要提出或介绍了一套构件软件的单元测试、集成测试和回归测 试方法,闸述了构件软件测试的充分性准则,并对提h 的测试方法的充分性进行了研究, 最后进行了模拟软件的设计。具体如下: 第2 章在介绍了面向对象内连式单元测试( b i t ) 技术的基础上,提出了一种构什 软件的尊元测试万法。本市分析了构件软件的特点,介绍了b i t 软件测试方法,提出了 基j b i 测试方浊的构件单兀测试框架。这种测试方法采用黑盒测试,先对构件的属性、 方法有一个清楚的描述,然后对每一被测构件提供一个内连式的b i t 包,测试构件的属 性和方法。 第j 章介;hr 基于软件体系结构( s a ) 的构件软件集成测试方法。本章在分析了软 件体系结构和软件构件化的基础上,介绍软件体系结构的c h a m 描述,构造软件体系 结构的标签转移系统l t s ,选择适当的o b s 函数将l t s 抽象为a l t s ,寻找系统路径, 然后冉从每条a u f s 路径,借助s a 动态描述和恰当的图形工具的帮助,找出对应的 i j f s 完整路径,采用路径覆盖准则,产,测试数掘进行测试。本章在介绍方法之后,从 实例的肓j 度进行了分析。 第叫亨介绍构件软件的一种回归测试方法。回u 1 测试是在软件维护阶段,对软件修 改后进行的测试。目前大量的回归测试方法均采用不同测试策略来缩小测试数据集,以 减少测试工作量。本章则从缩小软件测试范围和减少测试数据集相结合的角度,研究构 件及构件之问的关系,提出m r t 同归测试和i 纠归切片测试相结合方法,减少测试工作 构件软件测试及充分性的研究 量。 第五章从集合论的角度介绍了构件软件测试的充分性准则及相关性质,针对构件软 件地特点,分析了软件测试充分性准则在构件测试上的应用。首先,给出了测试充分性 准则的定义及其意义;然后分析了传统软件测试准则的局限性,从集合论的角度提出了 c a d e q u a t e f o r - p 、c a d e q u a t e o n m 、c 。a d e q u a t e 准则及其使用范围;提出了软件测试充 分性准则在构件测试上的应用;对前二章测试方法数据生成的充分性进行了研究。 第六章设计仿真软件。分析了被测软件结构的基础上,基于b i t 测试思想进行了仿 真软件的设计与实现。 第二章构件软件单元测试方法 第二章构件软件单元测试方法 9 构件软件促进了软件的开发、提高了软件的质量,同时迫切需要有效的方法来进行 测试。i 妇f 构件的应用增加了软件的复杂度,因此独立开发的商用构件应更注重系统集 成之前的错误检测能力。本章在分析构件软件特点和介绍一种面向对象单元测试方法的 基础上,提出了内连式构件单元的黑盒测试方法。 2 1 构件软件发展及其特点 随着计算机制造业的发展的突飞猛进,实际上业内人士一直没有停止过对软件开发 思想的探索,只不过快速地对软件开发的需求掩盖了软件开发思想的进步。 软件的应用领域也发生了根本的变化,模式从单机模式、c s 模式一直到现在的网 络计算,特别足网络计算带领软件产业进入了一个新的时代,以电子商务为代表的技术 潮流j 二将大到企业汁算、4 , n 个人数字代理的各种应用,软件开发领域正面临着一些新 的课题,如复杂的分布环境、灵活的应用模式、广泛的包容性等,人们需要的是一种能 以“i n t e m e t 速度”开发软件的方法,传统的软件设计思想显然已远远不够。 诸如此类的问题的最佳方法是采用构件化和软件复用的技术进行软件开发。这需要 解决两办i l i l l 问题:其一是建立一种j 二程化的软件丌发方法,为软件丌发团队制定一个 标准的软件开发过程,从而使团队中的每个人都了解在什么时间、怎么样做以及做什么 事情;其是采取软件复用的方式,试想一下,如果每次软件开发都需要从头做起,从 低层软件丌始,那么软件丌发的速度就无从保证。 就是为了解决这一连串的问题,软件构件技术应运而生,并逐渐炙手可热。构件技 术与面向对象的发方法不同的是,面向对象的技术强调对个体的抽象,构件则更推广 了对象封装的内涵,侧重于复杂系统中组成部分的协调关系,强调实体在环境中的存在 形式。 从广义i :来说,构件有如卜的几个基本属性。 构件是可独立配置的单元,凼此构件必须自包容: 沟什强橱与环境和其他构件的分离,因此构件的实现是严格封装的,外界没机 会或没必要知道构件内部的实现细节( 注:这点对软件蓝领是最主要的) ; 构件口f 以在适当的环境中被复台使用,因此构件需要提供清楚的接 规范,可 以与环境交互: 构件小应当是持续的,即构件没有个体特有的属竹,理解为构件不应当与自身 副本区别。 从以上阴个属性可以看出,构件沿袭了对象的封装特性,但同时并1 i 局限在一个对 象,其内部可以封装一个或多个类、原型对象甚至过程,结构是灵活的。构件突出了自 包容和被包容的特性,这就是在软件工厂的软件开发生产线上作为零件的必要特征。 构件软件测试及充分性的研究 从广义上说,软件构件是一种定义良好的独立、可重用的二进制代码,包括功能模 块、被封装的对象类、软件框架和软件系统模型等。 本世纪6 0 年代术到8 0 年代初,结构化的模块式软件开发思想占主导地位,当时的 构件的含义是指一些定义良好的方法包或功能模块。 8 0 年代起,面向对象的软件丌发思想迅速发展起来,这时的软件构件的含义就是类 库。类虽然提供了封装性、多态性和继承性,但需要依赖于具体的编程语言,耦合度高, 且需要用户对类库的结构和宿主语言有较深入的了解,因此,不能完全达到软件重用的 可移植性和互操作性要求。 9 0 年代后,构件的内涵进一步加强,聚合性、独立性和重用性进一步提高。目前, 基于对象的构件软件体系结构中的构件是指可方便地插入到语言、工具、操作系统、网 络系统中的二进制代码和数据。 这种软件构件可以看作是一种软件集成电路元件,具有以下特点: ( 1 ) 软件i c 没有硬件i c 的天然聚合性,构成粒度大小自由,便于扩展; ( 2 ) 通过规定一个统一的_ 进制标准,建立起机构之间的智能互操作机制和语言独立 性; ( 3 ) 外界仅通过接口访问构件; ( 4 ) 多侧面性,即构件表达的语义层次高,可以从不同侧面进行连接,外部特性不唯 一; ( 5 ) 支持封装、继承、多态性。 构件软件促进软件开发的同时,也为软件测试带来困难: 构件的重用技术使得软件一旦开发可多次调用,但是调用构件的上下文不同, 每一次调用都得进行测试。 构件调用之时需要修改代码以满足新的环境。每修改一次,就必须进行一次测 试。 如果构件源码不可得,则测试非常困难而且无法修改。 2 2 基于类的内连式单元测试方法 s t e p h e nh e d w a r d s 针对面向对象的类,提出了一种内连式b i t ( b u i l t i n t e s t ) 黑盒 测试的方法【2 ”,用以测试类的属性和方法。黑盒测试是一类重要的测试方法,它根据 规格说明设计测试用例,进行功能测试。作者在其提出的方法中,主要采用以下步骤来 进行面向对象的测试: 1 描述类的属性和方法。 作者应用模块描述语言r e s o l v e 描述单向表类,具体描述如下: 单向表的用户接l : t e m p l a t e 第二章构件软件单元测试方法 ! c l a s s o n ew a ) l i s t p u b l i c : o n e w a y l i s t ( ) ; v i r t u a l o n e _ w a y l i s t o ; v i r t u a lv o i dm o v e _ t o s t a r t ( i t e m & x ) 2 0 ; v i r t u a lv o i dm o v c t 0f i n i s h ( i t e m & x ) 2 0 ; v i r t u a lv o i da d v a n c e ( i t e m & x 1 二0 : v i r t u a lv o i da d d r i g h t ( i t e m & x ) 2 0 ; 单向表的模块描述: c o n c e p to n e w a y _ l i s t c o n l e x t g i o b a lc o n t e x t f a c i l i b , s t a n d a r d b o o l e a n f a c i l i t y p a r a m e t r i c c o n t e x t t y p e i t e m i n t e r f a e e b p el i s ti sm o d e l e db y ( l e f t :s t r i n go fm a t h i l e m , r i g h l :s t r i n go f m a t h i t e n l 】 ) e x a m p l a rs i n i t i a i i z a t i o n e n s u r e ss - ( e m p t y s t r i n g e m p t y _ s t r i n g ) o p r a t i o nm o v e t o s t a r t ( a l t e r ss :l i s t ) e n s u r e s s = ( e m p t y _ s t r i n g ,# s l e f t ,e m p t y s t r i n g ) o p r a t i o na d d r i g h t ( a l t e r ss :l i s tc o n s o l n e sx :i t e m ) e n s u r e s s = t # sl e f t + # s r i g h t ) e n do n e w a y l i s t 诅: :述模块描述语言。p ,单向表的每个操作根掘其数学模型来描述,h a s h 符号肆 用以指参数的输入值而不足输出值表的数学模型。 2 陶筑b i t 包类 作者根掘被测基本类和其规约描述,构造b i t 包类。具体包申明和包方法表示如下: b i t 包的申明: 兰 塑生墼堡型堕墨查坌堡塑竺至一 t e m p l a t e c l a s so w l b i t w r a p p e r : p u b l i co n e w a y _ l i s t p u b l j c : o w l b i t w a p p e r ( ) ; v i r t u a l o w l b i t _ w a p p e r o ; :| v i r t u a lv o i dr e m o v e r i g h t ( i t e m & x ) ; j i p r i v a t e : o n e w a y l i s t _ b a s e u u t ; ) ; b i t 包的调用方法: t e m p a t e c i a s ai t e m ,c l a s so n e w a y l i s t _ b e v o i do w l b i tw r a p p e r r e m o v e d r i g h t o t e m & x ) f ,存谙抽雾值信息 m o d a l o fl i s ti n c o m i n gs e l f , i n c o m i n g _ s e l f ; m o d a l 一0 f i t e mo u t g o k t g _ _ x ,o u t g o i n g _ x ; i j 魄玛硷谁m t 内部变最禹性j 在i n c o m i n g _ s e l f 中设计u m 状态的抽象观灏将x 甑毽蒂a i n c o m i n g ? 捡测船o m i n gs e u 幽的抽象变萤属性检渤输a 变量的凭次条徉 u u tr e m o v e r i g h t ( x ) ;,凋j j 包 “哟玛。硷测。雌内部变量镬性? 在o u t c o m i n g _ s e l f 中发话u u t 状态拍抽象蕊灞,鹅x 拍照蒂a 。u t c t i n g j 捡铡o u t c o m i n gs e u 融的抽象变量属性。樘瓤执行后翰a 、翰出变量。 , 3 将类的方法和属性作为节点,选用语句覆盖充分性准则( 结构性测试准则的一种 1 1 ,构造测试用例柬测试b i t 包类,从而实现包内部检测和外部调用检测的功能。 类的b ir 测试方法具体参见参考文献。 2 3 构件软件内连式单元测试( b i t ) 在构件的单元测试中,我们对上面类的测试方法进行改进,得到构件的b i t 测试方 第一二章构件软件单元测试方法 法。首先,d l 于i s i , f b 每调用一次就得测试一次的特点,我们可以根据不同的调用环境选 择4 i 同的测试数据测试b i t 包:当不同应用环境调用构件、需要对构件进行修改时,我 们将b i t 包进行相应的修改;其次,山于构件本身源码可能不可得,b i t 测试方法根据 其规约描述进行功能测试:此外,一般来说,一个软件构件可以是一个简单的单一类或 模块,也可以足一个复杂的j a v a b e a n 或者c o m 对象,由类测试方法改进到构件方法, 具有可行性。 上节我们知道,构件具有多侧面性,即构件表达的语义层次高,可以从不同侧面进 行连接,外部特性不唯一;因此构件提供了清楚的规约说明,即对每个构件的属性、方 法和操作有清楚的描述,因此我们可以针对正式的详细说明界面,进行模块描述语言描 述,以浣明构件内部的属性、操作,以及和外界的信息传递。这一描述将在产生测试数 据和b i t 包检测测试结果时用到。构件的模块描述如下: 构件模块申明: c l a s sc o m p o n e n t n a m e p u b l i c : f f 伪码。描述枷伴内部谴国状态7 j 法、函数: 描述讣部谪强接只:、 构们模块描述: c o n c e p tc o m p o n e n t n a m e c o i l t e x t g i o b a lc o n t e x t t ,鞠付全嗣变釜 p a r a m e t r i cc o n t e x t :f 件参数申明 i n t e r f a c e ? ? 掏件模塑定义 ) e x a m p l a rs t + ,实铆化摸母 i n i t i a l i z a t i o n ,镁擎幸j 始他 o p r a t i o nc o m p o n e n t o p r a t i o n ( a l t e r ss :1 一 构件由、外部力法描述 e n dc o m p o n e n t n a m e 我们还为每一待测构件提供一个简单的“钩状”界面( 没有运行开销) ,图2 1 显示 了挂钩和构件的关系,通过钩状界面与b i t 访问进行交互。带有钩状界面的构件提供了 构件软什测试及充分性的研究 一系列自我检测和自我测试的特性,用来包基础构件。 b i t 访问 “挂钩” 用户接口 儿 图2 1b i t 访问构件的“挂钩” 在构造挂钩之后,为每一个被测构件构造b i t 包。本方法对b i t 包的设计有较严格 的要求。住设计过程中,b i t 包必须满足如下特点: b i t 包对_ h j 户和构件代码来说都是透明的。 b i t 包可以在一i 改变客户代码的前提下插入或移植,并且事先无需预处理,应用 于目前流行的应用环境中。 b i t 包移去时,基本构件无需额外运行代价。 能检测到不论是外部还是内部的构件行为。 检测代码完全脱离初始构件。 在传播之前检测到隐患的存在,在错误报告中记录下来。 本方法在正式规格化的构件中能很好的运行。 对用户来说,本方法可以在不解丌构件封装的情况下,观测构件的内部状态。 b i t 测试方法的测试结构图如图2 2 所示。图中显示了由两层b i t 包包裹的构件。 里层是描述层,直接安全的访问构件内部,执行内部一致性检测,将内部状态信息转化 成构件抽象状态的易编程模型。外层是抽象层,主要实现模型的应用,检测用户对构件 应用时的支持。检测构件在申明时保持不变的特性,在某种程度上对为达到自我检测目 的操作结果进行双向检测。用户代码对构件的访问因此而方便自如。 图2 2 还描述了b 1 t 测试框架。它主要由b i t 包生成子系统、测试驱动子系统和测 试数据,l 成了系统等几部分组成,下面我们具体讨论这几个了系统的实现。 b i t 包生成子系统。根据模块描述语占和构件描述来设计b i t 包接口,原则是独立 于任何详细的规约或执行语言,并具有可扩展性( 可扩展到其他语言) 。b i r 包

温馨提示

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

评论

0/150

提交评论