(计算机软件与理论专业论文)面向对象软件的回归测试方法研究.pdf_第1页
(计算机软件与理论专业论文)面向对象软件的回归测试方法研究.pdf_第2页
(计算机软件与理论专业论文)面向对象软件的回归测试方法研究.pdf_第3页
(计算机软件与理论专业论文)面向对象软件的回归测试方法研究.pdf_第4页
(计算机软件与理论专业论文)面向对象软件的回归测试方法研究.pdf_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

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

文档简介

西南大学硕士学位论文 摘要 一面向对象软件的回归测试方法研究 计算机软件与理论硕士研究生袁海根 指导教师丁晓明副教授 摘要 软件测试是为确保软件的正确性而进行的一项重耍活动,回归测试是软件修改后以确认 修改的正确性而进行的测试工作,因而其执行测试用例的过程与前面的开发过程中的软件测 试过程相同,只是所执行的测试用例集合不同。回归测试策略有“重测所有”策略和“选择 性”策略两种。随着软件规模的不断增大,在回归测试中“重测所有”策略不管在成本还是 在时间上都是不可行的,尤其是在修改很小部分时,“重测所有”策略会造成很大的成本浪费, 但修改可能会影响到其他的部分,因此必须选择适当的测试用例集进行回归测试。 目前在“选择性”回归测试方法方面有许多研究,选择一个尽可能小并且又能覆盖所有 改变和受影响的代码测试用例集是研究的重点,而本文主要是研究“选择性”回归测试策略。 本文是在h a r r o l d 和他同事提出的面向对象j 越,a 语言的回归测试选择性方法的基础上进 行的研究,他们的方法是对整个系统的句子分析找出需要测试的部分,而对于大型系统修改 是低效的。针对以上缺点,本文提出一种新的回归测试选择方法该方法是以类为单元米分 析,找出修改的类以及可能受影响的类,然后再利用h a r r o l d 和他同事提出的方法进行分析, 晟后确定哪些测试用例必须重新执行。 针对能够完成所有测试用例但不能保证测试可信度的问题,本文采用了用例排序法。这 是基于j i g 边覆盖来对用例进行选择的排序方法。该方法既可以获得较低的用例选择率,义能 使用例序列具有较高的错误检测能力。 在本文最后实现了一个原型系统,这个系统提出了源程序分析框架,能够对于一般的j a v a 源程序进行分析,并且很容易扩展到其他语言的源程序分析中。 关键词:面向对象:软件测试;回归测试;测试选择:测试用例排序 西南大学硕士学位论文 a b s t r a c t r e s e a r c ho no b j e c t - o r i e n t e ds o f t w a r er e g r e s s i o n t e s t i n g t e c h n i q u e m a j o r :c o m p u t e rs o f t w a r ea n dt h e o r y s u p e r v i s o r :p r o f d i n gx i a o m i n g a u t h o r :y u a nh a i g e n a b s t r a c t s o f t w a r et e s t i n gi sa ni m p o r t a n ta c t i v i t yi no r d e rt oi n s u r et h ec o r r e c t n e s so ft h es o f t w a r e , r e g r e s s i o nt e s t i n gi sat e s tf o rt h ep u r p o s eo fv a l i d a t i n gm o d i f i e ds o f t w a r ec o r r e c t n e s s ,t h u st h e p r o c e s so fr u n n i n gt e s tc s s ei nt h er e g r e s s i o nt e s t i n gp h a s ei st h es a m ea st h a to fr u n n i n gt e s tc a s ei n t h ed e v e l o p i n gt e s t i n gp h a s e o n l yt h et e s tc a s u i t e sa r ed i f f e r e n t r e g r e s s i o nt e s t i n gs t r a t e g yc a n b ed i v i d e di n t o ”r e t e s t q l l ”s t r a t e g ya n d ”s e l e c t i v e ”s t r a t e g y ,w i t ht h ea c c r e t i o no ft h es o f t w a r es c a l e ”r e t e s t a l l ”i si m p o s s i b l ei ne i t h e rc o s to rt i m e ,e s p e c i a l l yw h e nal i t t l ep a r tc h a n g e s ,”r e t e s t - a l l ”w i l l w a s t ec o s t , b u tc h a n g e dp a r t sm a ya f f e c tt h eo t h e ru n c h a n g e dp a n s ,s or e g r e s s i o nt e s t i n gm u s tb e c a r r i e do u ti ns e l e c t i n gp r o p e rt e s tc a s es u i t e s p r e s e n t l yt h e r ea r em a n ys t r a t e g y , w h i c hp u te m p h a s i sr e s e a r c h e sa b o u tr e g r e s s i o nt e s t i n go n s e l e c t i n gat e s tc a s es u i t ea ss t r a t e g yi n ”s e l e c t i v e p o s s i b l ea ss m a l la n dc o v e r a g ea l lo ft h ec h a n g e d a n da f f e c t e dc o d e s i nt h i sp a p e r , w es t u d yh a r r o l da n dh i sc o l l e a g u e sa b o u to b j e c t - o r i e n t e dj a v al a n g u a g e r e g r e s s i o nt e s ts e l e c t i o n ( r t s ) t e c h n i q u e t h i st e c h n i q u ec a l l sf o ra n a l y z i n gs e n t e n c eo ft h ew h o l e s y s t e mt oi d e n t i f yt h ep a r tf o rt e s t i n gp a r t b u ts y s t e mc h a n g e sf o rl a r g ei si n e f f i c i e n t r e g a r d i n g t h ep r o b l e m ,t h i sp a p e rp r e s e n t san e wr t st e c h n i q u e t h et e c h n i q u ei sb a s e do nt h et y p eo f e l e m e n ta n a l y s i st oi d e n t i f yc h a n g ec l a s s e so fw h i c hm a ya f f e c tc l a s s e s t h e nu s eh a r r o l da n dh i s c o l l e a g u e s st e c h n i q u e t oa n a l y z e ,f i n a l l yd e t e r m i n ew h i c ht e s tc a s e sm u s tr e r a n m o r e o v e r t oi m p r o v ec o n f i d e n c eo fs o f t w a r em o d i f i c a t i o ni nr e g r e s s i o nt e s to nc o n d i t i o nt h a t n o ta l lt e s t sc a nb ee x e c u t e d ,w eu s et e s tc a s e s p r i o r i t i z a t i o n t h i si s b a s e do nj i g - b a s e d b r a c h c o v e r a g ep f i o f i t i z a f i o nt e c h n i q u e t h et e c h n i q u en o to n l yc a nl o w e rt h er a t eo fc h o i c ew i t h c a s e s ,c a s e sg a l lu s et h es e q u e n c e sh a v eah i g h e re l r o rd e t e c t i o nc a p a b i f i t y a tl a s t ,w er e a l i z eap r o t o t y p es y s t e m , w h i c hp r e s e n t saf r a m e w o r kf o rp r o g r a ma n a l y s i st h a t c a na n a l y z eac o m m o n p r o g r a mf o r j a v al a n g u a g e ,a n di se a s yt oe x t e n dt oo t h e rl a n g u a g e k e yw o r d s :0 b j e c t o r i e n t e d s o f t w a r et e s t i n g r e g r e s s i o nt e s t i n g t e s ts e l e c t i o n s o r t i n gt e s tc a s e 独创性声明 学位论文题目:亘囱盘象筮往曲回归测达虚洼盈究 本人声明所呈交的学位论文是本人在导师指导下进行的研究工 作及取得的研究成果。据我所知,除了文中特别加以标注和致谢的地 方外,论文中不包含其他人已经发表或撰写过的研究成果,也不包含 为获得西南大学或其他教育机构的学位或证书而使用过的材料。与我 一同工作的同志对本研究所做的任何贡献均已在论文中作了明确的 说明并表示谢意。 学位论文作者:素隆枉签字日期:砂刁年f 月( 。日 学位论文版权使用授权书 本学位论文作者完全了解西南大学有关保留、使用学位论文的规 定,有权保留并向国家有关部门或机构送交论文的复印件和磁盘,允 许论文被查阅和借阅。本人授权西南大学研究生院可以将学位论文的 全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫 描等复制手段保存、汇编学位论文。 ( 保密的学位论文在解密后适用本授权书,本论文:回不保密, 口保密期限至年月止) 。 学位论文作者签名:考治柱 签字日期:三。口 年j 月扣日 导师签名: 疆铽 签字日期:年月 日 西南大学硕士学位论文 第1 章绪论 第1 章绪论 软件测试是保障软件质量、提高软件产品可靠性的重要手段,是实施软件项目 不可缺少的环节。从计算机诞生起,计算机安全问题就伴随其左右,尤其是软件方 面,层出不穷的软件故障以及由此带来的严重后果使人们意识到软件测试对软件质 量具有重要的意义。许多计算机科学家在展望二十一世纪计算机科学的发展方向和 策略时,都十分注重提高软件质量。因此,作为保证软件质量最有效手段的软件测 试技术,已成为令人关注的一个研究领域。 r e g o r yt a s s e y 博士【1 l 对美国软件业现状研究表明:到2 0 0 0 年为止,美国软件 从业人员达到1 ,2 8 2 ,0 0 0 人,软件年销售总额达到1 ,8 0 0 亿美元,同时,软件失效 导致每年5 9 5 亿美元的经济损失,据估计,若能减少当前软件中1 3 的缺陷,就能 挽回2 2 2 亿美元经济损失。 软件测试是软件工程的重要组成部分。软件测试的直接目的是发现软件中存在 的缺陷。随着软件工程技术的发展,软件规模的增大,软件测试在软件开发过程中 的作用显得越来越重要。据b o e h m 统计,软件开发总成本中,用在测试上的开销 要占4 0 5 0 【2 】f 矧,软件测试在国内外已经受到广泛重视并进行了长期的研究。 1 1 研究背景 面向对象编程( o o p ) 近年来已经广为流行,已逐渐代替被广泛使用的面向过程 的开发方法,被看成是解决软件危机的新兴技术。o o p 适用范围非常广,提供了抽 象方法和类库来支持各个领域的应用程序开发。从理论上来说,面向对象编程技术 应该能够保证软件有更高的质量,但实际情况却并非如此。因为无论采用什么样的 编程技术,程序的错误都是不可避免的,而且由于面向对象编程技术的特征( 抽象) 使得程序代码重用率增高,因此更需要严格测试,以避免错误的繁衍 3 1 。面向对象 软件具有面向过程软件所没有的特点,与传统顺序结构式方法在开发思想上有着根 本的不同,面向对象软件具有类、继承、封装等特性,而过程软件则以功能模块间 的控制流程为重点。这些特点决定了测试面向对象软件需要新的策略,使得面向对 象测试在测试步骤的划分以及测试策略的选择上有别与传统的测试。 由于面向对象软件的复杂性,给基于程序代码的测试带来困难,同样也使回归 测试的难度增加。回归测试有两种常见的策略,一种是重新测试所有部分的方法, 它运行所有的测试用例,但这种策略可能消耗大量的时间及资源;另一种是回归测试 选择技术,通过选择某些现存的测试库的子集去重新测试修改的程序,以降低时间 需求。而回归测试选择技术也有两种方法:安全方法和最小化方法。安全方法是选择 所有覆盖了受影响的测试用例,而最小化方法是选择测试用例的最小子集。使得每 一个受影响的部分被覆盖至少一次。对于回归测试选择技术,首先考虑的是如何高 效的识别软件修改和修改所影响的部分,从而能集中精力对这些修改和修改受影响 的部分进行测试,因此我们要理清程序代码中的各种关系,然后考虑如何重用现存 的测试用例和测试库。国内外在这些方面都提出了一些相关的策略来提高回归测试 西南大学硕士学位论文 第l 章绪论 的效率。 1 2 国内外研究现状及进展 ( 1 ) 方菲等人针对面向对象软件“1 ,通过分析对象系统的特性,定义了对象之 间的依赖关系,通过这个依赖关系,导出测试对象的方法序列,并应用程序切片 技术,标识那些受到程序修改影响的测试用例,只有这些测试用例才需要在回归 测试中重新执行。 ( 2 ) 王影提出了一种利用“条件切片”技术“1 ,来专门检验对于循环和选择结 构中“控制谓词”的修改方法,从而更进一步降低回归测试的成本。 ( 3 ) k a b d u l l a ha n dw h i t e 提出了回归测试的防火墙概念嘲。针对面向对象的 程序扩展类防火墙,以类为测试的基本单元,先标识出改变的类与受改变影响的 类,即构造一个类防火墙,然后对类防火墙中的类根据对象关系图以一定的顺序 进行回归测试。 ( 4 ) r o t h e r m e l 提出的基于c f g 的用例选择算法”1 。该方法根据给定的程序来 构造相应的c f g 或p d g ,然后再比较程序修改前后的图,找出修改部分来进行用例 选择,主要针对是面向过程的用例选择算法。 ( 5 ) h a r r o l d 和他的同事提出面向j a v a 程序的回归测试选择算法。1 。该方法使 用j i g ( j a v ai n t e r c l a s sg r a p h ) 来表示j a v a 程序,他的方法对整个系统的类 构造j i g 图,来分析修改的部分以及所影响的部分。 比较上述几种算法,面向j a v a 程序的回归测试选择算法具有较高的用例选择 精度,同时可以处理j a v a 程序的各种特性。本文的工作正是基于文献t 8 l 提出 的算法。 还有许多针对不同面向对象语言特点进行回归测试选择技术方面的文章”“1 。 总之,回归测试是一项很耗时,成本很高的活动,各种研究都主要是围绕着降低 成本,减少测试时间但又要确保软件的可靠性来进行的,来尽可能找出软件中未 发现的错误。 1 3 本文主要的工作及意义 回归测试作为软件生命周期的一个组成部分,在整个软件测试过程中占有很 大的比重,软件开发的各个阶段都会进行多次回归测试。在渐进和快速迭代开发 中,新版本的连续发布使回归测试更加频繁,甚至是要求每天都进行若干次回归 测试。因此,选择正确的回归测试策略来改进回归测试的效率和有效性是非常有 意义的。 回归测试主要解决的是怎样有效地确定修改受影响部分以及重利用测试用例 库的问题。修改影响分析为测试用例的选择提供了依据,因此在进行回归测试选 择之前,必须要确定修改以及修改受影响的部分。回归测试需要解决的四个基本 问题对应于回归测试的过程如下“: 1 修改影响分析;鉴别修改和修改受影响的部分。 2 西南大学硕+ 学位论文 第1 章绪论 2 测试顺序:重测影响部分的策略。 3 覆盖标准:重测部分的覆盖标准。 4 测试用例库( t e s ts u i t e ) 的维护:测试用例库的维护包括测试用例库的选择、 重用和更新。 本文的重点是围绕上面的四个基本问题中的前两个,即如何鉴别修改影响的部 分和重测影响部分的策略做以下几方面的工作: ( 1 ) 深入研究现有的回归测试选择方法,包括面向过程的回归测试选择方法和 面向对象的回归测试选择方法。 ( 2 ) 针对现有的面向对象回归测试选择方法的缺点,在本文中提出一种新的面 向对象回归测试选择方法。这是一种基于高层到底层对程序的回归测试方 法,在高层是对类源程序进行分析,构造类白j 关系图( i r g ) ,然后用类间关 系图分析修改类以及所影响的类。 ( 3 ) 在底层是对修改的类以及所影响的类,用j i g 图构造类成员关系图,然后 根据j i g 图来识别d a n g e r o u s 边( 重新执行的边) ,从而选择测试用例。对 于选择的测试用例进行排序,提高代码的检测率。 ( 4 ) 由以上的内容,提出一种针对j a v a 语言的回归测试框架。 1 4 论文的组织形式 第一章介绍了研究背景及国内外回归测试研究状况,然后介绍了本文的主要 工作。 第二章阐述了面向对象回归测试的主要特点和存在的问题。 第三章研究了目前面向过程的回归测试选择算法以及面向对象的回归测试 选择算法。 第四章提出一种新的面向对象回归测试选择算法,并对选择的测试用例进行 排序。 第五章根据第四章的内容,提出一种针对j a v a 语言的回归测试原型系统。 第六章进一步的工作和分析。 两南大学硕士学位论文第2 章面向对象程序的同i 门测试 第2 章面向对象程序的回归测试 面向对象软件测试技术的研究是面向对象开发方法中不可缺少的一环,是保 证软件质量、提高软件可靠性的关键。软件测试的任何阶段均涉及到回归测试问 题。回归测试的目的是在程序修改后,只对进行修改和修改受影响的部分重新测 试,从而达到与完全测试相同的测试覆盖效果。对于面向对象程序来说,进行完 全的回归测试不仅没有必要,而且从测试代价上讲也是不现实的。目前已提出的 回归测试技术大都是针对结构化程序的,对面向对象软件的回归测试技术还在进 一步研究中,有待加强和提高。 2 1 面向对象软件的特点对测试的影响 从1 9 8 2 年在美国北卡罗来纳大学召开首次软件测试的正式技术会议至今,软 件测试理论迅速发展,并相应出现了各种软件测试方法,使软件测试技术得到极 大的提高。然而,一度实践证明行之有效的软件测试对面向对象技术开发的软件 多少显得有些力不从心。尤其是面向对象技术所独有的多态。继承,封装等新特 点,产生了传统语言设计所不存在的错误可能性,或者使得传统软件测试中的重 点不再显得突出,或者使原来测试经验认为和实践证明的次要方面成为了主要问 题。 面向对象程序的结构不再是传统的功能模块结构,作为一个整体,原有集成 测试所要求的逐步将开发的模块搭建在一起进行测试的方法己成为不可能,而且, 面向对象软件抛弃了传统的开发模式,对每个开发阶段都有不同于以往的要求和 结果,已经不可能用功能细化的观点来检测面向对象分析和设计的结果。因此, 传统的测试模型对面向对象软件已经不再适用。针对面向对象软件的开发特点, 面向对象的开发模型突破了传统的瀑布模型,将开发分为面向对象分析( o o a ) , 面向对象设计( o o d ) ,和面向对象编程( o o p ) 三个阶段。分析阶段产生整个问题空 间的抽象描述,在此基础上,进一步归纳出适用于面向对象编程语言的类和类结 构,最后形成代码。由于面向对象的特点,采用这种开发模型能有效的将分析设 计的文本或图表代码化,不断适应用户需求的变动。针对这种开发模型,结合传 统的测试步骤的划分,提出一种整个软件开发过程中不断测试的测试模型,使开 发阶段的测试与编码完成后的单元测试、集成测试、系统测试成为一个整体。 o o at e s t 和o o dt e s t 是对分析结果和设计结果的测试,主要是对分析设计 产生的文本进行测试,是软件开发前期的关键性测试。o o pt e s t 主要针对编程风 格和程序代码实现进行测试,其主要的测试内容在面向对象单元测试和面向对象 集成测试中体现。面向对象单元测试是对程序内部具体单一的功能模块进行测试, 如果程序是用j a v a 语言实现,主要就是对类成员函数进行测试。面向对象单元测 试是进行面向对象集成测试的基础。面向对象集成测试主要对系统内部的相互服 务进行测试,如成员函数间的相互作用,类间的消息传递等。面向对象集成测试 不但要基于面向对象单元测试,更要参见o o d 或o o dt e s t 结果。面向对象系统 4 西南大学硕士学位论文第2 章面向对象程序的同l 门测试 测试是基于面向对象集成测试的最后阶段的测试,主要以用户需求为测试标准, 需要借鉴o o a 或o o at e s t 结果。面向对象的回归测试与上面的测试都穿插在一 起,每一阶段测试完成后有错误就要修改,修改后就要进行相应的回归测试。 以上是关于面向对象技术对测试的整体影响,下面我们对面向对象的几项常 见的特点对测试的影响进行分析。 2 1 1 封装性对测试的影响 封装是将类和对象的接口与实现分离,屏蔽类和对象的内部实现细节,封装 大多数的情况下是通过信息隐蔽实现的。信息隐蔽是指仅仅显示类和对象的外部 使用者所需的属性和方法,而将一些无关的信息隐蔽起来。不管在设计阶段还是 以后的维护阶段,类和对象暴露在外面的信息越多,发生错误的可能性就越大, 程序员需要考虑的事情就越多。通过封装和信息隐蔽,类和对象的使用者就无法 随便读取和修改类和对象的内部信息,这就在很大程度上防止了错误的发生,提 高了程序的可维护性。对于测试人员,类是组成系统的基本单元( 例如j a v a ) ,单 元测试中以类为基本单元进行测试就很容易得到要测试的单元,方便测试人员划 分测试单元,但是类的封装性使测试人员无法了解对象的状态信息,因而也不知 道一个输入所对应的对象状态是否正确。例如对象l i s t 中有a d d ,d c l c t c 和l e n g t h 等方法,如果我们通过方法a d d 增加了一个表项,那么我们如何知道该表项所插 入的位置正确呢? 正是由于封装和信息隐蔽,我们无法直接考察对象的内部实现, 从而无法确认操作的正确性。通常我们只有在类和对象上添加一个成员函数,该 函数用于读取( 而不是修改) 对象的状态信息。为测试人员提供对象的一些隐蔽信 息,考察对象的状态变化的正确性,即在测试点加入探针。但这种方法在有些情 况是不适合的,如果被测试的代码中也有相同的成员函数时,你所加的成员函数 重载了原来的函数,可能会影响到其他调用成员函数的类。 另外对于非实例化的类。我们不能用这个类的实例来验证类中的属性和操作 的正确性。共有抽象类、泛型类和混合类这三种不能实例化的类,测试人员必须 开发一个最小的测试套来测试这些非实例化的类与其他类绑定后的情况能否满足 需求说明。 2 1 2 继承性对测试的影响 继承性是面向对象软件系统的主要特征,在一定程度上实现了软件代码的 重用,允许派生类继承一个或多个类的属性和操作,派生类可以修改、删除或增 加属性和操作。因为派生类是从基类继承而来,假设基类经过测试了,那么从其 派生出来的类的那些继承属性和操作就不再要测试了。在文献【1 7 1 中已证明这 种直观的想法是错误的,结合w e y u c k e r 的测试充分性公理,从派生类中继承的属 性由于上下文的不同需要重新测试。因此根据己经测试过的基类的一些情况来测 试派生类,即增量测试,并不需要重新测试所有继承的属性,我们可以先判别出 需要重测的属性,即最小化不同于父类的属性行为集。 5 两南大学硕士学位论文第2 章面向对象稃序的亓l i 门测试 继承可分为严格继承和非严格继承1 3 1 。严格继承是指派生类与基类的关系是 一般与特殊的关系,派生类继承了基类的所有属性和操作,并且派生类还增加了 一些特殊的属性或操作。对于这种情况,测试很简单,基类的所有测试用例仍然 可以用来测试派生类,但是还要增加一些新的测试用例来测试新加的特征以及它 是否会对原来的特征产生影响。非严格继承是指基类中的一些属性操作在派生类 中没有或者己经改名,这可能是简单的非严格继承、多重继承或者重复继承。派 生类仅继承于一个基类,且派生类中增加了一些新的特征,还重定义了基类的一 些特征,这就是简单的非严格继承,这时与派生类中同名的基类的特征在基类中 就变了,基类的对象集合可能还会调用这个同名的操作,如果基类的对象集合中 有一个对象是派生类的对象,那么就可能出现错误。需要测试人员对这方面进行 考虑。多重继承是指一个派生类从两个或两个以上的基类继承而来,基类的所有 特征构成一个新的类。从两个基类继承而来的特征名必须用不同的标识符表示, 这就需要进行重命名,类结构也不再是一个简单的层次结构而是一个连通图,基 类的改变可能使派生类之间有负面影响,这些都是测试人员在测试多重继承时需 要考虑的,不然程序在这些方面就会出现错误,这样增加了测试的难度。重复继 承是指一个派生类多次继承于同一个基类,这意味着许多重复相同的特征需要重 命名或删除,重复继承比多重继承更复杂,需要测试人员做更多的分析来决定祖 先类、父类和子孙类之间如何进行测试,以排除其中可能会产生的错误。 2 1 3 多态性和动态绑定对测试的影响 多态性和动态绑定是面向对象方法的关键特性之一。同一消息可以根据发送 消息对象的不同采用多种不同的行为方式。这就是多态的概念。如根据当前指针 引用的对象类型来决定使用正确的方法,这就是多态性行为操作。运行时系统能 自动为给定消息选择合适的实现代码,这给程序员提供了高度柔性、问题抽象和易 于维护的方便。但多态性和动态绑定所带来的不确定性。使得传统测试实践中的 静态分析法遇到了不可逾越的障碍,而且它们也增加了系统运行中可能的执行路 径,加大了测试用例的选取难度和数量。 由以上分析可知,在面向对象系统中,系统的基本构造模块是封装了的数据 和方法的类和对象。而不再是一个个能完成特定功能的功能模块。每个对象有自 己的生存周期,有自己的状态。消息是对象之间相互请求或协作的途径,是外界 使用对象方法及获取对象状态的唯一方式。对象的功能是在消息的触发下,由对 象所属类中定义的方法与相关对象的合作共同完成,且在不同状态下对消息的响 应可能完全不同。工作过程中对象的状态可能被改变,产生新的状态。对象中的 数据和方法是一个有机的整体,测试过程中不能仅仅检查输入数据产生的输出结 果是否与预期的吻合,还要考虑对象的状态。模块测试的概念已不再适用于对象 的测试。类测试将是整个测试过程的一个重要步骤,它与传统测试方法的区别如 图2 1 所示。 6 西南大学硕+ 学位论文 第2 章面向对象程序的【亓l i 门测试 一输入数据 巫二卜输出结果一 传统的测试模型 二黧羹爿处理e 薯蓍茎奏: 初始状态叫r 一硼田硝禾叶 类测试模式 图2 1 两种不同的测试模型 2 2 面向对象程序回归测试问题 回归测试是在软件维护阶段,对软件进行修改之后,对修改以及修改受影响 的部分进行测试。回归测试的目的是检验对软件进行的修改是否正确。在此,修 改的正确性有两重含义:一是对软件的修改达到了预期目的;二是软件的修改对 软件的其他功能没有产生副作用,即没有导致其他功能的不正常。回归测试将大 幅降低系统测试、维护升级等阶段的成本。 回归测试包括两部分:对修改部分的测试以及与修改相关代码的测试。对被 修改部分的重新测试,如果修改部分的功能以及接口没有发生变化,可以直接运 行原来的测试用例。但是如果修改导致功能或接口发生变化,则要根据修改后的 功能点或接1 3 的变化增加、删除或改进测试用例。由于程序的修改会对软件产生 涟漪效应,因此对与修改部分有交互关系的代码也要进行重新测试,以此来保证 修改没有对软件产生不良作用。 第一章的1 3 节中提到了回归测试过程四个问题,在进行回归测试时,首先 对程序的修改和修改影响范围进行确定,这部分工作用于确定进行测试的对象。 确定测试对象后,需要对测试对象选择测试用例,这牵涉到第2 、3 、4 个问题。 在重测策略方面可以选择重测所有测试用例或选择性测试,由于重测所有策略的 工作量大,效果不明显,因此大部分回归测试都进行选择性测试,只选取一部分 测试用例进行测试。这导致需要确定选择测试用例的标准,即测试用例的覆盖标 准。通常,进行选择性回归测试的覆盖标准是要保证测试用例覆盖修改和修改影 响的部分。 回归测试还有一个重要的部分就是对测试套( 测试用例库) 进行维护。由于 程序的不断改进和发展,其测试套越来越大,因此有些测试用例是冗余的,需要 对测试套进行精简。 2 3 面向对象程序回归测试范围 软件的测试套是由测试该软件的所有测试用例组成的。在进行回归测试的时 候,根据所确定的回归测试策略,从测试用例库中提取合适的测试用例组成回归 7 西南大学硕十学位论文第2 章面向对象程序的【亓l i 闩测试 测试套,通过运行回归测试套来实现回归测试。不同的回归测试策略将直接导致 不同的测试结果。常用的回归测试策略根据测试的目标不同可分为以下三种i l 川: ( 1 ) 局限在修改范围内的测试。这类回归测试仅根据修改的内容来选择测试 用例,这种测试只能保证修改的缺陷或新增的功能被实现了,对于修改是否对整 个系统产生影响并不加以考虑。因此,该类测试方法效率最高,但风险最大。 ( 2 ) 在受修改影响的功能范围内进行回归测试。这类回归测试需要分析对当 前的修改可能影响到哪部分代码或功能,对于所有受影响的功能和代码都将被重 新测试。这类测试避免了第一类测试方法的不足,同时其测试效率比全部重测的 方法高。现有的回归测试策略基本上都采用这种方式。 ( 3 ) 根据一定的覆盖率指标选择回归测试。该方法一般是在相关功能影响范 围难以界定的时候使用。由于功能范围难以界定,测试的对象就难以确定。为了 确定测试对象,同时提高测试效率。可以设定一个测试指标来进行测试。这种方 式最简单的策略是规定修改范围内的测试是1 0 0 ,其他范围内的测试规定一个 用例覆盖阈值,例如6 0 。 2 4 面向对象程序回归测试套 2 4 1 回归测试套维护 在面向对象程序不断地发展和维护过程中,程序会经常变动,如进行修改、 添加或删除等操作,将会导致软件功能、应用接口以及实现方式等发生变化。因 此在测试套中的某些测试用例就失去了有效性,甚至完全不能运行,而且由于添 加了新的软件功能,在原测试套中对这些新增功能的测试用例往往都不存在,这 将导致程序测试的遗漏,可能会引起整个系统的错误,产生严重的后果。为了保 证测试套中测试用例的有效性和完整性,必须对测试用例库进行维护和升级。对 程序中现有的测试用例无法测试的部分,必须设计添加新的测试用例。因此,测 试套的维护工作不仅包括确定测试套中测试用例的有效性,还包括设计增加新的 测试用例来保证测试的完整性。用这些新的测试用例来测试软件新功能或覆盖现 有测试用例无法覆盖的软件功能或特征。 测试套的维护工作是一个不问断的过程,通常将软件的原始测试套作为基准 测试套,在该测试套的基础上进行测试用例的添加、删除、改进等操作。测试套 的维护主要包括以下两个方面: 1 测试套完整性保证方面 测试套完整性保证方面主要是添加新的测试用例,来保证对程序测试没有漏 洞,避免测试的不完整性和不充分性。如果程序中某部分构件或接口在现有的测 试中没有被测试,就需要设计新的测试用例来对其进行测试,并将新的测试用例 添加到测试套中。 2 测试套有效性保证方面 测试套有效性保证方面主要是指删除无效的、冗余的测试用例和改进难以约 束的测试用例。 8 西南大学硕士学位论文 第2 章面向对象程序的同l 门测试 由于软件的修改、演进等原因会使部分测试用例不再适合测试该软件,如可 能已无法揭示出程序中的缺陷,那么这些测试用例就失去了测试意义。因而,在 软件修改后都应对这些无效的测试用例进行删除,以保证测试套的有效性。 如果几个测试用例同时对相同的输入和输出进行测试,那么这些测试用例是 相互冗余的。冗余的测试用例会导致回归测试效率的降低。所以必须对测试套进 行定期整理,删除冗余的测试用例,来提高测试套的有效性。 在测试套中肯定存在着对输入或程序状态敏感的测试用例。这些测试用例的 运行过程难以重复且测试结果难以预料,这都会影响到回归测试的效率,因此需 要对这些测试用例进行改进,使其易于重复和便于控制。测试套的维护改善了测 试用例的可用性,提高测试套的可信度,同时还能保持测试的效率和效用,对于 提高测试效率来说是必不可少的一项工作。 2 - 4 2 回归测试套的选择 在软件生命周期中,即使一个得到良好维护的测试用例库也可能变得相当大, 这使每次回归测试都重新运行完整的测试包变得不切实际。一个完全的回归测试 包括每个基线测试用例,时间和成本约束可能阻碍运行这样一个测试,有时测试 组不得不选择一个缩减的回归测试包来完成回归测试。 回归测试的价值在于它是一个能够检测到回归错误的受控实验。当测试组选 择缩减的回归测试时,有可能删除了将揭示回归错误的测试用例,消除了发现回 归错误的机会。然而,如果采用了代码相依性分析等安全的缩减技术,就可以决 定哪些测试用例可以被删除而不会让回归测试的意图遭到破坏。 选择回归测试策略应该兼顾效率和有效性 1 9 , 3 3 l 两个方面。常用的选择回归测 试的方式包括: 1 再测试全部用例 选择基线测试用例库中的全部测试用例组成回归测试包,这是一种比较安全 的方法,再测试全部用例具有最低的遗漏回归错误的风险,但测试成本最高。全 部再测试几乎可以应用到任何情况下,基本上不需要进行分析和重新开发,但是, 随着开发工作的进展,测试用例不断增多,重复原先所有的测试将带来很大的工 作量,往往超出了我们的预算和进度。 2 基于风险选择测试 可以基于一定的风险标准来从基线测试用例库中选择回归测试包。首先运行 最重要的、关键的和可疑的测试,而跳过那些非关键的、优先级别低的或者高稳 定的测试用例,这些用例即便可能测试到缺陷,这些缺陷的严重性也仅有三级或 四级。一般而言,测试从主要特征到次要特征 3 基于操作剖面选择测试 如果基线测试用例库的测试用例是基于软件操作剖面开发的,测试用例的分 布情况反映了系统的实际使用情况。回归测试所使用的测试用例个数可以由测试 预算确定,回归测试可以优先选择那些针对最重要或最频繁使用功能的测试用例, 9 西南大学硕士学位论文 第2 章面向对象稃序的同i 门测试 释放和缓解最高级别的风险,有助于尽早发现那些对可靠性有最大影响的故障。 这种方法可以在一个给定的预算下最有效的提高系统可靠性,但实施起来有一定 的难度。 4 再测试修改的部分 当测试者对修改的局部化有足够的信心时,可以通过相依性分析识别软件的 修改情况并分析修改的影响,将回归测试局限于被改变的模块和它的接口上。通 常,一个回归错误一定涉及一个新的、修改的或删除的代码段。在允许的条件下, 回归测试尽可能覆盖受到影响的部分。 再测试全部用例的策略是最安全的策略,但已经运行过许多次的回归测试不 太可能揭示新的错误,而且很多时候,由于时白j 、人员、设备和经费的原因,不 允许选择再测试全部用例的回归测试策略,此时,可以选择适当的策略进行缩减 的回归测试。 2 5 小结 本章介绍了面向对象程序测试存在的问题,根据回归测试需要解决的问题, 整体上介绍了回归测试的基本过程,回归测试用例的选择以及测试用例库的维护。 两南大学硕+ 学位论文第3 章嗣旷1 测试选抒算法 j i i 第3 章回归测试选择算法 3 1 引言 对于基于程序代码的回归测试,国内外提出了很多测试选择算法l m 。但是这 些算法的用例选择精度较低,所以r o t h e r m e l 和h a r r o l d 提出了安全的回归测试选 择算法。本章将详细讨论r o t h e r m e l 面向过程的测试选择算法1 7 1 和h a r r o l d 和他的 同事提出的面向对象的测试选择算法嘲,下一章根据他们算法的缺点提出本文的算 法。 3 2 基本术语 在软件生命周期中的任何一个阶段,只要软件发生了变化,就可能给该软件 带来问题。为了验证修改的正确性及其影响就需要进行回归测试,选择性的回归 测试( s e l e c t i v er e g r e s s i o n t e s t ) 是一种非常重要的回归测试方法。该方法可以通过复 用已有用例集,在原有用例集中选择部分用例来进行测试,从而达到降低测试成 本的目的。 接下来使用到的一些符号将在全文中使用。令p 代表某个程序,p 代表对p 进行修改后的程序,t 为对p 进行测试的测试用例集则回归测试过程可以描述如 下: ( 1 )选择t c t ,其中t 是程序p l 运行时用来测试的用例集; ( 2 )用t 测试p - ,以确认程序p 在t 的正确性; ( 3 )如果必要,产生t - ,其中t 为p 铡试新增部分的用例; ( 4 )用t ”测试p i 以确认p 在t f i 上的正确性: ( 5 ) 根据t ,t ”来产生新的测试用例集t ”。 从以上描述可知,选择性回归测试主要包括以下几个问题: ( 1 ) 回归测试选择问题( r e g r e s s i o nt e s ts e l e c t i o n ) ,即根据修改后的程序p 。,从原 有的测试用例集t 中选出一个子集t 。这个问题也包括了如何从原有用例集 t 中选出过时用例。所谓过时用例,是指根据程序p 的规格s ,该用例t 所指 明的对程序p 的一个( i n p u t ,o u t p u t ) 不合法,或者t 所规定的输入对p 不合法; ( 2 ) 是否需要进行附加测试的问题; ( 3 ) 测试执行问题,即有效的执行测试并进行测试结果验证: ( 4 ) 测试维护问题,包括更新用例库和存储测试信息。 3 3 面向过程回归测试选择算法 介绍面向过程回归测试选择算法之前,先介绍跟面向过程有关的控制流图 ( c f g ) 和代码执行。 3 3 1 控制流图( c f g ) 令s 和s 吩别指p 和p 啪规格。p ( i ) 为p 在输入为i 时的输出,p t ( i ) 为p 在输 两南大学硕士学位论文 第3 章【亓l i 门测试选择算法 入为i 时的输出;s ( i ) 指p 在输入为i 时的预期输出;s ( i ) 为p 在输入为i 时的预期 输出;t 为用来测试p 的用例集。 一个测试用例可以用一个三元组 来表示。其中i d e n t i f i e r 用来标识一个测试用例,i n p u t 为程序执行时的输入,o u t p u t 则为预期输出s ( i n p u t ) 。 控制流图是一种用节点表示的程序段,用边代表从给定程序段到别的程序段的一 种网络图。图3 1 给出了函数c o u n t p o s i t i v e 0 及其控制流图。 i n tc o u n t p o s i t i v e ( i n ta 【】,i n ts i z e ) s l i n tc o u n t - - o ; p 2w h i l e ( s i z e m p 3 耐a ( s i z e 1 o ) s 4 c o u n t + + ; s 5 s i z e - ; s 6r e t u mc o u n t ; 图3 1 函数c o u n t p o s i t i v e 0 及其控制流图 在图3 1 中语句节点用椭圆表示,代表简单语句。谓词节点用矩形表示,代表 条件语句。标记为“t ”或“f ”的边表示在谓词节点对条件进行取值( 真或假) 后出 发到下一个节点的控制流。节点标识与其在程序中的位置一一对应。图3 1 中使用 语句行号作为节点标识。而声明语句和非可执行语句可以用一个单独的节点d 来 表示。e m w 和e x i t 分别代表程序的入1 3 和出1 3 。每个程序只有一个入口和出e l 。 构造控制流图的复杂度为o ( n 1 ,其中n 为程序中简单语句和条件语句的数量。 3 3 2 代码执行 给定程序p 及其控制流图g ,并创建测试用例t ,用来执行程序p 。在程序执 行过程中,可以记录一些相关信息,如经过的节点和边。我们把这个过程叫作“分 支追踪”( b r a n c ht r a c e ) 。通过这种方式,可以确定程序执行时,其对应的控制流 图g 中有哪些边被遍历。对于边( n l ,n 2 ) ,称其被遍历当且仅当与节点n 1 和n 2 对应 的语句在执行过程中至少被顺次执行1 次。通过这种方法收集到的信息称为程序p 在使用测试用例t 作输入时的“边轨迹”( e d g et r

温馨提示

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

评论

0/150

提交评论