(计算机应用技术专业论文)基于测试路径集运算的类回归测试策略研究.pdf_第1页
(计算机应用技术专业论文)基于测试路径集运算的类回归测试策略研究.pdf_第2页
(计算机应用技术专业论文)基于测试路径集运算的类回归测试策略研究.pdf_第3页
(计算机应用技术专业论文)基于测试路径集运算的类回归测试策略研究.pdf_第4页
(计算机应用技术专业论文)基于测试路径集运算的类回归测试策略研究.pdf_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

摘要 摘要 同归测试的主要目标是在程序修改后,通过在原有测试用例集中选取部分或全部可用用例,只对 修改的部分重新测试。这样既可提高测试效率,又能达到与完全测试相同的测试覆盖。回归测试在整 个软件测试过程中占有很人的比重,通过选用正确的回归测试策略来改进回归测试的效率和有效性是 非常有意义的。 类是面向对象软件的核心,研究面向对象软件的测试和回归测试,主要就是研究类的测试和回归 测试。本文从基于状态的类测试策略出发,提出了一种基于测试路径集运算的类同归测试策略。该策 略将同归测试作为一个连续的过程,以测试路径为运算对象,对已修改的类重新生成测试集,通过与 原测试集进行简单的集合运算对测试路径进行分类,正确高效地完成回归测试用例库的维护,通过区 分对应测试路径的类别从回归测试用例库中选取可用于回归测试的测试用例。 本文提出的基于测试路径集运算的回归测试策略从以下几个方面改善了回归测试的效率和有效 性: 1 )低运算复杂度的测试路径生成算法: 2 )高效率的模块差异算法; 3 )简便的回归测试用例库维护方法; 铆支持自动测试; 本文在研究基于测试路径集运算的回归测试策略的基础上还给出了一整套该回归测试策略的实现 方法,对核心算法作了详细分析和介绍。实验和研究表明,该策略能充分利用历史测试数据,降低运 算复杂度,提高回归测试的效率,具有一定的工程应用参考价值。 关键词:测试路径集;基于状态;类;回归测试 东南大学硕士学位论文 a b s t r a c t o n eo ft h ek e yi d e a so f r e g r e s s i o nt e s t i n gi sp e r f o r m i n gar e d u c e dt e s tb ys e l e c t i n ga l lo rp a r t so fa v a i l a b l e t e s tc a s e sf r o mp r e v i o u st es t - c a s es e ta f t e rt h ep r o g r a mh a v i n gb e e nu p d a t e da n do n l yt h o s ep a r t sm o d i f i e d n e e dt ob et e s t e d t h u s ,i tc a nn o to n l yi m p r o v et h et e s t i n ge f f i c i e n c yb u ta l s og e tt h es a m ec o v e r i n gs 0 1 a r c t e s t i n gf u n c t i o na sae n t i r et e s t i n g r e g r e s s i o nt e s t i n gp l a y sa l li m p o r t a n tr o l ei ns o f t w a r em a i n t e n a n c e ,s oi ti s v e r yv a l u a b l et oi m p r o v e 也ee 缳c i e n c ya n df u n c t i o n a l i t yo ft e s td u r i n gac l a s s - r e g r e s s i o nt e s t i n gb y d e v e l o p i n ga na p p r o p r i a t ec l a s s - r e g r e s s i o nt e s t m gs t r a t e g y t h ec l a s si st h em o s ti m p o r t a n tp a r ti n o b j e c to r i e n t e dp r o g r a m m i m g ,s ow em a i n l yd e v e l o p c l a s s - r e g r e s s i o nt e s t i n gs t r a t e g yw h e nr e s e a r c ht h er e g r e s s i o nt e s to fo b j e c to r i e n t e dp r o g r a m m i m g i nt h i s p a p e r , ac l a s s - r e g r e s s i o nt e s t i n gs t r a t e g yb a s e do no p e r a t i n gt h es e to ft e s t i n gp a t hw a sp r o p o s e d ,w h i c hi s d e r i v e df r o mt h et e s t i n gs t r a t e g yf o u n d e do ns t a t e s 。t h i ss t r a t e g y ,w h i c hd e a l sw i t ht e s t i n gp a t h ,t a k e s r e g r e s s i v et e s t i n ga sac o n t i n u o u sp r o c e s s , g e n e r a t i n gt e s t i n gs e tf o rt h ec l a s s e sm o d i f i e do v e ra g a i n t e s t i n g c a g e so ft h er e g r e s s i v et e s t i n ga r es e l e c t e da n dc l a s s i f i e db ys i m p l es e to p e r a t i o n sw i t ht h eo r i g i n a lt e s t i n g c a s e s ,s i m u l t a n e i t y ,t h et e s t - c a s es e ti su p d a t e d n l ec l a s s - r e g r e s s i o f ft e s t i n gs t r a t e g yb a s e do no p e r a t i n gt h es e to ft e s t i n gp a t hp r o p o s e di nt h i sp a p e rc a n i m p r o v et h ee f f i c i e n c ya n de f f e c t i v e n e s sf r o mt h ef o l l o w i n ga s p e c t s : 1 ) l o w e r c o m p u t i n gc o m p l e x i t yo f t h et e s tp a t hg e n e r a t i o na l g o r i t h m : 2 ) a h i 曲l ye f f i c i e n ta l g o r i t h mt og e tt h ed i f f e r e n c eb e t w e e nm o d u l a r s ; 3 )s i m p l em e t h o d st om a i n t a i nt h er e g r e s s i o nt e s tc a s e1 i b r a r y : 4 ) t os u p p o r ta u t o m a t i ct e s t i nt h i sp a p e r ,w ea l s or e s e a r c h e dh o wt or e a l i z et h ec l a s s - r e g r e s s i o nt e s t i n gs t r a t e g yb a s e do no p e r a t i o n g t h es e to ft e s t i n gp a t ha n dt h ed e t a i l e da n a l y s i so ft h ec o r ea l g o r i t h ma n d p r e s e n t a t i o nw e r em a d e t h ee x p e r i m e n t sa n dr e s e a r c h sh a v es h o w nt h a tt h i ss t r a t e g yc o u l dl o w e rt h ec o m p u t i n gc o m p l e x i t ya n d n n p r o v et h er e g r e s s i v et e s t i n ge f f i c i e n c yb e c a u s eo fu s i n gh i s t o r i c a lt e s t i n gd a t aa b u n d a n t l ya n dr e d u c i n gt h e s i z eo f w h a tm u s tb er e t e s t e d i tc a nb ev a l u a b l ei nt h ee n g i n e e r i n ga p p l i c a t i o n k e yw o r d s :p a t hs e t ;b a s e do ns t a t e :c l a s s :r e g r e s s i v et e s t i n g i i 东南大学学位论文独创性声明 本人声明所呈交的学位论文是我个人在导师指导下进行的研究工作及取得的研究成果。 尽我所知,除了文中特别加以标注和致谢的地方外,论文中不包含其他人已经发表或撰写过 的研究成果,也不包含为获得东南大学或其它教育机构的学位或证书而使用过的材料。与我 一同工作的同志对本研究所做的任何贡献均已在论文中作了明确的说明并表示了谢意。 研究生签名:攀日期: 东南大学学位论文使用授权声明 东南大学、中国科学技术信息研究所、国家图书馆有权保留本人所送交学位论文的复印 件和电子文档,可以采用影印、缩印或其他复制手段保存论文。本人电子文档的内容和纸质 论文的内容相一致。除在保密期内的保密论文外,允许论文被查阅和借阅,可以公布( 包括 以电子信息形式刊登) 论文的全部内容或中、英文摘要等部分内容。论文的公布( 包括以电 子信息形式刊登) 授权东南大学研究生院办理。 研究生签名:1 幽师签名:桦日期: r 一 第一章引言 1 1 研究的背景及意义 第一章引言 在软件生命周期中的任何一个阶段,只要软件发生了改变,就可能带来问题。软件的改变可能是源 于发现了错误并做了修改,也有可能是因为在集成或维护阶段加入了新的模块。当软件中所含错误被发 现时,如果错误跟踪与管理系统不够完善,就可能会遗漏对这些错误的修改;开发者对错误理解不够透 彻,可能导致所做的修改只修正了错误的外在表现,而没有修复错误本身;修改还有可能产生副作用从 而导致软件未被修改的部分产生新的问题,使本来工作正常的功能产生错误。因此,每当软件发生变化 时,我们就必须重新测试现有的功能,以便确定修改是否达到了预期的目的,检查修改是否损害了原有 的正常功能。同时,还需要补充新的测试用例来测试新的或被修改了的功能。为了验证修改的正确性及 其影响就需要进行回归测试。 回归测试是对修改后的程序进行重新测试的过程。回归测试的主要目标是通过在原有测试用例集中 选取部分或全部可用用例,只对修改的部分重新测试。这样既可提高测试效率,又能达到与完全测试相 同的测试覆盖。同归测试在整个软件测试过程中占有很大的比重,通过选用正确的回归测试策略来改进 回归测试的效率和有效性是非常有意义的。 面向对象技术改变了程序的设计风格,影响了软件开发过程。面向对象技术引入类和对象的概念 它们具有数据抽象、封装、继承及多态等特点,能够改善代码的重用性、可维护性,增加软件开发的灵 活性和可扩充性,提高了软件开发速度和质量。但它同时也给软件测试带来困难,面向对象技术在软件 工程中的推广使用,使得传统的测试技术和方法受到了极大的冲击。其封装性、多态性等特征给软件测 试提出了新的要求,传统的测试技术已经无法有效地对面向对象程序进行测试,面向对象软件测试的策 略和方法都需要进行相应的变革或更新。 本文主要研究面向对象软件回归测试策略。 1 2 国内外研究现状 类是面向对象软件的核心,研究面向对象软件的测试和回归测试,主要就是研究类的测试和回归测 试。进行类的回归测试,关键要解决好两个方面的问题:一是基于类的差异分析方法f 2 】f 引f 4 ,也是当前 研究的热点之一。该方法的特点是当一个模块发生了修改,通过对修改前后的模块进行比较,得出其中 受影响和未受影响的部分,据此从原测试用例集中取出可用用例进行同归测试;另一个是最新测试用例 库的维护,这是以后进行回归测试的基础,必须保证其正确性。回归测试需要时间、经费和人力来计划、 实旌和管理。为了尽可能有效率和有效力地进行回归测试,需要对测试用例库进行维护并依据定的策 略选择相应的同归测试包。 目前已有不少有关面向对象软件回归测试方面的研究,如r o t h e r m e l 、h a r r o l d 、d e d h i a 提出了面向 c - 忖程序的回归测试选择算法【2 j ,w h i t e 和a b d u l l a h 提出了f i r c w a l l 算法【3 】;r o t h e r m e l 、h a r r o l d 提出了面 向j a v a 程序的回归测试选择算法1 4 j 。这些研究大多阐述了有关面向对象软件回归测试的理论,也设计了 多种面向对象软件的回归测试策略,这些策略有以下几个共同点: 1 ) 模块差异分析算法基本采用各类图形模型进行比较,主要图形模型有成员依赖图f 5 】、相互作用图 f 6 j 、状态转换图【7 1 等。模块差异算法有u m l d i f l 2 1 4 1 、s i d i f f 3 1 等,都是采用通过图形比较的方法得到结 果,所以具有较高的时间复杂度,超过o ( n 3 ) 。 东南大学硕上学位论文 2 ) 判断过时测试用例和生成新增测试用例时仍然要将发生变动的部分作为总的模型的一部分进行 操作,不能脱离原模型进行运算,实现较为繁琐。 3 ) 最新测试用例库是在原测试用例库的基础上生成的,易发生错误并造成总的测试用例库的偏差, 影响后续回归测试的正确性。 这些回归测试选择算法具有一定的用例选择精度,但偏重于理论层面,没有较强的可操作性,究其 原因,主要是因为这些算法都依赖于各种类型图形的比较和运算,从遍历程序代码入手形成体现模型或 语句之间相互依赖关系的图形,通过图形运算来获得模块或语句之间的关系,判断是否发生修改,这种 基于图形模型的运算是很困难的。所以依以上策略进行回归测试则存在理论上正确但实际中实现困难、 效率低、易发生错误从而影响后续测试的问题。 目前在实际庶用中一般可使用人工管理的方式从前测试用例集中选择一个子集进行回归测试,自动 化的同归测试多是使用自动化的捕获同放工具【8 j 【9 1 。捕获回放测试工具记录实现应用功能时用户交互活 动中的击键动作,这些击键作为测试程序开发的一部分进行记录,然后作为测试执行的一部分进行回放。 这种方法使得用户能够捕获到某次测试时的测试用例,保存在计算机中,以后就可以从计算机中取出进 行同放和比较。这种捕获回放方式的回归测试方法能避免复杂的图形运算并将曾经的测试用例应用于后 续测试,但这种类似于录音机的方式非常原始、机械,最大的缺陷是在最基本的脚本语言代码中数值是 固定的,无法有效自动实现对原测试用例的选择和维护,是不得已的权宜之计。 1 3 本文研究的主要内容 本文以国家8 6 3 项目“基于维护和演化的软件质量保障关键技术研究( 2 0 0 7 a a 0 1 2 1 4 1 ) ”为背景,研 究面向对象软件回归测试的相关问题,主要内容有以下几点: 1 )模块的著异分析。主要研究新的类差异分析算法。 2 )测试用例库的维护。主要研究新的测试用例库维护算法。 3 )研究一种新的类回归测试策略。主要是提出一种基于测试路径集运算的类回归测试策略,该算 法将解决前述同归测试策略的三个问题,并以实用可行的步骤,正确、高效地完成类的回归测 试,且具有很强的可操作性。 4 )通过实验分析证明本文所提算法的正确性。 1 4 论文的组织结构 本文共分为七章,具体章节安排如下: 引言,介绍了论文的研究背景、论文的主要工作及论文结构。 第二章面向对象软件的测试,介绍了面向对象技术特有的封装、继承和多态性的特点,分析这些特 点对面向对象软件的测试产生的影响,并介绍了几种常用的面向对象软件的测试方法。 第三章基于状态的类测试策略,在介绍了基于状态的测试技术和f r e e 模型的基础上,给出了基于 测试路径集运算的回归测试策略中的一个核心算法一一类测试路径集生成算法,该算法能生成类的全部 测试路径并能将时间复杂度控制在o ( n 3 ) 。 第四章基于测试路径集运算的回归测试策略,首先给出了测试路径集运算的方法和意义,在此基础 上给出了基于测试路径集运算的模块差异分析算法和测试用例库维护算法,两者形成了一个完整的基于 测试路径集运算的回归测试策略。 2 第一章引言 第五章基于测试路径集运算的回归测试策略的实现,从f r e e 模型维护、测试路径集生成算法的实 现、模块差异分析算法的实现、回归测试用例库维护算法的实现、回归测试用例生成等几个环节给出了 一个针对面向对象软件的“基于测试路径集运算的回归测试策略”的具体实现方法。 第六章实验和分析,通过实验和一组数据对第四章实现的系统进行测试,给出实验结果和分析,给 出实验系统的具体运行情况,并从复杂性、正确性和可行性方面对基于测试路径集运算的回归测试策略 进行分析。 第七章总结与展望,对本文的工作进行了总结并提出下一步工作的展望。 3 东南大学硕上学位论文 第二章面向对象软件的测试 2 1 面向对象软件的特点 面向对象技术本身不能保证软件产品的正确性。虽然面向对象程序设计可以得到一个较好的系统 体系结构,面向对象编程语言也能加强代码的规范化,但软件毕竟是人工编制的产品,编程人员的思 维局限或对软件规格说明的理解错误等都会导致软件产品的错误,面向对象软件系统仍然需要测试。 面向对象软件具有以下几个特点【l o 】: 1 ) 封装性 面向对象软件的一个重要特征就是封装性,类是组成面向对象软件系统的基本单元,把数据和对 数据操作的方法封装在一起形成类。 在面向对象技术中,类具有清楚的边界,对象私有数据、内部程序( 成员函数) 细节都被限定在这 个边界内;类也具有明确的接口,这个接口描述对象和其它对象之间的相互作用、请求和响应,即消 息;对象( 类的实例) 内部的实现细节受封装壳保护,其它对象不能直接修改对象所拥有的数据和代 码。 类的封装限制了对象属性对外的透明性和外界对它的操作权限,这在一定程度上避免了不合理的 操作并能有效地防止错误的扩散,从而改善和提高了软件的可靠性。封装是一种信息隐蔽技术,用户 只能见到对象封装界面上的信息,对象内部对用户是隐蔽的,其目的在于将对象的使用者与设计者分 开,使用者不必了解对象行为的具体实现,只需用设计者提供的消息来访问该对象。 2 1 继承性 继承是面向对象技术描述类之间相似性的一个重要机制。在现实世界中大量的实体都存在一定程 度的相似性,人们总是希望能够最人程度地利用种种相似性。在定义和管理类时,可以通过利用这种 相似性来简化工作并重用以前的工作。面向对象软件技术利用继承来表达这种相似性,可以利用继承 来管理类,同时也使得在定义一个与先前己经定义的类相似的类时能简化类的定义工作。 继承也刻画了类的一般性和特殊性 i h ,被继承的类称为父类,继承的类称为子类,子类自动拥有 父类的全部属性和方法。继承机制清晰地体现了现实世界的结构关系。表达了对象类之间所具有的共同 性和差异性,使得类的描述具有了层次结构,处于同一层次结构中的类共享项层类所定义的属性和操 作。继承机制使类具有继承和被继承的能力,也就是具有重用和被重用的能力。 3 ) 多态性 多态性是指对象的某个行为具有多种形态的特性。行为的多种形态封装在对象内部,外界并不知 道。个行为的多种形态从外界看来具有相同的行为名称( 也即相同的消息名) ,因此外界看到的只是 一种行为。具体应该执行哪种形态由对象自己根据接收到消息里的相关参数决定。多态性实际上是指 用一个名字定义不同的函数,这函数执行不同但义类似的操作,从而实现“一个接口,多种方法”【嘲。 多态性的实现与静态联编、动态联编有关。静态联编支持的多态性称为编译时的多态性,也称静态多 态性,它是通过函数重载和运算符重载实现的。动态联编支持的多态性称为运行时的多态性,也称动 态多态性,它是通过继承和虚函数实现的。 4 第二章面向对象软件的测试 2 2 面向对象技术对测试的影响 面向对象技术所独有的多态性、继承性、封装性等特点,使得传统的面过过程的软件测试理论对 面向对象技术开发的软件不再完全适用【l 引。下面我们针对面向对象的这些的特点对测试的影响进行讨 论。 1 ) 封装性对测试的影响 封装是将类和对象的接口和实现分离,屏蔽类和对象的内部实现细节,封装大多数的情况下是通 过信息隐蔽实现的。信息隐蔽是指仅仅显示类和对象的外部使用者所需的属性和方法,而将一些无关 的信息隐蔽起来。不管是在设计阶段还是以后的维护阶段,类和对象暴露在外面的信息越多,发生错 误的可能性就越大,程序设计者需要考虑的事情就越多。通过封装和信息隐蔽,类和对象的使用者就 无法随便读取和修改类和对象的内部信息,可在很大程度上防止错误的发生,提高程序的可维护性。 但这种特点会对测试造成一定的困难,由于封装和信息隐蔽,我们无法直接考察对象的内部实现,从 而无法确认操作的正确性。通常我们只有在类和对象上添加一个成员函数,该函数用于读取( 而不是修 改) 对象的状态信息,为测试人员提供对象的一些隐蔽信息,考察对象的状态变化的正确性,即在测试 点加入探针。 2 ) 继承性对测试的影响 继承性是面向对象软件系统的主要特征,这在一定程度上实现了软件代码的重用,允许派生类继 承一个或多个类的属性和操作,派生类可以修改、删除或增加属性和操作。但我们不能因为派生类是 从基类继承而来,就认为只要基类经过了测试,从其派生出来的类的那些继承属性和操作就不再要测 试了。事实上,虽然基类经过了测试,其派生类中继承的属性由于上下文的不同依然需要重新测试, 但可以根据己经测试过的基类的一些情况来测试派生类,即增量测试【l4 】,并不需要重新测试所有继承 的属性,我们可以先判别出需要重新测试的属性,即最小化不同于父类的属性行为集。 继承有严格继承和非严格继承之分【l 习。 若继承为严格继承,即派生类与基类的关系是一般与特殊的关系,派生类继承了基类的所有属性 和操作,并且派生类还增加了一些特殊的属性或操作。在这种情况下,基类的所有测试用例仍然可以 用来测试派生类,但是还要增加一些新的测试用例来测试新加的特征以及它是否会对原来的特征产生 影响。 若继承为非严格继承,即基类中的一些属性操作在派生类中没有或者己经改名,或一个派生类可 以有多个基类,或派生类中可以有与基类中同名的函数,或一个派生类多次继承于同一个基类。这些 特点都增加了测试的难度,需要测试人员做更多的分析来决定祖先类、父类和子孙类之间如何进行测 试,以排除其中可能会产生的错误。 3 ) 多态性和动态绑定对测试的影响 多态性是面向对象程序设计技术的关键概念之一。多态性概念是用来描述过程的,利用多态性可 以用同一个函数名访问一个函数的不同实现。多态性是指不同的类的对象对同一消息做出不同的响应。 多态性分为编译时多态性和运行时多态性。编译时多态性是指在编译器对源程序进行编译时就可以确 定所调用的是哪一个函数,编译时多态性通过重载( 函数重载和运算符重载) 来实现,在这种情况下, 要在原有的测试分析和基础上扩大测试用例中输入数据的类型的考虑。运行时多态性是指在程序运行 过程中根据具体情况来确定调用的是哪一个幽数,也就是动态绑定,运行时多态性通过继承和虚函数 来实现,对于这种情况,要进行动态测试,考虑每一种可能的调用。这种多态性的特点给面向对象程 序的测试增加了难度。 5 东南大学硕士学位论文 2 3 面向对象软件的测试方法 面向对象软件测试是面向对象软件开发的不可缺少的一环,是保证软件质量、提高软件可靠性的 关键。面向对象软件测试的整体目标和传统软件测试的目标是一致的,即以最小的工作量发现尽可能 多的错误。由于面向对象软件技术的新特点对测试的影响。面向对象软件的测试有自身的特点和要求。 类和类簇是面向对象软件的核心,在许多面向对象软件的开发工具中,所有的代码都可以归结为 类,类的测试也是面向对象软件测试的重点和难点,本文主要通过研究类的测试来研究面向对象软件 的测试和同归测试。 面向对象软件测试技术是一种尚在不断发展、完善中的技术。目前针对类级和类簇级的测试方法 有多种,本文提出的基于测试路径集运算的同归测试策略中采用的是基于状态的测试方法【l 刨,该方法 将在第三章中详细研究,具有代表性的面向对象软件测试方法主要还有以下几种: 1 ) a s t o o t ( as e to f t o o l sf o ro b j e c to r i e n t e d 融t i n g ) 方法1 7 】 这是一种以l o b a s 语言为基础的面向对象的类测试方法,l o b a s 语言是与面向对象语言语法相 似的代数规约语言。在采用此方法进行类测试时,每一个测试例为一个三元组( s l ,s 2 ,t a g ) ,s i 和 s 2 为消息序列。若根据规约二者等价,则t a g 取值为“等价”,否则为“不等价”。对包含所有这样的 三元组的测试集u 中的每个元素,分别发送消息序列s l 、s 2 到类c 的对象c 1 、c 2 ,然后检查c l 的 返同对象是否和c 2 的返回对象观察等价,若所有的观察等价检查均与t a g 一致,则实现是正确的。 这种方法其实可以以任何类似的代数规约为基础,存在的问题一是如何确定两个对象的状态是否 等价,目前的解决办法是为每一个类提供一个检查状态等价的函数;另一个问题是对于任何一个类, 这样的序列对的集合都是无限的,如何从无限的集合中按照一定的覆盖标准选择有限的测试用例,目 前尚无有效的解决方案。 2 ) 基于方法序列的测试l l 叫 面向对象程序中方法的调用是有一定次序的,如果违反了这个次序就会产生错误。方法序列规范 m t s s ( m e t h o ds e q u e n c es p e c i f i c a t i o n ) 就是这样一种规范,它规定了类或类簇中方法的执行顺序,如哪些 方法必须按先后次序执行,哪些方法可以并发执行等等。依据这样的规约,可以为类或类簇产生一些 消息序列,检验这些类或类簇中的方法是否能够正确地交互。由于该方法没有能够考虑类的状态,因 此采用它进行的测试是不完全的。这种方法常常与别的测试方法结合使用。 3 ) 基于u m l 的测试i i h j u m l 为面向对象软件提供了强大的建模工具,同时它也可以作为测试的依据。已被应用于面向对 象软件测试的u m l 模型主要有: 类图:类图描述了组成面向对象程序的各个类之间的关系,包括联系、聚集、重数、子类型 和递归包含等。依据类图可以确定各个类之间的层次关系,从而决定对类进行测试的顺序。 另外,采用类图可以生成检验类之间关系是否正确实现的测试用例。 顺序图:顺序图描述对象之间动态的交互关系,着重体现对象间消息传递的时间顺序,因此 它可以作为类簇测试的依据。顺序图可以转换为流程图,这种流程图表示了对象间消息传递 的顺序,与程序流程图在形式上极为类似,也包括了顺序、分支和循环等。采用基本路径法 可导出流程图的基本路径集,路径集中的每一条路径都是一个消息序列,即测试用例。 状态图;状态图在状态机的基础上,增加了通信、并发和嵌套机制,大大简化了复杂系统的 建模,并且使得复杂系统的统一建模成为可能,它可以表示单线程的层次或并发的状态机。 状态图通常被用在基于状态的测试中,通过检查由初态是否能正确地到达图中的各个状态,以 及各个状态之间的迁移是否能正确实现来进行测试。 6 第二章面向对象软件的测试 用例图:用例图一般被用在系统测试中,图中的每一个用例都可以转换为一个状态模型,然 后参照状态测试的方法进行测试。 在基于u m l 的测试方法中,一般将各种模型图转换成相应的测试场景,用控制流或数据流等方 法遍历场景路径获取交互中的参数变量和方法调用序列进行测试。 4 ) 基于数据流的测试 2 0 1 基于数据流的测试由传统的数据流测试发展而来,传统数据流测试的基本思想是:一个变量的定 义,通过辗转的使用和定义,可以影响到另一个变揖的值,或者影响到路径的选择等,因此,可以选 择一定的测试数据,使程序按照一定的变量的定义使用路径执行,并检查执行结果是否与预期的相符, 从而发现代码的错误。这种测试思想也适用于面向对象的软件。但在类级和类簇级测试中,由于方法 执行的先后次序是动态决定的,因此必须首先得到类或类簇中的正确的方法序列,测试用例则围绕这 些方法序列中的类成员变量的定义使用对产生。为一个类或类簇生成的测试用例集应能覆盖该类或类 簇中所有类成员变量的定义使用对。该方法主要着眼于类或类簇中的数据流,一般对其褒贬不一,有 的认为这种测试是必不可少的【博l ,也有人认为这种方法破坏了类的封装性【l o 】,不值得提倡。 5 ) 变异测试【2 l 】 变异测试是= 种基于错误的测试方法,它主要用于检测测试用例的有效性。其方法是在程序中植 入一些错误,如将算术运算中的“+ ”变成“”或“3 ”等,称为变异子( m u t a n t ) ,如果测试用例能检 测出这个变异子,就称它被“杀掉( k i l l e d ) ”了,如果植入的变异子不能被有效地杀掉,则说明测试用 例不够,必须增加相应的测试用例。传统的变异测试可直接用于方法测试中,但由于类和类簇等是传 统程序所不具备的,所以必须为它们设计新的变异子,如改变状态图中调用方法的名称、交换方法的 次序、改变类的成员变量的名称或取值以及改变迁移发生的布尔条件等。变异测试的原理和方法较为 简单,但它不能作为独立的测试方法米使用。 6 ) 基于使用的测f 试i 以j 基于使用的测试是指在类或类簇的状态图或方法控制流图中加入有关使用的信息,即每一条路径 的执行频率或其重要性,这些信息来自于系统的需求规范、设计者的经验、软件的应用环境以及类似 程序的使用经验等。加入这些信息的目的是为了使测试者了解到程序的哪些部分使用的频率较高,以 使之得到更为详尽的测试,另外应兼顾那些不是太常用但非常关键的路径,使其得到足够的测试。这 种方法可以有效地指导测试用例的生成,并提高测试的效率。 2 4 小结 面向对象软件所具有的封装性、继承性和动态性的特点,使得面向对象软件的测试不能完全套用 传统软件测试的方法,本章在分析面向对象软件特点的基础上分别讨论了其对面向对象软件测试的影 响,并介绍了当前流行的一些面向对象软件的测试方法。 7 东南大学硕士学位论文 第三章基于状态的类测试策略 3 1 基于状态的类测试方法 基于状态的测试以类的有限状态机模型( f s m ) t 2 3 】和其状态转换图【2 4 j 为依据,这种模型可以由软件 的代码或规约生成,也可采用如u m l 的状态图【2 5 】。在面向对象程序中,类的一个方法的实现常需调 用该类的其它方法。基于状态的测试强调方法问的正确交互,这种正确的交互体现在类状态的正确变 迁。类中方法间的交互通过彼此间发送消息的机制进行,同时由于两状态间的转换需要正确的消息序 列激发,因此顺序上不正确的消息响应也是基于状态的测试重点。 基于状态的类测试策略,总体思路是穷尽类中所有可能的状态转换,包括所有行为的测试,这样 才能覆盖所有的路径和业务,确保测试的正确性。 采用此方法进行测试时。主要检查由初态是否能正确地到达图中的各个状态,以及各个状态之间 的迁移是否能正确实现。为之生成的测试用例是由初态到达各个状态和状态间迁移的消息序列集,且 该测试用例集必须满足状态图中的状态覆盖和迁移覆盖。测试时将这些消息序列发送给被测对象的初 态( 假设从每一个状态都可直接返回初态) ,然后检查相应的响应序列是否正确,以及程序是否到达了 状态图所规定的状态。类中成员变量以及部分方法的变量的取值由各个迁移上的监视决定。 基于状态的测试侧重于对象的动态行为,强调方法间的正确交互和类状态的正确变迁,能检测出 对象成员函数之间通过对象状态进行交互时产生的错误。这种方法可以充分测试类中的各个方法和可 能的状态,符合类测试的特点,因此是当前类测试中用得较多、研究得也较多的方法之一。 采用基于状态的测试方法进行测试时,首先要构造一个适当的对象状态测试模型,然后生成其状 态转换图。本文提出的基于测试路径集运算的回归测试策略中采用的是f r e e 模型。 3 2f r e e 模型 面向对象技术使软件易维护、易复用、易扩展,从而提高了软件开发速度和产品质量。然而,面 向对象技术的引入并不意味着软件产品的错误风险大大降低,恰恰相反,它对测试提出了新的挑战。 面向对象技术自身独有的封装性、继承性、多态性等特点对测试技术提出了新的要求。因此,需要在 结合传统测试技术的基础上,针对面向对象技术的特点,在面向对象测试设计中,采用适于面向对象 技术的测试方法,建立适于面向对象技术的测试模型。 最安全、最能保证软件正确性的测试是完全测试,即:将所有可能的实例在软件产品上运行,以 验证其正确性。然而由于系统体积庞大、实例数量过多,这一想法并不现实。因此,在测试设计中, 大多需要开发测试模型给予支持。所谓测试模型,就是描述或实现元素之间关系的模型。在面向对象 技术中通常采用基于故障模型的模型( 即针对可能发生的故障的开发测试模型) ,其目的就是将关注的 焦点直接放在最有可能发生的错误,以及将这些错误显现出来的测试实例上,以提高测试效率。 3 2 1f r e e 模型 f r e e 2 6 1 ( f l a t t e n e dr e g u l a re x p r e s s i o n s ,展平正则表达式) 状态模型为基于状态的测试提供了可 测试模型。该模型由以下元素构成: 1 )状态:这是由类中方法计算后得到的一组实例变量值。如银行账户类可由开户状态、透支状 态组成。模型既可以抽象( 类接口输出的实例变量) ,也可以具体( 所有类实例变量) 。若一个方 8 第三章基于状态的类测试策略 法的后置条件( 即方法计算结果的分类条件) 含有一个或多个逻辑“或”运算符,方法可计算 出不同状态,状态数为运算符数目加1 。 2 )转换;一个转换是一个事件或一个或多个动作的结果,由成对的状态变量( 接受状态与结果状 态) 定义,且接受状态和结果状态可相同。 3 )事件:事件描述了作用于对象的动作:任一客户发来的消息,对被发送给支持对象的虚拟机 的消息作出的响应,或由外部管理的中断机制对对象的激活。 4 )动作:动作描述对象对事件的响应结果。如发向服务器的消息,通过消息机制向客户端返回 的值。 在f r e e 模型中,“状态”被定义为系统内所有可能成员实例变量值的组合。这是一个抽象、集 合的看法,而非一般意义下的“状态”定义所有实例变量值的特定组合。在f r e e 模型建模中, 可将抽象、集合的状态分割为不同的子状态。即类状态可选择不同粒度建模,既可以将组合中的每一 个成员作为一个状态,也可以将组合中任意多个成员组成一个状态。良好的粒度状态模型有利于测试 跟踪,但由于其状态数量过大,不能在测试中无限制地使用。同时,过于具体的状态有可能产生以下 问题: 1 )与其它外部类关系模糊,降低测试度; 2 )与封装信息的策略相违背; 3 )其测试用例的重用性有限。 简而言之,在面向对象测试中,f r e e 模型的最终目的就是要产生与测试类的特定序列行为相关 联、由类测试实例定制的序列。 3 2 2f r e e 模型在软件测试中的应用 传统白盒测试只针对有惟一入n 出口路径的编码。然而,一个类通常由多个具有单一入口和出口 的编码段组成。因此,传统的方法流图通常不能对测试类进行充分描述,进而无法对测试类实施整体 测试。在面向对象测试中,必须了解整个类的控制及整个类的实例变量数据流。为此,可在f r e e 类 状态模型和各方法流图的基础上,构造f r e e 流图。f r e e 类状态模型描述所有可能的内部类( 内部方 法) 控制流路径;方法流图描述具有惟一入口、惟一出口的编码段及编码段间所有可能路径。此时,编 码段被描绘成结点,分支选择描绘成路径。因为在f r e e 模型中,状态是方法激活的结果,所以可将 方法图替代为状态转换,以得到完整的类路径。 在面向对象分析设计中,超类的方法在子类编码里并不清晰,易产生不一致的实例变量。因此, 可利用f r e e 流图提供内部类流图,支持内部类路径测试。使用f r e e 模型依次对所有类刻画状态图。 需要注意的是,子类测试通常会涉及继承性问题,为此需要进行类层次展平。在展平过程中,必须考 虑类的所有特征( 包括局部的、私有的、继承的) 。 将f r e e 状态模型转换生成转换树。其方法为:先将初始状态变成树的根结点;然后依次检查各 结点在模型中对应状态进行的转换,对每个转换在树中用从被检查结点发出的条边表示,并通过目 的结点表示转换产生的结果状态。 至此,得到了与传统测试方法中判定树相似的一个树型结构,转换就好像判定树的判定条件。传 统测试中,在某个具体判定条件下,系统选择某条路径;而在面向对象测试中,某个转换后系统处于 某个特定状态。于是,类似于判定树,可从转换树中方便地转换出测试序列。这里将涉及到与传统测 试中不可能发生条件和不知条件相类似的例外行为。因此,还需要对一致性测试组添加条件和潜行路 径。 f r e e 按照需求和规格说明二f 5 构造测试用例,确定状态空间,能及时发现错误,并有效覆盖测试 路径。同时,它允许对由其它测试模型产生的个别测试用例进行综合测试,为测试提供了一致、连续 9 东南大学硕士学位论文 的框架。因此,在实际应用中f r e e 方法可涉及到测试的所有范围( 基于实现的类,基于责任的类、簇、 子系统和系统) ,是面向对象系统中开发完整的、基于状态测试的有效技术。 3 3 测试路径生成算法 在基于状态的类测试方法中,首先构造一个正确的能提供类行为的测试模型并进而生成其状态转 换图后,再检查由初态是否能正确地到达图中的各个状态,以及各个状态之间的迁移是否能正确实现。 该方法生成的测试用例是从初态到达各个状态和状态间迁移的消息序列集。测试时将这些消息序列发 送给被测对象的初态,然后检查相应的响应序列是否正确,以及程序是否到达了状态图所规定的状态。 本文在此提出一个新的测试路径生成算法,能够由类的f r e e 状态模型以较低的时间复杂度生成 测试路径集。测试路径生成算法的基本思想:首先对类f r e e 模型对应的图形邻接表进行扫描,获得 图中( 模型中) 各状态结点的入度;然后将初态作为根生成一棵树,对树中结点,将其在类f r e e 模 型对应图形邻接表中所有相邻的下一结点作为其子女结点加入树中;对当前路径统计本路径经过各结 点的次数。若某循环入口状态结点在当前路径中出现的次数超过其在图形中的入度,则该路径废弃; 重复以上过程直至所有路径都到达终态或废弃;最后,遍历路径树,提取出所有到达终态的事件路径。 若模型中有较多循环和分支,则某些路径部分会多次覆盖,为提高测试效率,可考虑在全覆盖的前提 下对测试路径集作适当简化。 算法的具体描述和实现见本文5 2 节。 该算法由类的f r e e 模型构造路径树,然后遍历路径树得到测试路径集。树中结点对应状态,分 支表示状态问的转换( 事件) 。基于状态的类测试策略,总体思路是穷尽类中所有可能的状态转换,生 成的测试路径须覆盖所有的路径和业务,才能确保测试的正确性。在本文提出的测试路径生成算法中, 任一结点的所有后继结点都被纳入到路径树中,所以能够覆盖所有的路径和业务。在f r e e 模型中, 会出现较多的循环,这是正常的业务流程,从状态测试的初衷出发,应予支持,但作为实际的测试操 作,不可能容忍无休止的循环存在,否则测试永远也不可结束。我们将一条事件路径定义为起始于初 态、结束于终态的转换序列。如果模型中包含循环,则事件路径中仅包含循环的有限次重复,重复次 数引入循环入口状态结点在图形模型中的入度来控制,规定该状态结点在当前路径中出现的次数不得 超过其在图形中的入度,否则该路径废弃。只有那些发生过多循环的路径才被废弃,对路径的全面覆 盖无影响。 若某结点入度超过l ,表明其是多个结点的后继,有可能是循环的入口点,若是,应允许发生循 环,但不能无休止地循环,引入状态结点在图形模型中的入度正是为控制进行必要次数的循环、得到 能有效覆盖所有业务的测试路径集。对下图3 1 中4 种情况,引入入度进行控制: ( a ) 中结点a 入度为l ,则事件路径只有一条:p 1 - p 2 ( b ) 中结点b 入度为2 ,它是一个循环的入e l 点,经过该点的事件路径有两条:p i - p 2 和 p i - p 3 - p 2 ,路径分别结过b 结点1 次和2 次: ( c ) 中结点c 入度为3 ,它是多个循环的入口点,经过该点的循环路径有:1 ) p 1 - p 2 ;2 ) p 1 - p 3 - p 2 ; 3 ) p i - p 4 - p 2 ;4 ) p 1 p 3 - p 4 - p 2 ;5 ) p i - p 4 - p 3 p 2 :6 ) p i - p 3 - p 3 - p 2 ;7 j p l - p 4 - p 4 - p 2 ; 这7 条事件路径最多经过结点c 3 次,其中第6 ) 条路径可简化为第2 ) 条,第7 ) 条路径可 简化为第3 ) 条,最终得出有5 条路径经过

温馨提示

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

评论

0/150

提交评论