(计算机应用技术专业论文)基于修改影响分析方法的错误定位技术.pdf_第1页
(计算机应用技术专业论文)基于修改影响分析方法的错误定位技术.pdf_第2页
(计算机应用技术专业论文)基于修改影响分析方法的错误定位技术.pdf_第3页
(计算机应用技术专业论文)基于修改影响分析方法的错误定位技术.pdf_第4页
(计算机应用技术专业论文)基于修改影响分析方法的错误定位技术.pdf_第5页
已阅读5页,还剩52页未读 继续免费阅读

(计算机应用技术专业论文)基于修改影响分析方法的错误定位技术.pdf.pdf 免费下载

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

文档简介

摘要l :海师范大学硕士学位论文 摘要 随着软件技术的发展,软件测试已经变得越来越受到重视。作为保证软件可 靠性,提高软件质量的一个环节,回归测试是软件测试中比重极大的一个部分。 在回归测试中,由于测试的失败预示着程序中存在错误,这就需要测试人员找出 引发错误的原因。目前现存的错误定位方法主要由测试人员在程序中设置断点等 措施,跟踪程序运行进程,期望通过堆栈比对找出错误代码。但是,这是一个费 时费力的过程。尤其是在面向对象的软件开发中,由于继承,动态绑定等特性, 使得程序运行的过程变得十分复杂,也使得人工跟踪程序进程变得冗长而低效。 本文利用修改影响分析方法分析面向对象程序,解析了对程序的修改的内部 关系,并将这种关系利用于错误定位的过程之中,从而减少测试人员的工作量, 提高测试效率。 本文首先介绍了面向对象软件测试和回归测试,重点介绍了面向对象方法和 回归测试的策略。 接着,本文重点研究了三种错误定位方法,并这三种错误定位方法进行分析, 比较它们的优缺点。在此基础上,本文详细研究了修改影响分析方法在面向对象 软件中的应用,从而提出了一种新的基于修改影响分析方法的错误定位技术。该 方法首先将对程序的修改解析为基修改和基修改簇,并分两个阶段将错误定位至 基修改,从而减轻测试人员的工作量。 最后,本文构建了使用该方法的测试插件,并将该方法应用于实际项目,实 验证明该方法能有效且准确的定位出错误,具有一定的实际使用价值。 关键词:修改影响分析、错误定位、面向对象的回归测试 a b s t r a c t w i t ht h ed e v e l o p m e n to fs o f t w a r ee n g i n e e r i n g ,s o f t w a r et e s ti sb e c o m i n gm o r e a n dm o r ei m p o r t a n t r e g r e s s i o nt e s ti su s e dt oe n s u r et h er e l i a b i l i t yo ft h es o f t w a r e a n dt oc o m f i r mt h eq u a l i t yo fd e v e l o p i n g ,i nw h i c ht e s tf a i l u r ei n d i c a t e sp o t e n t i a l d e f e c t si nt h es o f t w a r e t h e r e f o r e ,t e s tp r o g r a m m e rn e e d st of i n dt h er e a s o no ff a i l u r e , w h i c hi sab u r d e n e da n dh i 曲c o s tt a s kt os e tu pb r e a kp o i n ta n df o l l o wt h ep r o g r a m r u n n i n g ,e x p e c t i n gt of i n dt h ed i f f e r e n ti ns t a c kt ol o c a lt h ef a u l t s e s p e c i a l l yi n o b j e c t o r i e n t e dd e v e l o p i n g ,b e c a u s eo ft h eu s eo fi n h e r i ta n dp o l y m o r p h i s m ,i ti st o o d i f f i c u l tt of o l l o wt h ep r o g r a mr u n n i n g ,a n dl e a d st oah i g hc o s ti nf a u l tl o c a l i z a t i o n i nt h i sp a p e r , w ep r o p o s ean e wf a u l tl o c a l i z a t i o nm e t h o du s i n gt h ec h a n g e i m p a c ta n a l y s i st od e t e c tt h er e l a t i o n s h i p si no b j e c t - o r i e n t e ds o f t w a r ei no r d e rt o r e d u c et h ew o r ko fp r o g r a m m e ra n di n c r e a s et h ee f f i c i e n c y f i r s t l y , w ei n t r o d u c et h eo b j e c t - o r i e n t e dm e t h o da n dr e g r e s s i o nt e s t t h e nw e i n t r o d u c et h r e ek i n d so ff a u l tl o c a l i z a t i o nt e c h n o l o g i e s b a s e do nt h es t u d y i n go f c h a n g ei m p a c ta n a l y s i s ,w ep r o p o s ean e wf a u l tl o c a l i z a t i o nm e t h o db a s eo nc h a n g e i m p a c ta n a l y s i s w ed e s i g na n db u i l dat e s t i n gt o o lt op r a c t i c et h em e t h o da n d e v a l u a t ei ti nar e a l i s t i cp r o j e c t t h ee x p e r i m e n t ss u g g e s tt h ef a u l tl o c a l i z a t i o nm e t h o d i se f f e c t i v ea n da c c u r a t et ol o c a lt h ef a u l to fc h a n g i n gi nr e g r e s s i o nt e s t k e y w o r d s :c h a n g ei m p a e ea n a l y s i s ,f a u l tl o c a l i z a t i o n ,o b j e c t o r i e n t e dr e g r e s s i o nt e s t 学位论文独创性声明 本论文是我个人在导师指导下进行的研究工作及取得的研究成果。论文中除 了特别加以标注和致谢的地方外,不包含其他人或机构已经发表或撰写过的研究 成果。其他同志对本研究的启发和所做的贡献均已在论文中做了明确的声明并表 示了谢意。 做作者签名。已钐擐 论文使用授权声明 日期: 砷川7 本人完全了解上海师范大学有关保留、使用学位论文的规定,即:学校有权 保留送交论文的复印件,允许论文被查阅和借阅;学校可以公布论文的全部或部 分内容,可以采用影印、缩印或其它手段保存论文。保密的论文在解密后遵守此 规定。 谳:j t 砰 导师签名:隽瞪 ,、) n 哪 0 卜? y 劢 期 期 第一章绪论上海师范大学硕十学位论文 第一章绪论 1 1研究背景 随着时代的发展,电子信息化已经成为世界的主流,而软件系统正是信息产 业的支柱。在当今软件开发的需求中,对于软件可靠性和安全性的要求已经越来 越高。而软件测试正是保证软件质量的重要手段,从而越来越受到人们的重视。 根据软件工程理论的研究,在当今的系统研发过程中测试部分一般约占总工作量 的4 0 以上,软件测试则会占到软件开发总成本的3 0 至5 0 。特别是对于一 些要求高可靠性、高安全性的软件系统,成本将会更高。因此,如何能够提高软 件测试效率,降低软件测试成本,成为热门的研究问题。 同时,面向对象方法也对软件工程产生深远影响。面向对象的程序设计由于 其重用性好,开发敏捷性高等特点,迅速成为软件开发主流。然而,由于面向对 象方法复杂的继承结构,动态绑定等特点,也使得面向对象软件设计相对于以往 的软件设计方法更容易引入更多的错误,同时,也使得错误定位变得十分困难和 繁琐,使得软件测试的复杂度极具上升。传统的对于面向过程的软件测试方法对 于面向对象的软件已不再完全适用。如何充分利用面向对象方法进行软件测试, 也成为了重要的研究课题。 回归测试是软件生命周期的一个组成部分。在当今的软件开发过程中,不免 需要对程序进行必要的修改。在修改程序形成新的版本之后,为了确定修改达到 要求,避免修改本身引入新的错误,就必须对修改后的程序进行回归测试。在回 归测试中,任一得出异常结果的测试都可能暗示着潜在的错误,从而,就必须对 这一错误进行定位处理,确认是哪些修改或原因引起了测试案例的失败。目前在 软件测试的过程中,往往是由测试人员人工跟踪程序进程,通过设置断点、堆栈 比较等方法进行错误查找。若能构建自动化测试工具,帮助测试人员定位回归测 试中的错误的工作,将能有效的减轻测试过程的工作量,提高工作效率,减低测 试成本,将具有十分重要的意义。 本文的重点研究了面向对象方法的特性,研究了修改影响分析方法【l 】在面向 对象软件设计中的应用,在三种现有的错误定位技术的基础上,研究将修改影响 分析方法应用到回归测试错误定位中,提出了基于修改影响分析方法的错误定位 技术,设计并实现了基于e c l i p s e 的测试插件,实验表明该方法能有效且准确的 定位出错误,具有一定的实际使用价值。 f :海师范人学硕l :学位论文第一章绪论 1 2研究内容和创新点 本文研究的主要内容有以下几个方面: 1 ) 分析了面向对象方法和面向对象软件测试,研究了回归测试,重点研究 了回归测试中的测试策略。 2 ) 研究了三种现有的错误定位技术:基于程序切片【2 】【”,基于d e l t a d e b u g g i n g 4 】【5 】【6 1 和基于代码覆盖率的方法【7 】【8 】【9 】【10 1 。 3 ) 研究了面向对象中的修改影响分析方法,将此方法应用到回归测试的错 误定位中,提出了一种基于修改影响分析方法的错误定位技术。 4 ) 设计实现了基于e c l i p s e 的测试插件,将该工具用于实际的项目中,并对 实验结果进行分析验证。 本文的创新点主要有: 1 1 将修改影响分析方法应用于回归测试中。 2 ) 提出了基修改簇的概念,将错误定位分解为两部分:定位至基修改簇和 定位至基修改,并分别提出了相应的错误定位算法。 3 ) 设计实现了该方法的测试插件,将该工具用于实际的项目中,并对实验 结果进行分析。 1 3课题来源 本文由国家自然科学基金项目( 编号:6 0 6 7 3 0 6 7 ) :软件参数配对测试继承 的若干问题研究( 2 0 0 7 1 1 2 0 0 9 1 2 3 0 ) 资助。 本文实验部分基于上海市引进技术的吸收与创新计划项目:基于数字机顶盒 的支付清算平台( 计划编号:0 7 x i 0 1 2 ) 。 1 4本文的章节安排 本文章节安排如下 第一章绪论。介绍了论文的研究背景、 安排。 第二章面向对象方法与回归测试技术。 测试技术及回归测试方法。 主要工作、论文创新点和论文章节 简要介绍了面向对象软件的特点、 第三章错误定位方法的研究。对目前三种错误定位方法进行介绍,分析比 较这些方法的优缺点。 第四章基于修改影响分析方法的错误定位技术。主要研究了面向对象中的 2 第一章绪论上海师范大学硕士学位论文 修改影响分析方法,给出了基修改簇的定义,提出了本文的核心算法。 第五章实例研究及分析。构建了应用该方法的插件,将该方法应用于基于 数字机项盒的支付清算平台项目,实验结果证明该回归测试错误定位方法是有效 可行的。 第六章总结与展望。对本论文的工作进行总结并提出未来的工作。 1 5关于实验背景的说明 本论文实验基于上海市引进技术的吸收与创新计划项目:基于数字机顶盒的 支付清算平台( 计划编号:0 7 x i 0 1 2 ) 。该项目主要建设基于数字电视网的支付 清算系统,通过以机顶盒内置的读卡设备充当电子支付的终端,配以i c 卡实现 用户数字电视所有选定节目费用的电子化缴付,同时配置电子钱包的功能,满足 在其他业务上的支付需求,建设一个直接面向家庭用户的端到端的电视支付清算 平台系统。 第一二章面向对象方法与同归测试上海师范人学硕士学何论文 第二章面向对象方法与回归测试 2 i 面向对象方法 2 1 1 面向对象方法的主要概念 面向对象方法的概念【1 1 】主要由以下组成: ( 1 ) 对象 对象的特性主要分为三类: 属性,例如颜色,位置或者大小,表示与其他对象的关联和对象本身的状态 方法,即对象可以执行的过程或者提供的服务,例如延伸或者移动,一般称 之为操作或者方法。 规则,规则主要说明对象的属性或者其他特征之间的联系关系,或者对象的 可行条件。 对象是面向对象方法的基本单位,也是概念化、设计或者程序设计的基本单 位,对象是有共同特征的类的实例。 ( 2 ) 类 一个类所包含的方法和数据描述了一组对象的共同行为和属性。一个类定义 了一群总体上相似的对象。类是在对象之上的抽象,对象则是类的具体化,是类 的实例。每个类可以指定若干实例。类可以有子类和父类,从而形成层次结构。 面向对象技术最重要的特性之一就是把一组对象的共同特性加以抽象并存 贮在一个类中;衡量一个面向对象程序设计语言成熟与否的重要标志之一,即为 是否建立了一个丰富的类库。 ( 3 ) 继承性 继承性是类与类之间的一种关系,这种关系保证了类之间能够共享数据和方 法。将被继承的类称为父类,将继承的类称为子类。将从而,在定义一个子类时, 不必重复定义一些相同的部分,而可以在父类的基础之上来进行,把父类所定义 的内容作为子类的内容、并加入若干新的内容。 继承性分为单继承和多重继承两类。一个子类只有一个父类称为单继承;一 个子类有两个或者两个以上的父类称为多重继承。 ( 4 ) 重载 重载指类的同名方法在给其传递不同的参数是可以有不同的运动规律。在对 象间相互作用时,即使接收消息对象采用相同的接收办法,但消息内容的详细程 度不同,接收消息对象内部的运动规律也可能不同。 ( 5 ) 多态性 在收到消息时,对象要予以响应。不同的对象收到同一消息可产生完全不同 上海师范人学硕十学位论文第- 二章面向对象方法与同门测试 的结果,这一现象叫做多态。在使用多态的时候,用户可以发送一个通用的消息, 而实现的细节则由接收对象自行决定,这样,同一消息就可以调用不同的方法。 多念的实现依赖于继承性。需要利用类的继承关系,把具有通用功能的消息存放 在高层次,而不同的实现这一功能的行为放在较低层次,在这些低层次上生成的 对象能够给通用消息以不同的回应。 ( 6 ) 包 现实世界中不同对象间的相互联系和相互作用构成了各种不同的系统,不同 系统间的相互联系和相互作用构成了更庞大的系统,进而构成了整个世界。在面 向对象概念中,把这些系统称为包。 ( 7 ) 接口类 在系统相互作用时,为了不在系统内部的具体实现中纠结,通过设立接口 界面类或对象来与其他系统进行交互,让其他系统只看到是这个接口界面类或对 象,这个类在面向对象中称为接口类。 2 1 2 面向对象程序设计的特点 面向对象程序设计主要有以下特点: ( 1 ) 对象唯一性 每个对象都有自身唯一的标识,通过该唯一标识可找到相应的对象。在对象 的整个生命期中,它的标识都不会改变,不同的对象不能有同样标识。 ( 2 ) 抽象性 抽象性是指将具有一致的数据结构( 属性) 和行为( 操作) 的对象抽象成类。一 个类就是这样一种抽象,它忽略其他一些无关内容,反映了与应用有关的重要性 质。任何类的划分都与具体的应用有关,但实质上这种划分总是主观的。 ( 3 ) 继承性 继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关 系。在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行, 把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。 在软件开发中,类的继承性使所建立的软件具有开放性、可扩充性,这是信 息组织与分类的行之有效的方法,它简化了对象、类的创建工作量,增加了代码 的可重性。 继承性是面向对象程序设计语言不同于其它语言的最重要的特点,是其他语 言所没有的。采用继承性,提供了类的规范的等级结构。通过类的继承关系,使 公共的特性能够共享,提高了软件的重用性。 ( 4 ) 多态性 多态性是指当外部访问相同的方法名时,实际的操作方法取决于具体的对象 6 第二章面向对象方法与同门测试上海师范大学硕+ 学位论文 上,并得到完全不同的结果。当不同的对象收到相同的请求时,可以导致不同的 回应,这种特征称为多态性。 多态性使得每个对象能够以特有的方式来回应相同的消息,增加了软件的重 用性和灵活性。 2 1 3 面向对象软件的特点 使用面向对象思想进行开发有以下特点【1 2 1 : ( 1 ) 易维护 采用面向对象思想设计的结构,可读性高,同时,由于采用了继承,所以即 便需求改变,那么维护也只会限于局部模块,所以维护成本较低的。 ( 2 ) 效率高 面向对象程序设计方法是根据设计的需要对现实世界的事物进行抽象的结 果。使用这样的方法解决问题,能够更接近于自然人的思考方式,从而降低程序 员的门槛,帮助提高软件开发效率。 ( 3 ) 质量高 在设计时,由于较高的可重用性,使得在以往的项目中已被测试过的高质量 模块可以不必再次开发就使系统满足业务需求,从而并具有较高的质量。 ( 4 ) 易扩展 由于继承、封装、多态的特性,能够保证系统结构内部高内聚性和低耦合性, 从而使得系统更灵活、扩展性高。 2 2 面向对象软件测试 2 2 1 面向对象的软件测试和传统测试的比较 一般来说,在传统应用中,单元测试的测试对象为最小的可编译程序单位模 块,在这些单元均被独立测试完成,再在集成测试阶段进行一系列的回归测试。 最后,系统被作为一个整体测试,从而确保目前需求中的不存在错误。传统的软 件测试策略是由小到大,即从“小型测试”开始,逐步走向“大型测试”,在单 元测试完成后,逐步进入系统集成测试,最后是功能性测试和压力测试。 在面向对象程序设计中,系统的结构不再是传统的分离的功能模块,而是作 为一个整体对象和子对象存在。原有的测试方法中,将模块分别测试后再集成在 一起进行测试的方法已经不再适用【l3 1 。而且,面向对象软件抛弃了传统的研发 模式,对每个研发阶段都有不同以往的需求和结果,也不能用功能细化的观点来 检测面向对象分析和设计的结果。因此,传统的测试模型对面向对象软件已不再 适用。 7 上海师范人学硕+ 学位论文 第一二章面向对象方法与同归测试 2 2 2 面向对象软件测试的概述 面向对象的研发模型不同于传统的瀑布模型,在面向对象的开发中,分为面 向对象分析( o o a ) ,面向对象设计( o o d ) ,和面向对象编程( o o p ) 三个过 程。结合传统的测试步骤的划分,面向对象的软件测试可以分为:面向对象分析 的测试,面向对象设计的测试,面向对象编程的测试,面向对象单元测试,面向 对象集成测试和面向对象系统测试等【l4 1 。 ( 1 ) 面向对象分析的测试 在传统的面向过程的需求分析中,功能的分解是主要目标,设计者需要把一 个系统看成能分解的功能的集合。该传统的功能分解分析法的实质是一个系统需 要何种的业务处理过程,以抽象的过程来应对系统需求。而在面向对象分析 ( o o a ) 中,一般直接映射需求集合,将需求集合中的功能全方面的抽象化, 将需求集合中的实例抽象为对象,用对象的结构反映需求集合中的复杂实例和其 之间的关系,用属性和方法表示实例的特性和行为。面向对象分析方法主要是把 e r 图和语义等网络模型,与面向对象程序设计语言中元素关联在一起,其最终 目标是得到问题空间的图表的形式描述。由此,和传统分析方法的比较可以得知, 以o o a 分析得出的系统结构,其行为是相对稳定的,但结构是相对不稳定的, 这与传统分析方法的结果恰恰相反,却更充分反映了现实的特性。因此,对o o a 的测试,应从以下方面考虑: 对认定的结构的测试 对认定的对象的测试 对定义的服务和消息关联的测试 对定义的属性和实例关联的测试 ( 2 ) 面向对象设计的测试 有时,o o d 和o o a 的界限会难以严格分割。o o d 确定的类和类结构不仅 满足当前系统的需求分析,更重要的是通过低耦合,高复用的特性,通过适当补 充或者重新组合,能方便实现功能扩增和覆盖,以适应用户的不断变化需求。在 传统的结构化设计方法中,主要方法是把系统进行功能分解以后,提出一些以实 现系统的基础构造为目标的过程,把需求集合的分析转化为功能模块的设计。而 面向对象设计( o o d ) 采用“一切皆对象的观点,以o o a 为基础归纳出类, 并同时归纳出类之间的关系,层次结构,进而进一步构造为类库。由此可见, o o d 并不是独立于o o a 之外的另一种方法,而是o o a 的更高层的抽象和迸一 步细化。因此,对o o d 的测试,应从如下三方面考虑: 对认定的类的测试 第二章面向对象方法与同门测试上海师范大学硕十学位论文 对类库的支持的测试 对构造的类层次结构的测试 ( 3 ) 面向对象编程的测试 面向对象程序的重要特性是继承、封装和多态等,这对传统的测试策略提出 了改动的需要。面向对象程序中的一个重要特点就是继承,继承极大地提高了代 码的重用率,但同时,也提高了错误传播的概率。面向对象程序设计中的另一个 重要特点就是多态,多态封装了内部方法的处理,但同时却使得程序内方法的行 为显得十分复杂化,在测试时,就必须考虑不同类型的代码行为。封装是对内部 数据的隐臧处理,外界只能通过被提供的方法访问或修改类内部的数据,这样就 降低了传统程序中对数据非法操作的可能,也降低了数据被任意读写和修改的可 能。因此,在面向对象编程( o o p ) 阶段的测试,需要简化类内部的功能细则, 将测试的主要目标集中于类的功能实现以及与之相配的面向对象程序风格,主要 体现为以下两个方面。 数据成员是否满足数据封装的需求 类是否实现了需求的功能 ( 4 ) 面向对象的单元测试 在传统的面向过程的软件开发中,单元测试的对象是软件运行的最小单位: 模块。单元测试一般采用白盒测试,系统内的多个模块一般来说能够互不相关地 并行测试。单元测试通过对模块功能的需求描述制定测试计划,根据测试计划对 模块设计测试用例,从而发现模块内的错误。而在面向对象软件中,单元的概念 不同于传统软件。在面向对象软件测试中,最小的可测试单位是类。通过封装类 和对象,每个类和类的对象只展示了属性和操作这些数据的方法。一个类包含一 组不同的方法,并且某些特别的方法可能存在多态或者继承的特性。由此,单元 测试的方法也不同于传统软件。孤立地测试每个功能不适用于面向对象软件,而 是将功能作为类或者类集合的一部分进行测试。 ( 5 ) 面向对象的集成测试 传统的集成测试方法有自顶向下的集成和自底向上的集成两种方式。通过单 元测试后确认不存在内部错误的各个功能模块被逐步添加以确认各个模块可以 协同工作。自顶向下集成是一种增量式构造程序结构的方式,该方法从主模块开 始,依照软件系统的层次结构,以广度或深度优先的策略,逐步添加并集成各个 模块集成。而自底向上测试则是从原子模块( 即软件结构最低层的模块) 开始组 装集成测试。因面向对象软件中不存在明显的层次控制结构,传统的自顶向下和 自底向上集成策略就显得不再适用。此外,由于构成类的成分的直接和间接的交 9 上海师范人学硕十学何论文第_ 二章面向对象方法与同归测试 互的原因,类似传统的增量集成方法中一次集成一个操作到类中也是不可能的。 所以,对面向对象软件的集成测试有两种不同策略。一是基于使用的测试,在单 元类的测试完成后,继续使用单元类的测试,通过测试那些几乎不使用服务器类 的类( 称为独立类) 而开始构造系统,称为依赖类。二是基于线程的测试,集成对 系统的一个响应或事件所需要的一组类进行集成,分别测试并集成每个线程,在 此过程中进行回归测试。通过反复迭代该测试依赖类层次的序列直到构造完整个 系统。 ( 6 ) 面向对象的系统测试 单元测试和集成测试的主要目的是确保软件需求功能能够j 下确实现。但尚无 法确认在实际运行能否满足用户的需求。因而需要系统测试。系统测试的测试环 境会尽可能的接近或完全符合用户的实际使用环境,以确保系统测试的完整性和 真实性。系统测试时,需要参面向对象分析的结果,参照测试需求分析,对应各 个对象、属性和各种服务。在这个层面上,系统测试不仅是检测软件的需求功能 和表现情况,也是对软件设计完整度的确认。 2 3 回归测试 在软件开发过冲中,对于软件的维护、升级总是不可避免的,这就需要对软 件版本进行不断的演进。在此过程中,可能由于各种原因,比如功能性或者非功 能性需求的变更、软硬件平台升级或技术更新等,软件系统经常需要进行修改, 而这些修改可能会给软件系统带来风险。由于修改传播效应( c h a n g e p r o p a g a t i o n ) ,对程序的修改很可能会引入新的错误,有时甚至是致命的错误。 在软件开发生命周期中的任一个阶段,只要软件发生了改变就有可能给该软件带 来问题。这就需要进行回归测试以验证系统变更后继续保证其完整性与正确性。 因此,当软件发生变化时,就需要进行回归测试。 2 3 1 回归测试测策略 ( 1 ) 再测试全部用例 再测试全部用例方法选择全部的测试用例来组成新的回归测试包,从而具有 最低的遗漏回归错误的风险,但显然,该方法的测试成本很高。再测试全部用例 是最安全的方法,其优点是不用选择应执行的测试用例,可以节约一定的时间和 人力成本,因而当测试用例的数目不多时,该方法有一定的使用价值。而当测试 用例数目很多,并且系统改动很小时,该方法就因为花费巨大而需要斟酌f ”】。 ( 2 ) 基于风险选择测试 1 0 第二章面向对象方法与同! 1 测试上海师范大学硕士学位论文 该方法的实质是可以跳过某些优先级别低的、非关键的、或者高稳定的测试 用例,并基于一定的风险标准从测试用例库中选择回归测试包。首先运行最重要 的、关键的和可疑的测试,并期望这些测试中能够包含大多数的错误。一般来说, 测试风险的选择是从主要特征到次要特征进行的。 ( 3 ) 基于操作剖面选择测试 回归测试所使用的测试用例个数是由测试需求决定的,在测试过程中,测试 人员可以优先选取那些针对最频繁或最重要模块的测试用例,从而缓解和释放高 级别j x l 险,这样就能在规定的预算下得到一。个埘系统可靠性影响较大部分的错误 集。如果测试用例的分布情况就反映了系统的实际使用情况,那么测试用例库的 测试用例是基于软件操作剖面开发的。该方法的优点是可以控制一个给定的预算 下最有效的提高系统可靠性,但实施起来有一定难度。 ( 4 ) 再测试修改的部分 一般来说,一个回归错误必然会涉及一个添加的、修改的或删除的代码段。 当对软件系统的修改满足一定的局部化要求,即此类修改可能并不对整个系统, 而只是对系统的某几个模块产生影响,那么就可以依赖某些识别和解析的方法以 分析修改情况,同时一并分析修改对系统的影响,将回归测试局限于被修改的模 块以及其消息。在一定的条件下,回归测试就能够尽可能覆盖受影响部分。 2 3 2 面向对象软件中的回归测试 传统的单元测试针对程序的函数、过程或某一具体功能的程序块等基本子程 序、子模块进行测试分析。而在面向对象软件中,基本组成单元是类,或包。因 此,类及其对象的属性、方法、事件、状态和相应状态等内容就成为了测试目标。 目前在面向对象程序的回归测试方法的研究主要集中于回归测试用例的筛 选、回归测试策略选择、基于各种改进的程序依赖图实现语句级粒度分析方法、 基于构造类的防火墙方法、以及程序切片。其目标都是希望在一定范围内达到应 有的覆盖率,从而有效地降低回归测试的成本,提高测试效率。 2 3 3 回归测试中的错误定位 在回归测试的过程中,不免需要对程序进行必要的修改。在修改程序形成新 的版本之后,为了确定修改达到要求,避免修改本身引入新的错误,就必须对修 改后的程序进行重测。在回归测试中,任得出异常结果的测试都可能暗示着潜 在的错误,从而,就必须对这一错误进行定位处理,确认是哪些修改引起了测试 案例的失败。 在面向对象的程序设计中,由于继承、重载、动态绑定等特性,使得程序的 上海师范人学硕+ 学位论文第二章面向对象方法与回归测试 数据流很难去理解和跟踪。同时,对某一个类的一处修改可能不仅只对其本身产 生影响,而且可能会影响其父类、或子类的对象。比如说:对某一个类添加一个 方法覆盖其父类的方法,就可能会造成其父类对象在动态绑定时的方法变化。这 种“修改影响的非本地性 使得对于面向对象程序的测试错误定位变得十分复杂 和困难,也使得修改影响分析对于面向对象的程序设计来说变得尤为重要。 本文的研究主要集中于回归测试过程中,通过修改影响分析方法的实施,将 对源代码的修改分解定义为一系列的基修改,利用基修改来分析定位源代码中的 类、方法、类成员等元素和它们之间的相互依赖关系。本文进一步提出了能够添 加入原版本的最小基修改集合的概念,定义了基修改簇,并研究了在源版本程序 中添加基修改簇的算法。通过构造程序的中间版本,利用对于中间版本的测试集, 能够对于造成测试失败的程序修改进行定位,从而达到找出修改错误的目的。快 速并自动化地定位引起某测试案例失败或者失效的类成员,从而帮助测试调试人 员高效地修改程序,完成测试任务。 1 2 第三章错误定位技术研究上海师范大学硕+ 学位论文 第三章错误定位技术研究 3 1基于程序切片的错误定位方法 3 1 1 程序切片定义 m a r kw e i s e r 于1 9 7 9 年提出了程序切片( p r o g r a ms l i c i n g ) t 2 1 的概念。程序切片 是一种程序分解的技术,通过各种策略减少程序,直到部分程序只包含与某个特 定计算相关的分析语句。程序切片定义如下: 定义3 1 切片:在i p d g ( i n t e r - p r o c e d u r a lp r o g r a md e p e n d e n c eg r a p h ) 图g = ( n ,e ) 中,n 表示语句结点集合,e 表示连接语句结点的边的集合。一条语句结 点n n 的程序切片s ( n ) 是n 中的变量或兴趣点经过一条路径时,n ( 传递性) 所依 赖的所有结点组成的结点集: 研砂= m nim r 胛) n 表示语句结点的集合,刀,砌,刀f n ,m n ,朋,刀f 表示一条语句结 点。e 表示连接语句结点边的集合,e ,e 2 ,研e ,e ,表示语句之间的依赖 关系,s 例表示语句结点集合,m r 以表示存在一条从语句结点m 到语句结点 刀的路径。 程序切片的目的是将源程序根据其语义关系进行分解,对所关心的若干变量 从程序中抽取出来。 3 1 2 程序切片分类 ( 1 ) 前向切片与后向切片 前向切片是包含了程序中所有能够影响变量在切片准则的值的部分。后向切 片指的是所有受切片准则的变量的值影响的程序部分。构造一个程序p 的后向切 片准则为一个二元组( v ,p ) ,其中v 是一组变量,p 是程序中的一个兴趣点,则 程序p 的切片是任何一个在v 中p 点对变量具有与p 相同影响的程序。 ( 2 ) 静态切片和动态切片 动态切片是指对某个具体输入时程序实际执行的路径,可采用三元组表示 v ,r ,驴,v 表示变量,q 表示执行程序执行的轨迹中的步数,i 表示这句代 码的行号,x 表示程序的输入信息。动态切片的结果是源程序语句的子集。静 态切片可以采用二元组表示 ,l 表示是这旬代码的行号,代表程序的某 一行。s 表示的是该行包含所有变量的一个子集,静态切片是由程序p 中的语句 和谓词组成的。 3 1 - 3 基于程序切片错误定位的方法 上海师范入学硕十学位论文第二章错误定位技术研究 文献 3 q h 描述的基于程序切片错误定位的方法根据计算程序的不同切片缩 小软件测试的范围,最终达到定位错误的目的。它是一种以程序或程序和需求相 结合为基础的定位方法。 基于程序切片错误定位的详细步骤如下: 若错误的代码存在于失败测试用例中,则分别计算失败测试用例的执行切片 ( 用e f 表示) 和成功测试用例的执行切片( 用e s 表示) 。 1 ) 构造出p ( 1 ) - e f - e s 。由精炼构造方法,可以构造出p ( 孙,p ( 孙,p ( 4 ) , p ( n 。 2 ) 在p ( “至p ( 中查找错误。如果定位到错误,则切片结束,不然则调制第 4 步。 3 ) 检查不存在于p ( 1 中但存在与e f 中的代码,由m o ) - e f p ( 。根据扩展构 造方法,可以构造出m ( n ,m ( ,m ( ,m ( “。 4 ) 在m ( 1 到m 中一次查找错误,若错误存在于m ( 。) 中,则错误定位结束。 若错误不存在于m ( ) 中,则跳至第5 步。 5 ) 检查最后的代码e f p ( n m ( “,定位错误过程结束。 精炼构造方法: 首先,设错误存在与p ( 1 中,若p ( 1 仍然过于繁杂,包含的代码过多,即需 要检查的代码过多。在此情况下,需要通过额外的成功测试用例在p 0 ) 中定义代 码优先级。 ( 1 ) 随机选取k 个成功的测试用例,设为s l ,8 2 ,s 3 ,s 4 ,s k ; ( 2 ) 构造相应的执行切片,表示为s l ,s 2 ,s n ; ( 3 ) 设m = k ; ( 4 ) 构造p ( 肿n ,p ( 时1 ) _ i p ( 1 薯孓f o rn = l ,2 ,3 ,m ,即 p ( 叶1 ) = p ( n s nf o rn = l ,2 ,m ; ( 5 ) 检验p ( 卅1 ) 中的代码,是否含有错误; ( 6 ) 若有,则找到错误,错误定位结束;若没有,则m 一1 ; ( 7 ) 跳转到第4 步。 事实上,有p ( 2 ) - p ( 1 ) - s l = e f e s s l ,p ( 3 ) :- p ( s 1 s 2 = e f e s s 1 s 2 ,。 扩展构造方法: 首先,假设p ( 1 ) 中不含有错误,需要检查剩下的切片。妒表示为代码的集合, 驴= e f p ( n 。 为了不用一次检查p 中所有代码,较好的办法是基于代码可能包含错误的概 率来决定代码的优先级。定义一个“直接数据依赖关系,假设当且仅当在卢 中定义一个变量x ,p ( 1 中使用变量x ,或者在中使用了在p ( 1 ) 中定义的变量y 时,定义卢p n ,这里可以说卢是直接依赖于p “。一个程序块声,卢伊,意即卢 1 4 第三章错误定位技术研究上海师范大学硕+ 学位论文 是存在于错误执行切片中,但是只存在e f 中,不存在于p ( 1 ) 中。 扩展构造方法详细步骤如下: 在第一次迭代中构造m ( ,得到扩展的代码片段。m 1 k 例伊八僻廿1 ) ) , m ( 1 ) 是9 集合与卢p ( 1 ) 集合的交集; ( 1 ) 设k - i ; ( 2 ) 在代码m ( k ) 中检查,有没有包含错误; ( 3 ) 若含有错误,则错误定位完毕; ( 4 ) 若没有,则k + l ; ( 5 ) 通过k 次迭代得到的增量代码片段,再构造m f n ,如 m ( 。= m ( k - i u 汐9 泓m ( k - o ) ; ( 6 ) 若m ( 。) - m f 。,则重新构造,令m ( + k m ( ,m ( 。为最终代码片段;转至 第2 步; m ( 2 是m ( 1 与依赖于m f l 的代码的并集,p ( 1 被所有m ( 1 中包含的代码是直接 依赖,因而有m f l ) c m ( 2 ) c i v l f 3 c c m ( “。 采用扩展的方式假设p c l ) 不存在一个程序错误,定位错误从m f l 开始,接着 计算m ( 2 直到m ( “。 该方法最重要且值得注意的是假如过程在第( 4 ) 步停止,就成功的定义出错 误的位置。除去一个例外,当第一次迭代m ( 1 ) 数据依赖于p ( 1 ) 时。每一次迭代都 包含依赖于先前增量代码的附加代码。这种扩展代码的基本原理是即使一个程序 错误不在最可疑的地方p ( ,它最有可能影响那些直接依赖于p f l 玳码集或依赖 于第( 6 ) 步中构造的m ( ) 代码集。 程序切片的应用范围是比较广泛的,既可以用作为单元测试方法,又可以作 为回归测试错误定位的方法。它只需要基于一个版本的程序定位错误,无需与修 改前的程序版本做比较。 代码包含错误的可能性与在这些代码上执行的成功测试用例成反比,且代码 包含错误的可能性是由是否这些代码依赖于可疑代码决定。基于程序切片错误定 位的方法实质上是缩减查找范围,并在缩减的范围中根据代码包含错误可能性确 定可疑代码的优先级。 3 1 4 基于程序切片错误定位方法的特点 基于程序切片错误定位方法的主导思想为逐步排除无关部分,逐步缩减错误 范围。同,在缩小的范围中优先查找最可能含有错误程序行。这种方法不仅可以 在单元测试定位错误时运用,也可在回归测试定位错误时使用。 程序切片方法优点为所需要测试用例较少,仅需一个失败测试用例即可开始 进行错误定位。改方法的主要不足为在最坏情况下,程序切片仍然太大,从而要 检查的程序几乎相当于检查所有代码,在时间成本和人力成本上仍然显得过于耗 上海师范人学硕十学位论文第二章错误定位技术研究 费。 3 2基于d e l t ad e b u g g i n g 的错误定位方法 3 2 1d e l t ad e b u g g i n g 错误定位方法概述 d e l t ad e b u g g i n g t 4 j 1 5 】【6 1 由德国s a a r l a n d 大学的a n d r e a sz e l l e r 教授所领导的小 组负责开发。如果想知道程序中存在什么错误。通常的做法是把整个程序分为不 同的部分,然后机械而盲目地尝试着让它们运行,直到调试通过。d e l t ad e b u g g i n g 能如开发者希望的那样,自动地、系统地应付源码中的错误。面对错误不断的程 序,开发者认为输入文件非常见效。d e l t ad e b u g g i n g 却能自动地运行这一切。 如果将它移值到一个集成开发工具中时,可以极大地节省调试者的时间。不仅如 此,当d e l t ad e b u g g i n g 移植到用于交互软件一个测试框架中时,它还可以得理 用户的点击鼠标或敲击键盘这样的反应。d e l t ad e b u g g i n g 也能直接作用于源码。 目自i ,较成型的d e l t a d e b u g g i n g 产品是a s k l g o r ,和e c l i p s e 的插件d d c h a n g e 。 3 2 2d e l t ad e b u g g i n g 的主要概念 为解释d e l t ad e b u g g i n g 算法,首先有如下一些定义: 定义3 2 :配置:令c - - a l , a 2 ,a 。 为所有可能的程序修改集合,为 单一的程序修改,则c 称之为一种配置。 定义3 3 :空集称为空配置 最坏情况下,对于n 种不同的程序修改,最多会有2 n 种不同的配置。 定义3 4 :映射t e s t :2 c 专 p ,f ,u ) 定义为对于一种配置 c ,是否能通过p ( p a s s ) ,或者失败f ( f a i l ) ,或者该测试失效u ( u n s o l v e d ) 定义 3 5 :错误修改集:若一个修改集c 满足 v c 7 ( cgc 7gc _ t e s t ( c 7 ) ,则c 称为错误修改集 定义3 6 :最小错误修改集:若一个修改集e 满足 v ccb s c ) , 则b 称为最小错误修改集。 3 2 3d e l t ad e b u g g i n g 方法中的性质 ( 1 ) 单调性 定义3 7 :若某一配置满足v c 三c ( t e s t ( c ) = f _ v c 2c ( t e s t ( c ) 军,则 称配置c 为单调的。 1 6 第三章错误定位技术研究 上海师范人学硕十学何论文 推论:若c 为一个单调配置,则有 y c 互c ( t e s t ( c ) = p - v c 42c ( t e s t ( c ) 气 证明:反证法:对于所有的配置 c 满足t e s t ( c ) = p ,假设有 j c 互c ( t e s t ( c7 ) ,则由单调性定义,有t e s t ( c ) p 。矛盾,所以原假设不成 立。得证。 ( 2 ) 单一性 定义3 8 :若某一配置满足 v c l ,1 ;2 c ( 蚀s t ( c i ) = f i a t e s 铤c 2 ) = f 一( t e s ( c l n c 2 ) , 则称配置c 具有单一性。 ( 3 ) 连续性 定义3 9 :若某一配置满足 v c c ( t e s t ( c ,则称配置c 具有连续性。 3 2 4d e l t ad e b u g g i n g 算法 有了以上定义,d e l t ad e b u g g i n g 的算法描述如下 d d ( c ) = d d 2 ( c ,0 ) w h e r e d d 2 ( c 。r ) = l e tc l ,c 2 c x s t hc luc 2 = c ,c lnc 2

温馨提示

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

评论

0/150

提交评论