(计算机应用技术专业论文)面向对象软件的回归测试策略研究.pdf_第1页
(计算机应用技术专业论文)面向对象软件的回归测试策略研究.pdf_第2页
(计算机应用技术专业论文)面向对象软件的回归测试策略研究.pdf_第3页
(计算机应用技术专业论文)面向对象软件的回归测试策略研究.pdf_第4页
(计算机应用技术专业论文)面向对象软件的回归测试策略研究.pdf_第5页
已阅读5页,还剩46页未读 继续免费阅读

(计算机应用技术专业论文)面向对象软件的回归测试策略研究.pdf.pdf 免费下载

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

文档简介

硕士学位论文 摘要 软件测试是为确保软件的正确性而进行的一项重要活动,回归测试是软件修 改后以确认修改的正确性而进行的测试工作,因而其执行测试用例的过程与前面 的开发过程中的软件测试过程相同,只是所执行的测试用例的集合可能不同。回 归测试策略有“重测所有”策略和“选择性”策略,随着软件规模的不断增大, 在回归测试中“重测所有”不管在成本还是在时间上都是不可行,尤其是在修改 很小部分时“重测所有”就造成成本浪费,但修改可能会影响到其他的部分,因 此必须选择适当的测试用例集进行回归测试。 目前在“选择性”回归测试策略方面有许多研究,选择一个尽可能小并且又 能覆盖所有改变和影响的代码的测试用例集是研究的重点。本文中以类成员为单 元进行修改影响分析,回归测试时选择仅仅与修改及影响的类成员相关的测试用 例执行。 在本文中提出类成员防火墙回归测试策略,先从源程序中抽取出类层次图, 用类层次分析法( c h a ) 根据类层次图构造较精确的类成员依赖图,然后根据类 成员的依赖关系,当修改其中某些类成员时,找出可能会影响到的其他类成员。 对于修改影响分析,先根据面向对象的特征定义几种基本的修改防火墙的构造类 型,然后程序中的修改可以由这几种基本类型组合而得到相应修改的防火墙,下 一步就可根据类成员防火墙中的类成员确定哪些相关联的测试用例必须进行重新 执行。在本文最后实现一个原型系统,提出了源程序分析框架,能够对于一般 的j a v a 源程序进行分析,很容易扩展到其他语言的源程序分析,从系统中能得出 源程序对应的类成员依赖图,当程序修改后能得到相应的类成员防火墙,为下一 步回归测试用例的选择提供研究基础。 关键词:面向对象;软件测试:回归测试;类成员依赖图; 类层次图;类成员防火墙; 面向对象软件的回归测试策略研究 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 e s o f t w a r e ,r e g r e s s i o nt e s t i n gi s at 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 e c o r r e c t n e s s ,t h u st h ep r o c e s so fr u n n i n gt e s tc a 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 e s a m ea st h a to fr u n n i n gt e s tc a s ei nt 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 e 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 nb ed i v i d e di n t o “r e t e s t a l l ”s t r a t e g y a n d “s e l e c t i v e ”s t r a t e g y , w i t h t 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 1 1 ”i s i 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 n al i t t l ep a r tc h a n g e s ,“r e t e s t a 1 1 ”w i l l w a s t ec o s t ,b u t c h a n g e dp a r t sm a ya f f e c t t h eo t h e ru n c h a n g e dp a r t s ,s o r e g r e s s i o n t e s t i n gm u s t b ec a r r i e do u ti ns e l e c t i n g p r o p e r t 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 y r 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 gs t r a t e g yi n “s e l e c t i v e ” s t r a t e g y ,w h i c hp u te m p h a s i s0 ns e l e c t i n g at e s tc a s es u i t ea s p o s s i b l ea ss m a l la n d c o v e r a g ea l lo f t h ec h a n g e da n da f f e c t e dc o d e s i nt h i sp a p e r , t r e a t i n gac l a s sm e m b e ra s au n i to fc h a n g ei m p a c ta n a l y s i s ,o n l yt h et e s tc a s es u i t e st h a tc o r r e l a t i v ew i t ht h e c h a n g e d a n da f f e c t e dc l a s sm e m b e rw i l lb es e l e c t e dt oc a r r yo u tw h e n r e g r e s s i o nt e s t i n g i sg o i n g i nt h i s p a p e r , ac l a s sm e m b e rf i r e w a l lr e g r e s s i o nt e s t i n gs t r a t e g y i s p r e s e n t e d a c c o r d i n gt ot h es t r a t e g yf i r s tt a k eo u tc l a s sh i e r a r c h yg r a p hf r o mp r o g r a m ,a n dt h e n c o n s t r u c tam o r ep r e c i s ec l a s sm e m b e rd e p e n d e n c eg r a p hb yc l a s sh i e r a r c h ya n a l y s i s a c c o r d i n gt oc l a s sh i e r a r c h yg r a p h s e c o n d l yw h e nm o d i f y i n gs o m ec l a s s m e m b e ri n p r o g r a m ,w ef i n d o t h e rp o s s i b l ya f f e c t e dc l a s sm e m b e rb a s e do nt h e d e p e n d e n c e r e l a t i o no fc l a s sm e m b e r f o rc h a n g ei m p a c ta n a l y s i s ,w ef i r s td e f i n eb a s i cc h a n g e d c a s e st oc o n s t r u c tf i r e w a l lo nt h eb a s i so fv a r i o u so b j e c t o r i e n t e df e a t u r e s ,a n dt h e n p r o g r a m m o d i f i e df i r e w a l lc o n s i s to ft h e s eb a s ec h a n g e d c a s e s ,s u b s e q u e n t l yw e d e c i d e t or e t e s tt e s tc a s e sw h i c ha s s o c i a t e dw i t hc l a s sm e m b e rf r o mc l a s sm e m b e rf i r e w a l l a t l 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 taf r a m e w o r kf o rp r o g r a ma n a l y s i s t h a tc a na n a l y z eac o m m o n p r o g r a mf o rj 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 r p r o g r a ml a n g u a g e c l a s sm e m b e rd e p e n d e n c eg r a p hc o r r e s p o n d i n gt op r o g r a mc a nb e o b t a i n e df r o mt h i ss y s t e m ,c l a s sm e m b e rf i r e w a l lc a nb ea l s og a i n e da f t e rp r o g r a mh a v e b e e n c h a n g e d ,a l lo f t h e s ep r o v i d er e s e a r c hb a s i sf o rt h ef u t u r er e g r e s s i o nt e s ts e l e c t i o n k e yw o r d s :o 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 ;c l a s s m e m b e r d e p e n d e n c yg r a p h ;c l a s sh i e r a r c h yg r a p h ;c l a s sm e m b e r f i r e w a l l ; 湖南大学 学位论文原创性声明 本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取 得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其 他个人或集体已经发表或撰写的成果作品。对本文的研究做出重要贡献的个 人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律后果 由本人承担。 作者签名: i 妇v 日期:拍哗年月甜日 学位论文版权使用授权书 本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学 校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查 阅和借阅。本人授权湖南大学可以将本学位论文的全部或部分内容编入有关 数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位 论文。 本学位论文属于 1 、保密口,在年解密后适用本授权书。 2 、不保密团。 ( 请在以上相应方框内打“4 ”) 作者签名: 刷隧轹1 呖 日期:乒一斗年4 月2 9 e 1 日期:。啐年4 月二矽日 硕士学位论文 第1 章绪论 随着计算机与信息技术的飞速发展,各种软件产品应用在社会的各个领域, 计算机软件已经成为一种驱动力,它是进行商业决策的引擎;它是现代科学研究 和工程问题解决的基础;它也是区分现代产品和服务的关键因素。它在各种类型 的系统中应用,如交通、医药、通讯、军事、产业化过程、娱乐、办公等等。 软件在现代社会中的确是必不可少的,而且当我们进入2 1 世纪,软件将成为从基 础教育到基因工程的所有各领域新进展的驱动器,计算机软件是无所不在,人们 把软件看作是生活中现实的技术。在很多情况下,人们把他们的工作、他们的舒 适、他们的安全、他们的娱乐、他们的决策、甚至他们的整个生活都依赖于计算 机软件,软件千万可不能出错,提高软件产品的质量自然成了人们所关注的焦点。 软件质量的低下已经使美国经济蒙受巨大损失,n i s t 估计,每年损失约6 0 0 亿美 元,而s t a n d i s h 组织的数据则是2 0 0 0 亿美元。所以改进软件质量已成为取得高投 资回报率( r o i ) 的直接途径,只有那些把握了软件质量的企业才会赢得胜利, 其余的则将被人们所遗忘。由此看来,不管是软件的使用者还是软件的生产者, 高质量的软件产品是大家所共同期望的。 软件工程是现代软件设计的重要方法,是高质量、高可靠性软件设计的基础。 软件测试是软件工程的重要内容,软件测试是发现软件错误、提高软件可靠性的 重要手段。软件工程的概念是为解决当时的软件危机提出来的,为了解决这场危 机,软件从业人员、专家和学者做不少工作,现在人们逐步认识到所谓的软件危 机实际上仅是一种状况,那就是软件中有错误,正是这些错误导致了软件开发在 成本、进度和质量上的失控。因为软件是由人来完成的,其中不可能没有错误, 而且有许多环境等不可估量的因素也会影响到软件的正确性,关键问题在于我们 如何去避免错误的产生以及消除已经产生的错误,使程序中的错误数达到尽可能 低。 随着软件工程的发展,各项新的技术不断涌现,如为了程序更易于理解开发 的结构化程序设计语言;为了提高重用性开发的面向对象的程序设计语言;为了 避免产生不正确的需求理解的形式化描述语言,虽然各种程序语言对于提高软件 生产效率起到了一定的积极作用,但它对整个软件质量提高没有多大的影响,只 是把软件开发的各阶段分工更明确,每个阶段都要进行严格的质量控制,从而使 得软件质量控制更易管理。 对于软件来讲,不论采用什么技术和什么方法,软件中仍然会有错。采用新 的语言、先进的开发方式、完善的开发过程,可以减少错误的引入,但是不可能 面向对象软件的回归测试策略研究 完全杜绝软件中的错误,这些引入的错误需要测试来找出,软件中的错误密度也 需要测试来进行估计。测试是所有工程学科的基本组成单元,是软件开发的重要 部分。自有程序设计的那天起测试就一直伴随着。统计表明,在典型的软件开发 项目中,软件测试工作量往往占软件开发总工作量的4 0 以上。而在软件开发的 总成本中,用在测试上的开销要占3 0 到5 0 。如果把维护阶段也考虑在内, 讨论整个软件生存期时,测试的成本比例还会增加,因为维护工作相当于二次开 发,乃至多次开发,其中必定还包含有许多测试工作,主要是回归测试a 1 1 研究背景 1 1 1 软件测试和回归测试 通俗地讲,软件测试是发现并指出软件系统缺陷的过程。缺陷在开发和维护 的任何阶段都有可能发生,并由此产生一个或多个“漏洞”一一错误、误解和冗 余,有时甚至会误导开发者。测试包括寻找缺陷,但不包括跟踪漏洞及其修复。 换句话说,测试不包括调试和修复1 3 1 。 1 9 8 3 年i e e e 提出的软件工程标准术语中对软件测试的定义为:使用人工或 自动手段来运行或测定某个系统的过程,其目的在于检验它是否满足规定的需求 或弄清预期结果与实际结果之间的差距。 软件测试的信息流如图1 1 所示: 图1 1 软件测试信息流 软件测试过程主要包括测试用例的编写,测试环境的配置,然后执行测试用 例,对测试的结果进行评价,如果符合要求就完成软件测试。如果有错误就要 进行错误修改,修改后为了保证软件的正确性,又要进行测试,这一些测试是为 了确认修改的正确性以及修改不会有负面影响,这也就是回归测试。在软件的维 护阶段,也会出现一些错误或添加新的功能,因是原有系统的基础上修改所以 修改后也必须进行回归测试。 回归测试和开发过程中的测试明显的不同是测试用例的来源和两者进行的频 硕士学位论文 率,回归测试的大部分测试用例是从开发过程中的测试用例库中取得,只有少部 分新增加的功能的测试用例需要重新编写;回归测试在每一次修改后就要进行, 这是为了确保软件的正确性,而开发过程中的测试是在软件每一阶段完后进行的 一次性测试,不需重复进行。 1 1 2 面向对象软件的回归测试 软件测试的整体目标就是保证程序的正确性。在测试中,执行程序所有可能 的输入来确保程序的正确性是仅有的方法,但通常是不可能的。因此,用系统化 的测试方法产生一个代表性的测试用例集,能够覆盖到按某一种选择准则的程序。 通常有两种形式的测试用例覆盖:基于规格的和基于程序的1 4 1 。在基于规格的测 试,也就是黑盒测试中,测试用例的产生是表明程序满足规格说明中功能和性能 说明。基于规格的测试用例通常是程序需求分析人员手工创建的:在基于程序的 测试中,也就是白盒测试,测试用例是根据程序的实现中的某一些代码来决定, 如所有的语句,分支,数据依赖或执行路径。基于程序的测试,通常可能采取自 动化的分析方法。因为基于规格的测试和基于程序的测试两者相互补充,所以在 测试中两者都会使用。 面向对象软件技术利用可重用性提高了软件开发的效率,对可重用的部分的 可靠要求更高,因为软件开发过程不可避免的人为的错误或者对软件规格的理解 错误,所以对其进行测试是必须的。随着面向对象软件开发技术的成熟,软件的 规模越来越大,对其进行小部分修改后要回归测试,如果对所有的测试用例重新 执行就会开销很大,为了减少测试成本和确保软件的可靠性必须有选择性的执行 一些测试用例来发现软件中的错误。对于面向对象技术所开发的软件和其他方法 所开发的软件,基于规格的测试是相同,但对于基于程序的测试就有很大的区别, 因为面向对象技术的特征对测试其所开发的程序有很大的影响,相应的其回归测 试也一样影响,在选择需重新执行的测试用例时必须考虑面向对象技术的特征。 1 1 3 回归测试的策略 回归测试是一项最费时又耗人力物力的活动,但对保证软件的质量有很重要 的意义,回归测试的主要过程是选择测试用例集覆盖所有修改以及修改影响的部 分,然后执行这些测试用例以验证修改后的软件的正确性,因为要重用以前的测 试用例,所以回归测试时的测试用例的执行与软件开发过程中的测试的执行是一 致的,不然重用测试用例就没什么意义。因此回归测试的关键是采取什么样的技 术策略处理原有的测试用例库,从中选择一个测试集能安全有效的检测出程序中 面向对象软件的回归测试策略研究 错误,这就是回归测试的策略研究的重点。 在回归测试策略研究中,安全性是首先要考虑的,如果一个测试集按照某一 准则l s i 覆盖了程序,那么就称这个测试集对于这个选定的准则是充分的,被认为 充分性测试的程序也就是经过一个充分的测试集测试的程序。w e y u k e r t s 】提出了一 系列的测试数据充分性公理,这些公理揭露了基于程序的测试充分性准则中的不 足,以及在使用这些准则时要注意的,回归测试时选择测试用例也要考虑到这些 充分性公理。其次是要考虑回归测试的效率,要尽可能最小化回归测试用例集, 或者按某些准则来决定测试用例的执行顺序,例如那些回归测试时被选择的频率 较高,查错率较高的测试用例的优先级就要高,回归测试时就要先执行,尽早尽 快的找出软件的错误,提高回归测试的效率。 从以上可知,回归测试的策略研究有三个方面:首先是修改影响分析策略, 主要从分析的粒度方面来考虑;其次是测试顺序的策略,根据一定的覆盖准则、 测试频率准则、查错率等来进行测试用例的选择:还有是怎样进行测试用例选择, 如随机测试用例集选择、最小化测试用例集选择、安全性测试用例集选择等等。 1 2 回归测试的研究现状 回归测试是尽力验证修改后的软件的正确性,并为了保证软件的修改没有引 入新的错误到已经测试过的代码中,回归测试必须进行。在开发阶段,一个程序 发现有错误并更正后就要进行回归测试:尤其在软件的升级维护过程中,回归测 试就更加频繁使用。回归测试在软件的生命周期中占有很重要的位置,而且其开 销也是比较大,软件维护占软件产品成本的2 3 之多,而回归测试则是占了软件 维护的成本的大部分,因此为了减少软件的成本,就得减少软件回归测试的成本, 许多研究人员在这方面做了很多工作,使回归测试更有效、更可靠。在回归测试 中有四个基本问题:1 ) 怎样鉴别修改所影响的部分( 修改影响分析) ;2 ) 采取什 么的策略来重测修改的部分;3 ) 重测部分的覆盖准则是什么? 4 ) 如何选择、重 用和修改现存的测试用例以及生成新的测试用例。回归测试的研究范围很广,包 括测试环境和自动化【7 l 以及捕获回放机制f 8 】对回归测试提供的支持,回归测试选择 技术1 9 ,1 0 ,1 1 1 ,测试的覆盖率 1 2 1 ,以及测试用例的优化1 1 3 1 4 1 和新老测试用例的维护忡i , 还有回归测试的可测试性l l l 以及回归测试的过程管理。 回归铡试选择技术是回归测试研究的重点,从已有的测试用例集中用不同的 策略方法选择合适的测试用例进行回归测试是值得研究的,目前在回归测试研究 中的许多这方面的选择方法和算法。l e u n ga n dw h i t e i ”嚏议把原始的测试用例分 成可重用的测试用例、可重测的测试用例、可丢弃的测试用例、新增加的与程序 结构相关的测试用例、新增加的与规格说明相关的测试用例,然后根据软件的修 硕士学位论文 改从这五类测试用例中选择合适的测试用例来进行回归测试。他们也提出了模块 之间的集成级的回归测试方法 1 a ,1 9 1 。在文献【2 0 中提到一种程序切片算法,先用切 片算法分解程序,然后根据改变代码和没有改变的代码之间的关系来选择测试用 例。一种把数据流测试和增量数据流分析相结合用来进行单元和集成级回归测试 的策略在文献 2 1 】中描述。h a r r o l de ta l l z z l 使用程序中改变版本与原始版本之间在 控制流图上的区别以选择测试用例进行回归测试,在一定条件下这是种安全而 高效的回归测试策略。基于以上所提的方法开发了一些软件测试工具1 * 9 i 。 评估和比较各种回归测试技术方法的有效性、安全性,为软件回归测试技术 的发展起到很大的促进作用。在文献【2 3 】中提出了一种测试成本模型,比较各种 回归测试选择策略在一定条件下的测试成本以及与r e t e s t a l l 策略成本的关系。各 种回归测试算法比较既有理论分析框架 2 4 1 上的研究,也有用实验l 来证明各算法 的优劣。 随着面向对象技术的成熟,现在的大部分软件产品使用面向对象方法编写, 所以面向对象的回归测试技术也逐渐成了回归测试研究中的重点。由于面向对象 技术的特点,以前面向过程的数据流和控制流程序分析方法已不太适应,需要做 部分调整,面向对象软件中主要是对象之间的依赖关系以及各种类之间的继承和 组合关系,对象之间通过消息相互操作及影响。l e u n ga n dw h i t e i ”,2 6 l 提出了回归 测试的防火墙概念,d a v i dc k u n g 等1 2 7 1 针对面向对象的程序扩展为类防火墙,以 类为测试的基本单元,先标识出改变的类与受改变影响的类,即构造一个类防火 墙,然后对类防火墙中的类根据对象关系图以一定的顺序进行回归测试。在文献 f 2 8 中提出了一种利用程序结构的静态信息分析和跟踪程序运行时的调用关系来 选择测试用例重测修改后的软件。还有许多针对不同面向对象语言特点进行的回 归测试选择技术方面的文章3 0 j 。总之, 动,各种研究都主要是围绕着降低成本, 性,尽可能找出软件中未发现的错误。 1 3 本课题的研究内容 回归测试是一项很耗时,成本很高的活 减少测试时间,但又要确保软件的可靠 回归测试是软件测试和软件维护阶段的一项很重要的活动。随着软件产品在 现代社会中的广泛使用,软件的质量就受到更大的关注,为了确保软件的质量, 软件的测试和回归测试就受到重视,尤其是在软件测试和回归测试的成本节约方 面,国内外做了很多研究。本文的重点是围绕回归测试四个基本问题中的第一个, 即如何鉴别修改影响的部分,做了以下几方面的工作。 ( 1 ) 针对面向对象软件的特点,在本文中提出了一种类成员防火墙回归测试 策略。这是一种基于程序的回归测试,并且是在类成员粒度上,先对源程序进行 面向对象软件的回归测试策略研究 分析,根据每一种面向对象软件语言的特点,利用类层次分析( c h a ) 方法计算 类成员之间的依赖关系,然后用类成员依赖图( m d g ) 构造算法得到源程序对应 的类成员依赖图,为修改影响分析提供基础。 ( 2 ) 在修改影响分析中,扩展d a v i dc k u n go z 7 1 的类防火墙,先定义了8 种基 本情况的类成员防火墙,即修改和修改所影响的有特定属性的集合,这些防火墙 的构造是根据前面的类成员依赖图而得的,随后把面向对象程序中的修改根据各 种情况由以上的8 种基本情况组合而成。在源程序修改后,整个程序修改的类成 员及修改所影响的类成员都放入类成员防火墙中,为回归测试时测试用例的选择 提供依据。 ( 3 ) 本文中提出了一种源程序分析框架,把源程序转化成语法树,方便源程 序的分析。首先把源程序语言的语法规则转化为j a v a c c 的输入脚本,并且在这 个脚本中加入一些操作,这些操作是根据特定的需要而加的,然后利用j a v a c c 工具就可以得到我们所需要的词法语法分析器,只要把源程序通过这个词法语法 分析器就可以得到与源程序相应的语法树,在这语法树中包含了源程序的深层结 构,通过遍历语法树就可以得到我们所需要的信息,例如源程序中所包含的类、 类成员,以及类成员之间的依赖关系。 ( 4 ) 本文最后以目前较为流行的面向对象编程语言j a v a 所编写的一般应用程 序为研究对象,设计实现了一个原型系统。首先利用j a v a c c 生成j a v a 语言的源 程序解析器,这个解析器可对给定的一个可编译执行的j a v a 源程序进行分析,得 出相应的语法树,通过语法树可以获取类成员之间的关系,为类成员依赖图的构 造提供输入。然后利用类成员依赖算法构造依赖图,在类成员依赖图上进行修改 影响分析,得到程序修改后所影响的类成员放入集合中,即类成员防火墙。为下 一步测试用例的选择提供依据。 本文的组织结构如下:第二章描述了回归测试的一些基本概念以及回归测试 与软件测试之间的关系;第三章讨论了面向对象软件的特点及这些特点对测试的 一些影响,还有各种相应的测试策略;面向对象类成员防火墙的回归测试策略在 第四章中做了详细介绍;第五章设计实现了一个原型系统对j a v a 源程序进行分 析;最后得出结论并展望了本课题的下一步工作。 第2 章回归测试 在软件测试和维护过程中,软件修改后是否解决了已知的错误或者提供了新 的功能,为了达到以下目标必须对软件进行重新测试:1 ) 确保新的规格说明被正 确实现;2 ) 用修改前程序的测试用例对修改后的程序是否能够正常执行;3 ) 测 试那些以前还没有被测试过的应用程序。其中那个用修改前程序的测试用例来验 证修改后的程序是否正常执行的过程就是回归测试,其验证主要包括程序的修改 是否达到了目的和是否引入了新的错误这两个问题,回归测试可以认为是软件测 试的一个子过程。 2 1 回归测试的术语 假设p 是一个程序,p 是p 个修改后的版本,s 和s 分别是p 和p 的规格 说明。p ( i ) 是p 的输入i 所对应的输出,p ( i ) 是p 的输入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 ) 表示 输入i n p u t 所对应的一个规格说明输出。简单的说,标识符t 所表示的一个测试 。 选择重测技术使用现存的测试用例以及先鉴别哪部分程序和规格说明修改了 需要测试,这样能够减少一个修改程序测试的成本。选择重测技术不同于重新运 行所有现存测试集的r e t e s t a l l 技术。l e u n g a n dw h i t e t :3 1 用成本模型表明选择重测 技术比r e t e s t a l l 技术要经济得多,即使选择一个测试子集要花费一定的成本,但 与运行测试用例的成本相比,这种开销很少,我们可以忽略不计。 一个典型的选择重测技术的过程如下: ( 1 ) 选择t _ c t ,用来测试p 的测试用例集; ( 2 ) 执行t 中的测试用例,验证p 的正确性; ( 3 ) 如果程序p 添加了新的功能,就创建一个新测试用例集t ”; ( 4 ) 执行t ”中的测试用例验证p 中新增功能的正确性; ( 5 ) 创建一个测试用例集t ”,包括程序p 的新铡试用例集和历史测试用 例集。 在所有的步骤中,选择重测技术强调四个问题。每一步强调回归测试选择问 面向对象软件的回归测试镱略研究 题,从t 中选择个子集t 来测试p ;第三步强调覆盖率问题,确保p 或s - 是 否需要有新的测试用例集;第二步和第四步强调测试用例的执行问题,执行测试 用例检查输入对应的输出的正确性;第五步强调测试用例集的维护问题,更新和 保存已有的测试信息,为下一阶段的测试提供条件。虽然每一个问题都是很有意 义,但我们集中精力在回归测试选择这个问题上。我们主要是针对基于代码的回 归测试选择技术,其主要依赖于p 和p 的分析来决定测试用例的选择。 2 2 回归测试的分类 回归测试根据执行的时间可分为一般的回归;j ! j f 试、最终回归测试和维护回归 测试。一般的回归测试适用于各个测试阶段中,验证前一次测试中失败的测试用 例和产品的有效性。一般的回归测试可以在一段时问就使用一个更新了的版本( 基 于测试用例的测试) ,但是般说来在一个回归测试中尽量保证被测版本不变是有 益的。在执行最终回归测试的时候要求被测试的版本在一段时间内是固定不变的, 也就是在产品发布中经常说到的“烹饪时问”。在这段时间里面,产品会被反复的 测试,某些测试用例可能要被执行好几次,以确认在发布版本中不会存在用户在 使用过程中会遇到b u g ,所有的基于发布版本的b u g 修改工作应当在最终回归测 试前完成。由于最终回归测试所要测试的对象是将要发布给用户的版本,所以最 终回归测试是相当重要的,因为通过最终回归测试的版本就是用户将要使用的版 本。最终回归测试适用于产品正式发布前的创建版本,验证发布版本的有效性。 维护回归测试是在软件维护阶段软件出现了以前未发现的错误修改后进行的测试 或者用户有新的要求,对软件进行了性能改进或添加新的功能后对软件进行的测 试。 回归测试根据软件的规格说明是否改变分为改进性的回归测试和验证性的回 归测试m i 。改进性的回归测试涉及到软件规格说明的修改,无论什么时候,系统 有新功能增加需求时,软件的规格说明将也随之修改,以记录这些新的附加功能, 一般情况下,新的模块也将会增加到软件系统中,这样系统修改了必须进行软件 规格说明修改的回归测试。验证性的回归测试是在软件规格说明没有更改,仅仅 是一些程序的设计与实现修改了,这就表明测试计划中那些只与输入输出相关, 而与程序的设计与实现无关的测试用例就仍然是有效的,这样这些测试用例仍然 可以用来验证软件系统的正确性。而当软件的控制流和数据流 例如程序算法改 进、代码重构等性能优化) 结构修改后,对于那些与这结构相关的测试用例就不 可以被重用了。验证性的回归测试经常是在软件测试出错误后且错误被更正后进 行的。表2 1 中列出了两种回归测试的主要区别:改进性回归测试是在软件进行 适应性和完整性修改维护时做的,而验证性回归测试是在软件开发周期中软件错 硕士学位论文 误更正后做的。因为适应性和完整性修改维护是有固定的时间间隔,例如六个月 进行一次,所以改进性回归测试通常是以一定的规则的时间间隔进行的。相反, 程序在任何时候出现错误时就必须立即改正,因此验证性回归测试是在每一次程 序改正后进行的,没有固定的时间间隔。 表2 1 验证性回归测试和改进性回归测试的区别 验证性回归测试改进性回归测试 1 规格说明没有改变1 规格说明改变 2 改变的代码较少( 如增加或删2 改变的代码较多( 如增加或删 除语句)除模块) 3 通常在开发阶段和错误改正维3 通常在适应性和完整性修改维 - 护过程中进行护过程中进行 4 很多测试用例可重用4 可重用测试用例较少 5 没有固定时间间隔执行5 在固定时间间隔执行 2 3回归测试与软件测试的区别 大部分人认为回归测试是测试的一个简单的扩展,其实不是这样的,两者之 间主要有以下几点不同。 ( 1 1 测试计划的有效性:测试开始于软件的规格说明,在软件的规格说明编 写、软件设计和编码阶段进行软件规格的实现和增加测试用例到测试计划中,测 试时按照测试计划执行测试用例,所有的测试用例都是新的,从来还没有执行过。 回归测试则开始于一个可能已经修改进的规格说明、一个已经修改过的程序以及 一个需要更新的老的测试计划,测试计划中的所有测试用例曾经用来测试过以前 版本的程序。 ( 2 ) 测试的范围:测试的目的是检查整个程序的正确性,包括每一个单独的 组件( 例如函数和过程) 和这些组件之间的相互协调。回归测试虽然也关心程序 的正确性,但其着重检查部分程序的正确性,因为没有被改变和改变所影响的部 分就不必要进行检查,其中有效的查找出改变所影响的部分程序是值得研究的t - j 题。 ( 3 ) 时间分配:测试时间一般在软件产品开发之前就计划好,而且这个时间 可能占整个产品开发时间的一半以上,但回归测试时间通常是不可预算的,尤其 是验证性回归测试,一旦发现软件错误就得更正并立即进行验证性回归测试,看 修改是否达到目的。因此回归测试一般在软件出现问题后进行的,测试人员通常 面向对象软件的回归测试策略研究 在有限的时间内要尽可能快而有效的完成软件的回归测试。 ( 4 ) 软件开发信息:在测试过程中,开发与测试可以交错进行,开发的每一 个阶段完成后就可以进行测试,还有基于测试驱动的开发,开发小组和测试小组 可能是同一个小组。即使有独立的测试小组,测试人员也可经常与开发小组进行 交流,可以了解软件开发中很多信息便于测试的进行。但在回归测试中,测试人 员不再是软件的开发人员,因为回归测试可能在不同的时间和地点,以前的开发 人员也可能走了,这时回归测试要想取得成功必须依赖于以前留下的所有与软件 产品相关的文档信息。 ( 5 ) 完成时间:次完整的回归测试所需的时间比软件开发测试的时间要少, 因为回归测试只要测试软件程序的一部分,但软件产品的所有回归测试的时间则 比软件开发测试的时间要长得多。 ( 6 ) 频率:一般的测试是软件产品完成之前进行的活动,一旦软件产品完成 投入使用后,这时所有测试将被认为是回归测试。回归测试在软件产品的生命周 期中要进行许多次,软件产品每一次修改后就要进行回归测试,所以回归测试的 频率比较高。 2 4 回归测试与软件测试的相似点 回归测试和测试在几个方面是类似的,尤其是两者的目的和测试执行的技巧 是一样的。 目的:测试和回归测试的目标是一样,他们都是1 ) 增加对程序正确性的自 信:2 ) 发现程序中迄今尚未发现的错误;另外回归测试还有一些目标:3 ) 保证 软件的质量,修改后的软件至少应该比前版本的软件更可靠;4 ) 保证软件能够 继续运行,因为有一些用户对软件产品有很强的依赖性,软件开发人员有职责使 软件能够为用户提供相同的服务。 测试执行方法:因为测试计划中的测试用例是固定不变的,而仅仅依赖于选 择的测试执行方法,因为回归测试中要重用以前的测试用例,所以测试与回归测 试所使用的测试执行方法也必须相同。如果回归测试使用不同于以前测试用的方 法,那么就很难重用现有的测试计划中的测试用例。另外使用同一测试方法的原 因是对于相同的测试方法可以评价比较两种版本软件产品的质量。在当前情况下, 很难比较两种不同测试方法的测试效率。 硕士学位论文 第3 章面向对象软件的回归测试 面向对象技术本身不能保证软件产品的正确性。虽然面向对象程序设计可以 得到一个较好的系统体系结构,面向对象编程语言也能加强代码的规范化,但也 有可能是编程人员的错误和对软件规格说明的理解错误而导致软件产品的错误。 因此面向对象软件系统仍然需要测试。而且,对于在多个上下文环境中重用的组 件必须进行严格的组件测试,以防止错误的扩散。 3 1 面向对象软件的特点 s t e p h a n eb a r b e y i ”i 等人提出了面向对象体系结构与传统的结构化体系结构的 基本的不同,其表明传统的结构化软件测试技术不能满足面向对象软件的测试, 同时也详细讨论了面向对象编程的封装性、继承性和多态性等属性。 3 1 1 封装性 面向对象软件的一个重要特征就是封装性,把数据和对数据操作的方法封装 在一起形成类。且类的封装限制了对象属性对外的透明性和外界对它的操作权限, 这在一定程度上避免了不合理的操作并能有效地防止错误的扩散,从而改善和提 高了软件的可靠性。 封装是一种信息隐蔽技术。用户只能见到对象封装界面上的信息,对象内部 对用户是隐蔽的。其目的在于将对象的使用者与设计者分开,使用者不必了解对 象行为的具体实现,只需用设计者提供的消息来访问该对象。 封装应该具有如下几个条件: ( 1 ) 具有一个清楚的边界,对象私有数据、内部程序( 成员函数) 细节都被 限定在这个边界内。 ( 2 ) 具有一个接口,这个接口描述对象和其它对象之间的相互作用、请求和 响应,即消息。 ( 3 ) 对象内部的实现细节受封装壳保护,其它对象不能直接修改对象所拥有 的数据和代码。 面向对象软件的回归测试策略研究 3 1 2 继承性 继承是面向对象描述类之间相似性的一个重要机制。在现实世界中大量的实 体都存在一定程度的相似性。这种相似性可能表现在实体的外形上,也可能表现 在实体的行为和内在特性上。人们总是希望能够最大程度地利用种种相似性,不 仅在管理系统的类的时候,在定义新的类的时候也隶望通过利用这种相似性来简 化工作,并重用以前的工作。面向对象利用继承来表达这种相似性,这使得可以 利用继承来管理类,同时也使得在定义一个与先前已经定义的类相似的类时能简 化类的定义工作。 继承也刻画了类的一般性和特殊性,被继承的类可称父类或超类,继承的类 可称为子类。可以看出,继承这种机制使得类的描述具有了层次结构,处于同一 层次结构中的类共享顶层类所定义的属性和操作。因此继承机制使类从一开始就 具有了继承和被继承的能力,简而言之,就是具有了重用和被重用的能力。 3 1 3 多态陛和动态绑定 多态性是指对象的某个行为具有多种形态的特性。行为的多种形态封装在对 象内部,外界并不知道。一个行为的多种形态从外界看来具有相同的行为名称( 也 即相同的消息名) ,因此外界看到的只是一种行为。具体应该执行哪种形态由对象 自己根据接收到消息里的相关参数决定。 3 2 面向对象软件的特点对测试的影响 从1 9 8 2 年在美国北卡罗来纳大学召开首次软件测试的正式技术会议至今,软 件测试理论迅速发展,并相应出现了各种软件测试方法,使软件测试技术得到极 大的提高。然而,一度实践证明行之有效的软件测试对面向对象技术开发的软件 多少显得有些力不从心。尤其是面向对象技术所独有的多态,继承,封装等新特 点,产生了传统语言设计所不存在的错误可能性,或者使得传统软件测试中的重 点不再显得突出,或者使原来测试经验认为和实践证明的次要方面成为了主要问 题。 面向对象程序的结构不再是传统的功能模块结构,作为一个整体,原有集成 测试所要求的逐步将开发的模块搭建在一起进行测试的方法已成为不可能。而且, 面向对象软件抛弃了传统的开发模式,对每个开发阶段都有不同以往的要求和结 果,已经不可能用功能细化的观点来检测面向对象分析和设计的结果。因此,传统 的测试模型对面向对象软件已经不再适用。针对面向对象软件的开发特点,在文 硕士学位论文 献【3 2 】中提出了一种新的测试模型。 面向对象的开发模型突破了传统的瀑布模型,将开发分为面向对象分析 ( o o a ) ,面向对象设计( o o d ) ,和面向对象编程( o o p ) 三个阶段。分析阶段 产生整个闯题空间的抽象描述,在此基础上,进一步归纳出适用于面向对象编程 语言的类和类结构,最后形成代码。由于面向对象的特点,采用这种开发模型能 有效的将分析设计的文本或图表代码化,不断适应用户需求的变动。针对这种开 发模型,结合传统的测试步骤的划分,提出一种整个软件开发过程中不断测试的 测试模型,使开发阶段的测试与编码完成后的单元测试、集成测试、系统测试成 为一个整体。测试模型如3 1 图所示: o o at e s t :面向对象分析的测试 o o dt e s t :面向对象设计的测试 o o pt e s t :面向对象编程的测试 0 0u n i tt e s t :面向对象单元测试 o o i n t e g r a t et e s t :面向对象集成测试 o o s y s t e mt e s t :面向对象系统测试 图3 1 面向对象测试模型 o o at e s t 和o o dt e s t 是对分析结果和设计结果的测试,主要是对分析设计 产生的文本进行,是软件开发前期的关键性测试。o o p t e s t 主要针对编程风格和 程序代码实现进行测试,其主要的测试内容在面向对象单元测试和面向对象集成 测试中体现。面向对象单元测试是对程序内部具体单一的功能模块的测试,如果 程序是用j a v a 语言实现,主要就是对类成员函数的测试。面向对象单元测试是进 行面向对象集

温馨提示

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

评论

0/150

提交评论