(计算机软件与理论专业论文)gui回归测试用例选择方法研究.pdf_第1页
(计算机软件与理论专业论文)gui回归测试用例选择方法研究.pdf_第2页
(计算机软件与理论专业论文)gui回归测试用例选择方法研究.pdf_第3页
(计算机软件与理论专业论文)gui回归测试用例选择方法研究.pdf_第4页
(计算机软件与理论专业论文)gui回归测试用例选择方法研究.pdf_第5页
已阅读5页,还剩63页未读 继续免费阅读

(计算机软件与理论专业论文)gui回归测试用例选择方法研究.pdf.pdf 免费下载

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

文档简介

摘要 摘要 近年来随着软件开发的日益复杂与软件成本的大幅度提高,测试工作所占的 费用和时间比重也日益加剧,其中回归测试用例选择问题尤为突出。回归测试 用例选择问题的核心就是如何在保证测试质量的前提下,能较为合理的减轻测 试人员的测试工做量,减少回归测试用例数量。目前,在回归测试用例选择策 略上主要有重测所有、最小化测试、随机选择、安全选择。这些测试用例选择 方法,都存在测试用例选择数量过大、过小,或者过于随机的问题,不能同时 满足保证测试质量和有效减轻测试工作量的要求。因此,对于如何约简回归测 试用例数量,如何进行回归测试用例选择问题的研究很有必要。 本文首先对于测试、回归测试、g u i ( g r a p h i c a lu s e ri n t e r f a c e ) 钡j j 试、g u i 测 试模型做简要介绍,同时阐述目前回归测试用例选择技术上存在的主要问题。 然后针对g u i 回归测试,提出了本文的回归测试用例选择方法。本文的主要研 究工作内容如下: 1 ) 在目前回归测试用例选择方法中,考虑到测试用例之间重要性的差异, 对回归测试用例进行关键测试路径和非关键测试路径的区分; 2 ) 通过分析基于权重事件的测试用例选择和基于窗口转移概率的关键路 径测试用例选择方法中存在的问题,给出相关定义,提出基于权重和状 态转移概率的关键路径选择策略,来进行关键路径测试用例的选择; 3 ) 针对当前测试用例选择方法中重点选择关键路径测试用例而舍弃大量 非关键路径测试用例存在测试隐患的问题,本文提出通过对回归测试状 态的测试信息进行提取和分析,来指导下一次回归测试用例选择过程中 非关键路径测试用例的选择; 4 ) 综合( 2 ) 和( 3 ) 的内容,提出本文最终的g u i 回归测试用例选择方法,并 给出相应的流程和形式化语言描述。 最后,进行相关实验,给出实验数据,通过与其它测试用例选择方法进行比 较,得出本文提出的回归测试用例选择方法能够有较好的测试用例约减效果。 关键词:g u i 回归测试回归测试用例选择状态转移权重事件 a b s t r a c t a b s t r a c t i nr e c e n ty e a r s ,r e g r e s s i o nt e s tc a s es e l e c t i o ni st h eh o ti s s u ei ns o f t w a r et e s t i n g r e s e a r c hf i e l d t h ek e yo fr e g r e s s i o nt e s tc a s es e l e c t i o ni st h a th o wt ob em o r e r e a s o n a b l et or e d u c et h ew o r ko ft e s t e ru n d e rt h ep r e m i s eo ft h es o f t w a r et e s tq u a l i t y s a s s u r a n c e b u t , a tp r e s e n t , t h em a i ns t r a t e g yo fr e g r e s s i o nt e s tc a s es e l e c t i o ni st h e r e t e s t a l l ,t h em i n i m u n lt e s t , t h er a n d o ms e l e c t i o na n dt h es a f es e l e c t i o n n o n eo f t h e mc a nb ee f f e c t i v ei nr e g r e s s i o nt e s tc a s es e l e c t i o n t h e r e f o r e ,t h er e s e a r c ho nh o w t oe f f e c t i v e l ys e l e c tt h er e g r e s s i o nt e s tc a s ei sn e c e s s a r y t h i st h e s i sf i r s tb r i e f l yi n t r o d u c et h es o f t w a r et e s t , t h er e g r e s s i o nt e s t ,t h eg u i r e g r e s s i o nt e s t , a n da l s oe l a b o r a t et h em a i np r o b l e mo ft h ec u r r e n tr e g r e s s i o nt e s tc a s e s e l e c t i o ns t r a t e g i e s t h e n ,w ep r e s e n ta r e g r e s s i o nt e s tc a s es e l e c t i o ns t r a t e g yf o rg u i r e g r e s s i o nt e s t ,w h i c hi sb r i e f l yd e s c r i b e da sf o l l o w s : ( 1 ) a tp r e s e n t ,d u et ot h ed i f f e r e n c eb e t w e e nt h ei m p o r t a n c eo ft e s tc a s e s ,i ti s n e c e s s a r yt od i s t i n g u i s ht h ek e ya n dn o n - k e yp a t hi nr e g r e s s i o nt e s tc a s es e l e c t i o n ( 2 ) b ya n a l y z i n gt h ee x i s t i n gp r o b l e mo ft h ew e i g h t e v e n tt e s tc a s es e l e c t i o na n d t h ek e yp a t ht e s tc a s es e l e c t i o nb a s e do nt h eg u lw i n d o wt r a n s f e rp r o b a b i l i t y , t h i s t h e s i sp r e s e n t sas t r a t e g yb a s e do nt h ew e i g h t - e v e n ta n ds t a t et r a n s f e rp r o b a b i l i t yf o r t h ek e yp a t ht e s tc a s es e l e c t i o n ( 3 ) i tm u s ta l s ob es o m es e l e c t i o ns t r a t e g yf o rt h en o n - k e yp a t ht e s tc a s e s t h i s t h e s i sp r e s e n t sas t r a t e g yt os e l e c tt h en o n k e yp a t hr e g r e s s i o nt e s tc a s eb ye x t r a c t i n g a n da n a l y z i n gt h ep r e v i o u s l yr e g r e s s i o nt e s t i n gr e s u l ti n f o r m a t i o nt og u i d et h en e x t t e s tc a s es e l e c t i o np h a s e ( 4 ) s u m m a r i z et h ec o n t e n to f ( 2 ) a n d ( 3 ) ,t h i st h e s i sp r e s e n t st h ef i n a lg u i r e g r e s s i o nt e s tc a s es e l e c t i o ns t r a t e g y , t h ec o r r e s p o n d i n gp r o c e s sa n da l g o r i t h m f i n a l l y , t h r o u g hi l l u s t r a t i n gt h ee x p e r i m e n t ,t h ep r o p o s e ds t r a t e g yf o rr e g r e s s i o n t e s tc a s es e l e c t i o nc a l lr e d u c et h et e s tc a s e se f f e c t i v e l yi nr e g r e s s i o nt e s t k e yw o r d s :g u i ,r e g r e s s i o nt e s t ,t e s tc a s es e l e c t i o n , s t a t et r a n s f e r , e v e n tw e i g h t 南开大学学位论文版权使用授权书 本人完全了解南开大学关于收集、保存、使用学位论文的规定, 同意如下各项内容:按照学校要求提交学位论文的印刷本和电子版 本;学校有权保存学位论文的印刷本和电子版,并采用影印、缩印、 扫描、数字化或其它手段保存论文;学校有权提供目录检索以及提供 本学位论文全文或者部分的阅览服务;学校有权按有关规定向国家有 关部门或者机构送交论文的复印件和电子版;在不以赢利为目的的前 提下,学校可以适当复制论文的部分或全部内容用于学术活动。 学位论文作者签名: 年月日 经指导教师同意,本学位论文属于保密,在年解密后适用 本授权书。 指导教师签名:学位论文作者签名: 解密时间:年月 日 各密级的最长保密年限及书写格式规定如下: 南开大学学位论文原创性声明 本人郑重声明:所呈交的学位论文,是本人在导师指导下,进行 研究工作所取得的成果。除文中已经注明引用的内容外,本学位论文 的研究成果不包含任何他人创作的、已公开发表或者没有公开发表的 作品的内容。对本论文所涉及的研究工作做出贡献的其他个人和集 体,均已在文中以明确方式标明。本学位论文原创性声明的法律责任 由本人承担。 学位论文作者签名: 年月日 第一章绪论 第一章绪论帚一早瑁兜 1 1 回归测试用例选择概述 随着信息技术的飞速发展,软件产品逐步应用到社会的各个领域,软件的 功能也越来越强大。但随之而来的问题是软件的复杂程度也越来越高,软件产 品的质量也越来越难以保证。缺乏质量保证的软件产品不仅仅会使产品的成木 和维护费用大幅增加,还可能产生其他的不良后果,软件产品的质量越来越成 为人们关注的焦点。 如何提高软件质量是软件工程致力解决的关键问题之一。软件开发的目的 是生产出满足用户需求的高质量、高性能的软件产品,软件测试则以检查软件 产品内容和功能特性为核心,是软件质量保证的关键步骤,也是成功完成软件 开发目标的重要保障。它是软件工程过程中的一个重要阶段,是在软件投入运 行前,对软件需求分析、设计和编码等各阶段产品的最终检查,是保证软件产 品的正确性、完整性和一致性,从而检测软件错误、修正软件错误的过程。研 究表明,测试的费用会占到整个软件开发总费用的5 0 6 0 1 1 。因此,软件测试 工作不仅决定软件质量,同时也影响开发费用,软件测试在软件开发的地位也 越来越重要。 1 1 1 研究背景 由于软件生命周期中,软件经常会发生变化,相应也就可能对软件本身带来 很多问题。软件的变化可能是因为需求的变动或者测试过程中发现错误并做了 修改,也有可能是因为集成过程中加入了新的模块。当软件中所包含的错误被 发现时,如果错误跟踪与管理不够完善,就可能会遗漏对这些错误的修改;而 开发者对错误理解的不够透彻,也可能导致所做的修改只修正了错误的外在表 现,没有修复错误本身,从而造成修改失败;修改还有可能产生副作用,从而 导致软件未被修改的部分又产生新的i ;- j 题,使本来正常工作的功能产生错误。 同样,在有新代码加入软件的时候,除了新加人的代码中有可能含有错误外, 新代码还有可能对原有的代码带来影响。因此,在软件测试过程中,需要经常 第一章绪论 重新测试现有的功能,确保修改达到预期效果。同时,在狈0 试过程中,也会根 据需求和功能变动,补充一些新的测试用例用来测试这些由于新的需求而增加 的功能模块。为了验证上述修改的正确性及其影响需要进行回归测试。 回归测试就是确保以前己经通过测试的程序部分在程序进行修改之后依然 可以通过测试,并且程序的修改所影响的其他部分也可以通过测试 2 。回归测 试在软件生命周期中扮演着重要的角色,因忽视回归测试而造成严重后果的例 子不计其数。 软件测试在软件的整个开发过程中占有非常重要的地位,是保证软件质量、 提高软件可靠性的关键【2 】。而随着软件开发规模的逐渐扩大,软件的出错率也越 来越高。具体来说,软件出错的原因主要有:应用需求不够清晰、软件复杂性、 超大型关系数据库以及庞大的系统规模等,这些都使得软件及系统的复杂性呈 指数增长。总之,随着软件工程技术的发展,软件设计规模的增大,软件测试 在软件开发过程中的作用也会越来越重要【3 】 而回归测试是软件测试中一个很重要的环节。其目的是保证程序在修改后不 会引入新的错误。而随着软件规模的日益庞大,回归测试的成本也相应增大, 甚至达到了整个测试成本的一半以上【4 】。所以回归测试己经成为整个软件测试的 关键,是软件质量的重要保证。 同时,回归测试在整个软件测试过程中占有很大的工作量比重,软件开发的 各个阶段都会进行多次回归测试。在渐进和快速迭代开发中,新版本的连续发 布使回归测试的实施更加频繁,而在极端编程方法中,更是要求每天都进行若 干次回归测试。因此,通过选择正确的回归测试策略来改进回归测试的效率和 效果是非常有意义的。 回归测试的研究包括测试用例生成【5 1 、测试环境自动化 7 - 8 、捕获回放9 1 技术,和构建程序小版本 1 0 】以及回归测试选择等方面”15 1 。在目前,回归测试 选择已经成为回归测试的研究热点【l 6 1 。 1 1 2 研究进展 目前国内外在g u i 测试用例生成的研究主要包括:a t i f m m e m o n 将人工智 能划分技术应用到g u i 软件测试用例生成中 5 - 6 ,但这种测试方法在g u i 测试 过程中的适应性和可操作性较差。国内学者,如西南师范大学的张为群提出了 2 第一章绪论 一种利用u m l 图中的类图、状态图、顺序图来辅助生成测试用例的方法【1 。7 1 。何 允如提出了基于程序执行状态图p p s c ( p r o g r a r ne x e c u t i o ns t a t ec h a r ) 的测试用例 生成策略【1 8 】,从系统功能的角度,按照一定的测试准则,用形式化的方法生成 测试用例。采用了层次化的思想以及数学化和图形化的方法,将图形界面进行 层次划分从而生成测试路径。 此外,在g u i 测试工具的研究主要集中于自动化测试,主要使用捕捉回放 技术来减轻测试人员的工作压力。已有的g u i 自动化测试工具包括i b m 的 r a t i o n a l ,要求测试者激活捕获回放记录器,然后再把测试者的动作翻译成特殊 的语言s q a b a s i c 编写的脚木,进行反复测试。m e r c u r y 公司开发的w i n r u n n e r 以及s e g u e 公司开发的s i l k t e s t 也都是较好的g u i 自动化测试工具,在很多软件 公司都有很好的应用。 目前常规软件的回归测试选择研究主要集中于结构性程序( 基于代码信息 c o d e b a s e d ) 的回归测试用例选择上。即在保证能达到既定的覆盖率,原先设计 的一组测试用例所获得的覆盖率很有可能只需其中的几个测试用例就可以获得 了,那些冗余的测试用例在每一次重新测定覆盖率时都浪费了大量的时间和资 源。测试用例选择目的就是要剔除冗余的测试用例,以提高测试效率。 在基于结构性程序代码的情况下,对代码相关的测试用例进行选择已是目前 回归测试选择研究的主流。因此,目前对于代码相关的测试用例进行选择方法 主要有以下几种: 1 )基于文本信息的方法。该方法即对程序修改前后的版本进行简单的文 本比较,找到所修改的部分,然后根据修改的部分程序来选择测试用 例。这个方法主要是基于工作人员的人工判别,人工挑选来进行用例 选择; 2 )基于程序语句的用例选择算法。v o k o l o s 和f r a n k e l 3 】提出了基于文本 信息的测试选择算法,该算法为每个语句块和每个测试用例之间建立 一个映射,然后比较程序修改前后的版本,找出程序中被修改的语句; 3 )此外,类似如贪心算法、遗传算法、模拟退火算法等人工智能理论也 广泛应用于基于代码信息的测试用例选择问题,国内外都有较多的研 究成果。 而针对功能性测试的回归测试用例选择的策略则主要是以下几种,一种策略 是全部重测策略( r e t e s t a l ls t r a t e g y ) ,它主张将可用的所用测试用例用于回归测 3 第一章绪论 试过程,但是这种策略需要大量的人力资源和物力资源的消耗。一种是安全性 测试( s e c u r i t y - s e l e c t i v es t r a t e g y ) ,即测试那些受程序修改的测试用例,由于受到 原程序修改的影响,可以用于直接回归测试的测试用例数量相当有限,这在很 大程度上限制了回归测试发现问题的可能性。另外一种策略是有选择性的重测 策略( s e l e c t i v er e t e s ts t r a t e g y ) ,它试图通过只对选定的部分程序进行测试的方法 来减少所需的费用。这后两种策略都将注意力放在两个问题上:( 1 ) 从原有的测 试用例集合中选择一个合适的子集;( 2 ) 识别被测软件需要进行额外测试的部分。 那些导致程序结构中不同路径的执行的测试用例便可以用于回归测试。 而如何对功能性回归测试进行选择性的重测并没有特别成型的思想和方法, 本文就是针对于功能性测试( 以g u i 功能性测试为研究对象) 的回归测试用例选 择方法的问题进行研究,提出一种可行的g u i 回归测试用例选择方法,并给出 相应的形式化语言的描述,并通过相关实验来验证。 1 2 本文研究内容 回归测试选择技术就是通过减少测试用例的数量来达到提高测试效率的目 的。但是,很多回归测试用例选择策略都会导致有效用例流失,如最小化选择 技术,会导致大量的有效用例没有被选择,从而使测试效率降低。而重测所有 和安全选择策略,虽然可以保证有错误探测能力的用例全部被选择,但是有时 由于种种原因( 如时间、成本或者测试目的不同) ,使得测试人员没有条件执行用 例集中的所有用例。 回归测试选择技术的关键在于如何提高用例选择精度和测试可信度。为了解 决这两个关键问题,本文通过分析基于权重事件的测试用例选择和基于窗口转 移概率的关键路径测试用例选择方法中存在的问题,提出基于权重和状态转移 概率的关键路径选择策略。然后,再通过有效的对回归测试结果进行分析和利 用,对非关键路径测试用例进行选择,使测试用例平均测试数量更为合理。论 文所拟开展的工作如下: ( 1 ) 考虑到测试用例之间本身重要性的差异,因此对回归测试用例进行关键 测试路径和非关键测试路径的区分; ( 2 ) 分析基于权重事件的测试用例选择方法和基于窗口转移概率的关键路 径测试用例选择方法中各自存在的问题。通过定义状态与事件之间的关系、测 4 第一章绪论 试路径、以及如何确定测试路径使用权值,来给出相应的基于权重和状态转移 概率的关键测试路径选择流程和形式化语言描述; ( 3 ) 然后,通过对回归测试结果信息进行分析,对非关键测试路径的测试用例 进行进一步的选择,例如对一些经常被测或很少被测到的测试用例进行有策略 的挑选,使总体的测试用例选择数量较为平均; ( 4 ) 通过( 2 ) 、( 3 ) 研究内容的融合,综合给出本文所提出的g u i 回归测试用例 选择方法,并给出相应的形式化语言描述和流程图; ( 5 ) 设计一个小型的g u i 被测模型,同时设计相关实验来验证自己的回归测 试用例方法,并通过对重测所有、安全选择、随机选择和基于权重事件选择方 法进行实验比较,并得出实验结论。 通过以上几方面工作的研究展开和深入,能够给出一种较好的g u i 回归测 试用例选择方法,既能够提高用例选择精度和测试可信度,同时又能够有效的 减少测试用例,从而减少测试人员的工作量和工作时间。 1 3 本文组织结构 本文共分五章,主要内容如下: 第一章为绪论,第二章介绍软件测试、回归测试、g u i 测试、g u i 测试模型 等相关理论。第三章主要研究本文所提出的g u i 回归测试用例选择方法,通过 分析基于权重事件的测试用例选择和基于窗口转移概率的关键路径测试用例选 择方法中存在的问题,提出基于权重和状态转移概率的关键路径测试用例选择 策略。同时再分析并有效利用回归测试结果信息来合理有效挑选非关键测试用 例,进而能够保证较好的测试效果的前提下,达到较为合理的选择回归测试用 例数量。第四章通过第三章所提出的测试用例选择方法,进行相关实验的设计 与验证,同时与其他几种目前较为成型的测试用例选择方法进行比较并得出相 关结论。最后总结全文,给出了本文结论和今后研究方向。 5 第二章软件测试与面向g u i 的回归测试 第二章软件测试与面向g 的回归测试概述 2 1 软件测试 2 1 1 软件测试的定义 1 9 8 3 年i e e e 定义软件测试为:使用人工或自动手段来运行某个系统的过程, 其目的在于检验它是否满足规定的需求或是弄清结果与实际结果之间的差别。 这个定义非常明确地提出了软件测试以“检验是否满足需求为目标。 g l e nm y e r s 认为:软件测试是为了发现错误而执行程序的过程。或者说,软 件测试是根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测 试用例( 即输入数据和预期的输出结果) ,并利用这些测试用例去运行程序,以发 现程序错误的过程。该定义明确指出“寻找错误 是测试的目的。 到了2 0 0 2 年,硒c k 和s t e f a n 在系统的软件测试) ) ( s y s t e m a t i cs o t t w a r et e s t i n g ) 中对软件测试做了进一步的定义:“测试是为了度量和提高被测软件的质量,对 测试件进行工程设计、实施和维护的整个生命周期过程。 “软件测试 的首要目标是发现错误,即能够系统地揭示不同类型的错误, 并且消耗最少时间和最小工作量。其次是对于给定的测试包,说明被测系统是 符合规约所描述的需求。即确保最终交给用户的软件功能符合需求,把尽可能 多的错误在软件交给用户之前得以纠正,保证软件产品的最终质量。一般来说 软件测试应由独立的产品测试小组负责,严格按照软件测试流程,制定测试计 划、测试方案、测试规范,实施测试,对测试记录进行分析,并根据回归测试 情况撰写测试报告。测试是为了证明程序有错,而不能保证程序没有错误【3 l 】 总结软件测试的目的如下: 1 ) 找出软件存在的各种错误和缺陷,证明软件的功能和性能与需求说明相 符合; 2 ) 确保软件满足性能和效率的要求,关键在于提高软件的质量。 软件测试的依据是为测试建立的外部环境,包括需求说明、设计文档、规范, 与用户的随时沟通需求规格、设计文档是对系统业务描述和设计,规范提供了 6 第二章软件测试与面向g u i 的回归测试 一系列的开发约定,测试用例需明确测试的要点、输入数据和预期的结果。 软件测试步骤包括:单元测试、集成测试、确认测试和系统测试,如图2 1 所示。当然,所有的软件测试必须在测试设计的指导下实施。 图2 1 软件测试步骤 按软件开发的生命周期模型将其分为以下四个阶段【2 0 】: ( 1 ) 单元测试:在这个测试步骤中发现的往往是编码和设计的错误,目的是 为了检查每个模块是否能独立地正确运行。 ( 2 ) 集成测试:在这个阶段把经过模块测试运行正确的模块放在一起形成子 系统后再测试。主要测试模块间的协调和通信问题,测试该系统是否达到功能 要求【2 1 。 ( 3 ) 系统测试:在这个阶段把经过测试运行的子系统组装成完整的系统后再 进行测试【2 1 1 。在这个过程不仅能发现设计和编码的错误,还验证系统是否能提 供需求说明书中指定的功能,系统的动态特性是否符合预定要求。 ( 4 ) 确认测试:把软件系统作为单一的实体进行测试,测试内容与系统测试 基本类似。但它是在用户积极参与下进行的,主要使用实际数据进行测试,目 的是验证系统是否满足用户的需求。在这个步骤中发现的往往是系统需求说明 书中的错误。 测试的四个阶段完全逆向检测了软件开发的各个阶段。单元测试主要测试 程序代码;集成测试主要对软件设计的检测;系统测试主要测试系统环境中的 软件功能;确认测试主要是对用户需求的一种检测。但是每个测试阶段仍要对 其他测试阶段的内容加以测试,只是测试重点不同而己。 7 第二章软件测试与面向g u i 的网归测试 2 1 2 软件测试策略与技术 为了最大程度的减少错误,同时也为了最大限度的发现己经存在的错误,在 测试实施之前,软件测试工程师必须确定将要采用的测试策略和测试方法,并 以此为依据制定详细的测试用例。而一个好的测试策略和测试方法必将给软件 测试带来事半功倍的效果,它可以充分利用有限的人力和物力资源,高效率、 高质量地完成测试。 那么,究竟如何才能确定一个好的测试策略和测试方法呢? 一般来说,在 确定测试方法时,应该遵循以下原则:第一,要根据程序的重要性和一旦发生 故障将造成的损失来确定它的测试等级和测试重点;第二,要认真研究测试策 略,以便能使用尽可能少的测试用例,发现尽可能多的程序错误【冽。 以下是m e y c r s 提出的使用各种测试方法的综合策略【2 3 】: 1 ) 在任何情况下都必须使用边界值分析方法。经验表明用这种方法设计出 测试用例发现程序错误的能力最强; 2 ) 必要时用等价类划分方法补充一些测试用例; 3 ) 用错误推测法再追加一些测试用例; 4 ) 对照程序逻辑,检查己设计出的测试用例的逻辑覆盖程度。如果没有达 到要求的覆盖标准,应当再补充足够的测试用例; 5 ) 如果程序的功能说明中含有输入条件的组合情况,则一开始就可选用因 果图法。 目前的软件测试方法主要包括静态测试和动态测试,其中动态测试又包括黑 盒测试、白盒测试和灰盒测试。静态测试是指不执行程序代码而寻找程序代码 中可能存在的错误或评估程序代码的过程。所谓动态测试,就是指通过运行软 件来检验软件的动态行为和运行结果的正确性。动态测试中,黑盒测试是指功 能测试或资料驱动测试;白盒测试是指按照程序内部的结构测试程序,检验程 序中的每条通路是否都有能按预定要求正确工作;而灰盒测试就是介于白盒测 试和黑盒测试之间的测试 2 1 】。 目前,软件测试存在以下几个发展方向瞄】: 1 ) 验证技术。验证的目的在于证明在软件生命周期各个阶段,以及阶段间 的逻辑协调性和正确性。验证技术目前仅适用于特殊用途的小程序。静 态测试正逐步地从代码的静态测试往高层开发产品的静态测试发展; 8 第二章软件测试与面向g u i 的回归测试 2 ) 测试用例选择。用于从已有的用例集中选取部分用例来进行测试。本文 将对测试用例选择技术作深入研究; 3 ) 测试技术的自动化。这是一个新的发展方向。自动测试也是一门技术, 但与测试技术存在着较大区别。 2 2 回归测试 在软件生命周期中的任何一个阶段,只要软件发生了变化,就可能给该软件 带来问题。为了验证修改的正确性及其影响就需要进行回归测试 2 5 之6 】。 2 2 1 回归测试定义 i e e e 对于回归测试( r e g r e s s i o nt e s t i n g ) 的定义为( i e e e 6 1 0 1 2 9 0 ) : r e g r e s s i o nt e s t i n gi st h e ”s e l e c t i v er e t e s t i n go fas y s t e m0 1 7c o m p o n e n tt ov e r i f y t h a tm o d i f i c a t i o nh a v en o tc a u s e du n i n t e n d e de f f e c t s ” 实际上,这种定义就是要确保以前己经通过测试的程序部分在程序进行修改 之后依然可以通过测试,并且程序的修改所影响的其他部分也可以通过测试。 学者b e i z e r 将回归测试定义为任何旨在表明软件的行为除非在需要的时候不会 发生变化的重复的测试。 2 2 2 回归测试策略 在实际工作中,回归测试需要反复进行,当测试者一次又一次地完成相同的 测试时,这些回归测试将变得非常令人厌烦。而且,在软件开发过程中,软件 维护的成本可以占到整个开发成本的5 0 以上。而回归测试的成本则可能占软 件维护成本的1 2 。因此如何选择经济( 可以节省成本) 而有效( 尽可能找出存在软 件中的错误) 的回归测试方法,就显得十分必要了。 由于回归测试存在测试时已经存在构造好的测试用例集,所以对已有用例加 以复用。在实际测试过程中,复用己有用例的一种方法是对所有原有用例进行 测试。为了减少测试成本,可以从原有的测试用例中,根据某种规则来选取部 分用例进行测试。这种测试测试技术叫做选择性回归测试。 目前主要的选择性回归测试主要有四种策蚪8 ,l 7 1 。一是安全选择策略,即选 9 第二章软件测试与面向g u i 的回归测试 择覆盖所有程序中受影响部分的测试用例【2 6 , 2 s , 2 9 ;一种是最小化选择策略,其做 法是选择已有的测试用例的最小子集,保证程序中受影响部分至少被覆盖一次; 第三种是随机选择策略,由测试人员从原有测试用例集t 中随机选择测试用例。 第四种是重测试所有策略,即选择所有已有用例来进行测试。 这四种策略各有其特尉4 , 1 1 , 1 7 , 3 0 : 1 ) 重测所有策略适合于程序修改较大的情况,通过重测所有用例可以保证 在程序修改后原来正确工作的代码不会产生新的错误。但是,重测所有 的测试用例可能花费大量不必要的时间和资源。而且由于重要软件的回 归测试进行得更加频繁,从而使软件开发成本大幅提高; 2 ) 随机选择策略依赖于测试人员本身的经验,随意性较大。但是其用例选 择的成本小,有经验数据表明,其错误检测能力也尚可; 3 ) 最小化选择策略选择的用例集最小,所以对用例测试成本较小。但其错 误检测能力较差; 4 ) 安全选择策略错误检测能力较强,且用于回归测试的用例集也不会很 大,所以适合于一般情况下的回归测试。但如果程序规模过大,对程序 进行分析的成本也会可观。 2 2 3 回归测试用例选择 回归测试用例选择( r e g r e s s i o nt e s ts e l e c t i o n ) 是一种非常重要的回归测试方 法。该方法可以通过复用已有用例集,在原有用例集中选择部分用例来进行测 试,从而达到降低测试成本的目的。该方法相对于重测所有测试用例,具有如 下优点【3 1 3 2 】: ( 1 ) 复用原有的用例,从而减少构造测试用例的成本; ( 2 ) 不必对所有用例进行测试,减少测试时执行测试用例的成本。 典型的回归测试选择过程可以描述如下【1 3 】: ( 1 ) 选择t c t ,其中t 是程序p 运行时用来测试的用例集; ( 2 ) 用t 测试p7 ,以确认程序p7 在t 7 的正确性; ( 3 ) 如果必要,产生t ”,其中t ”为p 测试新增部分的用例; ( 4 ) 用t 。测试p ,以确认p 在t ”上的正确性; ( 5 ) 根据t , t ”来产生新的测试用例集t ”。 1 0 第二章软件测试与面向g u i 的回归测试 从以上描述可知,选择性回归测试主要包括以下几个问题: ( 1 ) 回归测试选择问题( r e g r e s s i o nt e s ts e l e c t i o n ) ,即根据修改后的程序p 7 , 从原有的测试用例集t 中选出一个子集t 。这个问题也包括了如何从原有用例 集t 中选出过时用例。所谓过时用例,是指根据程序p 的规格s ,该用例t 所 指明的对于程序p7 一个( ( i n p u t ,o u t p u t ) 不合法,或者t 所规定的输入对p 不合法; ( 2 ) 是否需要进行附加测试的问题; ( 3 ) 测试执行问题,即有效的执行测试并进行测试结果验证; ( 4 ) i 9 l l j 试维护问题,包括更新用例库和存储测试信息。 2 2 4 回归测试用例维护 软件开发过程中,项目测试组根据软件相应项目需求说明书设计测试用例, 并将这些测试用例保存到“测试用例库”中,便于管理和维护。由于在软件开 发过程中,根据客户需求和应用的变化,软件在生命周期中会频繁地被修改和 不断地推出新版本。当推出软件的第一个基线版本时,就会有相应的针对与这 个软件版本的测试用例,并将这些测试用例放入“测试用例库”中。在之后进 行的回归测试中,就可以根据回归测试用例选择策略,从“测试用例库”中提 取合适的测试用例组成相对应软件版本的回归测试用例。而随着软件开发周期 中,软件的功能和模块的改变,“测试用例库 中的一些测试用例会失效或者过 时。因此,为了保证“测试用例库 中测试用例的有效性,需要对“测试用例 库进行维护,根据软件功能的修改或软件功能的增减,“测试用例库”的维护 工作就包括开发新的测试用例,删减过时失效的测试用例。 回归测试用例的维护是一个不间断的过程,通常可以将软件开发的基线作为 基准,维护的主要内容包括以下几个方面【2 。7 】: 1 ) 删除过时的测试用例 因为需求的改变等原因可能会使一个基线测试用例不再适合被测试系统,这 些测试用例就会过时。例如,某个变量的界限发生了改变,原来针对边界值的 测试就无法完成对新边界测试。所以,在软件的每次修改后都应删除过时测试 用例。 2 ) 改进不受控的测试用例 随着软件项目的进展,测试用例库中的用例会不断增加。其中会出现一些对 第二章软件测试与面向g u i 的回归测试 输入或运行状态特别敏感的用例。这些用例不容易重复,而且结果难以控制。 会影响回归测试的效率,必须对其加以改进,使其达到可重复、可控制的要求。 3 ) 删除冗余的测试用例 如果存在两个或者更多个测试用例针对一组相同的输入和输出进行测试,那 么这些测试用例是冗余的。冗余测试用例的存在降低了回归测试的效率。所以 需要定期整理测试用例库,并将冗余的用例删除掉。 4 ) 增添新的测试用例 由于软件版本的不断修改,会出现某些新的程序段、构件或关键的接口没有 被测试到。那么应该产生新的测试用例重新对其进行测试,并将新的测试用例 合并到原有测试用例集中去。 通过对测试用例库的维护,不仅改善了测试用例的可用性,更重要的是提高 了现有测试用例集的可信性,同时还可以将上一个版本的测试用例集的效率和 效用保持在一个较高的级别上。 2 3g u i 测试 2 3 1g 的相关概念 图形用户界面g u i ( g r a p h i c a lu s e ri n t e r f a c e ) 是一种软件系统的等级化的、图 形化的前端,这种系统接受的输入是来自一个固定的事件集合中由用户和操作 系统产生的事件,经过处理生成图形化输出。一个g u i 含有许多个图形对象, 而每个对象又有固定的属性集合。 g u i 系统用户通过触发事件同系统进行交互,对图形对象进行操作。例如: 用鼠标托动某个图标,将一个文件夹放入回收站,从资源管理器的文件目录树 型结构当中选择某个文件夹等。以上这些事件都会导致所使用的系统的状态发 生变化。 很明显,g u i 有四个最突出的特点: ( 1 ) 结构层次化,这种结构的层次性反映在窗体、对话框以及其它图形对象的 分组上。一个窗体中可能包含若干个子窗体,而不同的窗体中也可能含有若干 其它图形对象。 ( 2 ) 媒介作用,g u i 作为用户和系统交互的媒介,它起的作用不仅在于给用户 1 2 第二章软件测试与面向g u i 的回归测试 提供更好的用户体验( u s e re x p e r i e n c e ) ,更重要的是将系统的底层业务逻辑同用 户隔离开,这就决定了对g u i 的测试实际上跟底层代码的测试是两个不同的概 念。 ( 3 ) 事件驱动输入,对于每一个有效的事件,都会有一个对应的处理,只不过 是有些处理的结果是维持原有状态不变,而有些则是让系统转变到下一个状态。 ( 4 ) 输入和输出都是图形化的,这使得系统用户可以更方便直观地使用系统, 但对于g u i 测试人员来讲无疑是一个巨大的挑战,因为传统的对于基于命令行 提示符应用程序的测试方法根本无法应用于g u i 测试过程当中。 2 3 2g u i 测试的过程 在这里先描述一下g u i 测试的过程。g u i 需要特殊的测试技术,但是实现 这些技术的过程跟传统的过程是类似的。下面的部分提供了用来进行g u i 测试 所需要的几个步骤: 1 ) 确定测试目标 通过覆盖标准的定义来确定测试目标。一个g u i 覆盖标准或许会要求执行 所有的用户接口事件来确定所执行的行为是否正确。 2 ) 产生测试输入 从软件规约( s p e c i f i c a t i o n ) 和结构产生测试用例,对于g u i 而言,这些测试输 入主要是由鼠标点击、菜单选择、文本输入和对象操作组成。 3 ) 产生期待输出 产生期待的输出同实际的结果进行比较,对于g u i 而言,这些期待输出包 括屏幕截图或者窗体对象的坐标等。 4 ) 执行测试用例并验证输出 在被测应用程序上执行测试用例,然后比较实际结果和期待结果。 5 ) 确定完成的测试是否达到预期的测试目的 一旦所有的测试用例执行完毕,测试人员分析被测软件并检查其被测试的部 分,对于g u i 而言,这种分析主要是检查事件和与其对应的g u i 状态;测试以 后,对发现的缺陷进行修正,而这些修正需要回归测试来确定其结果的正确性。 6 ) 执行回归测试 回归测试集由两部分组成( a ) 原有测试用例集合的一个子集( 用来测试原程序 1 3 第二章软件测试与面向g u i 的回归测试 被修正的部分) ;c o ) 新的测试用例集合。对于g u i 而言,回归测试包括分析g u i 对象布局的变化。 2 3 3g u i 测试方法 下面给出进行g u i 测试的几个基本方法,这些方法是指对g u i 软件进行黑 盒测试,不涉及g u i 软件的白盒测试。 1 ) 按照错误类型对错误分类的方法,依次对每类错误设计测试用例并进行测 试,这样可以集中于错误的测试并且防止重复测试; 2 ) 将一些复杂的功能分解成一系列的简单的功能的方法,对每个简单的功能设 计测试用例进行测试; 3 ) 尽量使用传统的测试分析技术方法进行测试用例的设计; 4 ) 采用分层和分阶段测试的方法。先对底层的各个模块进行测试,然后进行各 个模块的集成测试; 5 ) 尽可能地进行自动测试方法,如捕捉回放工具,脚本录制工具等。 2 3 4g u i 测试用例的生命周期 除了几种少见类型的测试( 计时和压力测试) 之外,在对程序进行修改之前重 新进行测试等于在浪费时间,因为它只能发现跟以前一样的错误。所以测试用 例需要根据软件的变化而相应的变动。同时,一个测试用例也不会永远存在下 去。在一定程度上,软件产品的修改会导致原有的测试用例的失效。 如图2 2 所示,测试用例的可重用性的高低直接影响着测试用例的生命周期 长短。所以一个典型的问题摆在面前,人们往往看到的是自动化测试给软件测 试带来的效率和测试费用的降低,却往往低估甚至忽视了一个很重要的问题, 那就是如何能延长测试用例的生命周期。而g u i 通常是以快速原型法创建的, 对它的修改是非常频繁的,所以如果不能延长测试本身的生命周期,那就无法 平衡开发自动化测试的费用。 1 4 第二章软件测试与面向g u i 的同归测试 2 3 5g u i 回归测试 图2 2g u i 测试用例的生命周期 虽然学术界对于常规软件的回归测试己经有了足够的重视,但到目前为止, 除了美国马里兰大学的教授a t i f m m 锄o n 3 3 】和学者l w h i t e 3 4 1 ,几乎没有其他 专门针对g u i 的回归测试的研究。许多针对常规软件的回归测试策略已经提了 出来。一种策略是全部重测策略【l 。7 1 ( r e t e s t a l ls t r a t e g y ) ,它主张将可用的所用测 试用例用于回归测试过程,另外一种策略是有选择性的重测策略( s e l e c t i v er e t e s t s t r a t e g y ) ,它试图通过只对选定的部分程序进行测试的方法来减少所需的费用。 2 4g u 测试模型 模型化的方法被广泛应用在软件测试中,模型是待测系统形式化或半形式化 的表示,模型必须支持输入状态组合的系统枚举,普通的描述和表达方式不能 产生所有的输入状态组合,但是模型可以帮助实现这一目的。 模型是对软件行为和软件结构的抽象描述,已体现了软件系统最本质的关 系。软件行为可以用系统输入序列、活动、条件、输出逻辑或者数据流进行描 述,软件结构则使用组件图、部署图等进行描述。针对测试任务,通过对软件 功能和结构进行抽象并用易于理解的方式进行描述,获得的模型就是对被测试 1 5 第二章软件测试与面向g u i 的回归测试 软件系统精确的描述,可以用于软件测试。一般对软件不同行为要用不同模型 进行描述。 一个可测试的模型必须提供产生测试用例的足够的信息。模型应当既支持手 工产生测试用

温馨提示

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

评论

0/150

提交评论