回归测试
上一篇 / 下一篇 2009-03-27 15:34:15 / 个人分类:收藏
回归测试可以就一套已经安装好并且在运行的服务器进行测试, 也可以就制作树里面临时安装的服务器进行测试.详细些说,有 "并行"和"串行"运行测试之分.串行模式顺序运行每个测试,而并行模式激活多个服务器进程, 并行地运行一组测试. 并行测试使我们对进程内部通讯和锁的正确工作有足够的信心.由于历史原因,串行测试通常对一个现存的安装进行测试,而并行 测试是"独立"的,不过这么做没有什么技术原因.
o0NSh!e`2X0t1z6l7{d.SD0 每当一个新的模块被当作集成测试的一部分加进来的时候,软件就 发生了改变。新的数据流路径建立起来,新的I/O操作可能也会出现,还有可能激活了新的控制逻辑。这些改变可能会使原本工作得很正常的功能产生错误。在集 成测试策略的环境中,回归测试是对某些已经进行过的测试的某些子集再重新进行一遍,以保证上述改变不会传播无法预料的副作用。
4sL L-c Xp0Pz%pTg3|S?0 在更广的环境里,(任何种类的)成功测试结果都是发现错误,而错误是要被修改的,每当软件被修改的时候,软件配置的某些方面(程序、文档、或者数据)也被修改了,回归测试就是用来保证(由于测试或者其他原因的)改动不会带来不可预料的行为或者另外的错误。
WR-`J3V_R051Testing软件测试网Ye@J)_S回归测试可以通过重新执行所有的测试用例的一个子集人工地进行,也可以使用自动化的捕获回放工具来进行。捕获回放工具使得软件工程师能够捕获到测试用例,然后就可以进行回放和比较。回归测试集(要进行的测试的子集)包括三种不同类型的测试用例:
3q!NoG8V#L$Q051Testing软件测试网1u4J-H*gV6x9B ·能够测试软件的所有功能的代表性测试用例。
} G:rvPFy
U0 ·专门针对可能会被修改影响的软件功能的附加测试。
j ||$R:pbjvX R0 ·针对修改过的软件成分的测试。
在集成测试进行的过程中,回归测试可能会变得非常庞大。因此,回归测试应当设计为只包括那些涉及在主要的软件功能中出现的一个或多个错误类的那些测试,每当进行一个修改时,就对每一个程序功能都重新执行所有的测试是不实际的而且效率很低的。51Testing软件测试网,Q] p!Pwzh8j
51Testing软件测试网#c l`Vto;{dC一、 概述
j4b&@I L&jOQ7D051Testing软件测试网9u`y'J8J1l(d在软件生命周期中 的任何一个阶段,只要软件发生了改变,就可能给该软件带来问题。软件的改变可能是源于发现了错误并做了修改,也有可能是因为在集成或维护阶段加入了新的模 块。当软件中所含错误被发现时,如果错误跟踪与管理系统不够完善,就可能会遗漏对这些错误的修改;而开发者对错误理解的不够透彻,也可能导致所做的修改只 修正了错误的外在表现,而没有修复错误本身,从而造成修改失败;修改还有可能产生副作用从而导致软件未被修改的部分产生新的问题,使本来工作正常的功能产 生错误。同样,在有新代码加入软件的时候,除了新加入的代码中有可能含有错误外,新代码还有可能对原有的代码带来影响。因此,每当软件发生变化时,我们就 必须重新测试现有的功能,以便确定修改是否达到了预期的目的,检查修改是否损害了原有的正常功能。同时,还需要补充新的测试用例来测试新的或被修改了的功 能。为了验证修改的正确性及其影响就需要进行回归测试。
o Fi,U&]051Testing软件测试网1vA{M6r(rkN回归测试在软件生命周期中扮演着重要的角色,因忽视回归测试而造成严重后果的例子不计其数,导致阿里亚娜5型火箭发射失败的软件缺陷就是由于复用的代码没有经过充分的回归测试造成的。51Testing软件测试网r,o J3hrgQ2\
51Testing软件测试网%X5Xp:_.[-?}9D回归测试作为软件生命周期的一个组成部分,在整个软件测试过程中占有很大的工作量比重,软件开发的各个阶段都会进行多次回归测试。在渐进和快速迭??加频繁,而在极端编程方法中,更是要求每天都进行若干次回归测试。因此,通过选择正确的回归测试策略来改进回归测试的效率和有效性是非常有意义的。51Testing软件测试网 V/IY;s3CJ/t
^'R)`:Gd7i2k2u&[0二、 回归测试策略 51Testing软件测试网$`Yk%FJc&M5o8S
51Testing软件测试网w#F+R3cBS+l5e&s"\对于一个软件开发项目来说,项目的测试组在实施测试的过程中会将所开发的测试用例保存到“测试用例库”中,并对其进行维护和管理。当得到一个软件的基线版 本时,用于基线版本测试的所有测试用例就形成了基线测试用例库。在需要进行回归测试的时候,就可以根据所选择的回归测试策略,从基线测试用例库中提取合适 的测试用例组成回归测试包,通过运行回归测试包来实现回归测试。保存在基线测试用例库中的测试用例可能是自动测试脚本,也有可能是测试用例的手工实现过 程。
4e)r3nBS2`&P1j0/CjzR5I}0 回归测试需要时间、经费和人力来计划、实施和管理。为了在给定的预算和进度下,尽可能有效率和有效力地进行回归测试,需要对测试用例库进行维护并依据一定的策略选择相应的回归测试包。
Qli5jOf&AH051Testing软件测试网|;jsLZv8_)J"e1、测试用例库的维护 51Testing软件测试网s*{)U ?!``%jV[
51Testing软件测试网f1w6~t5L-|,Z为了最大限度地满足客户的需要和适应应用的要求,软件在其生命周期中会频繁地被修改和不断推出新的版本,修改后的或者新版本的软件会添加一些新的功能或者 在软件功能上产生某些变化。随着软件的改变,软件的功能和应用接口以及软件的实现发生了演变,测试用例库中的一些测试用例可能会失去针对性和有效性,而另 一些测试用例可能会变得过时,还有一些测试用例将完全不能运行。为了保证测试用例库中测试用例的有效性,必须对测试用例库进行维护。同时,被修改的或新增 添的软件功能,仅仅靠重新运行以前的测试用例并不足以揭示其中的问题,有必要追加新的测试用例来测试这些新的功能或特征。因此,测试用例库的维护工作还应 包括开发新测试用例,这些新的测试用例用来测试软件的新特征或者覆盖现有测试用例无法覆盖的软件功能或特征。 51Testing软件测试网ok6|%xk!|)HG
[HUr(k B0 测试用例的维护是一个不间断的过程,通常可以将软件开发的基线作为基准,维护的主要内容包括下述几个方面。
9Dz8['`9m8F%p0P0aP lw)X @
g0 (1)、删除过时的测试用例51Testing软件测试网v/w&Bi{u)_!L#g5[?
因为需求的改变等原因可能会使一个基线测试用例不再适合被测试系统,这些测试用例就会过时。例如,某个变量的界限发生了改变,原来针对边界值的测试就无法完成对新边界测试。所以,在软件的每次修改后都应进行相应的过时测试用例的删除。
(2)、改进不受控制的测试用例
ds)S"E-N;[0 随着软件项目的进展,测试用例库中的用例会不断增加,其中会出现一些对输入或运行状态十分敏感的测试用例。这些测试不容易重复且结果难以控制,会影响回归测试的效率,需要进行改进,使其达到可重复和可控制的要求。51Testing软件测试网1H&c
pl6s'K%O
K#a;nT:W;E2H2y0 (3)、删除冗余的测试用例
cq@X7k,\dV0 如果存在两个或者更多个测试用例针对一组相同的输入和输出进行测试,那么这些测试用例是冗余的。冗余测试用例的存在降低了回归测试的效率。所以需要定期的整理测试用例库,并将冗余的用例删除掉。
mwZ
q(\J)_o5c6}0 (4)、增添新的测试用例
lL G6b&s0 如果某个程序段、构件或关键的接口在现有的测试中没有被测试,那么应该开发新测试用例重新对其进行测试。并将新开发的测试用例合并到基线测试包中。 51Testing软件测试网 };A7bY"bJ4o-S8R*C
通过对测试用例库的维护不仅改善了测试用例的可用性,而且也提高了测试库的可信性,同时还可以将一个基线测试用例库的效率和效用保持在一个较高的级别上。
LbEe#JL0c0nWLT)XZ0 2、回归测试包的选择 51Testing软件测试网.A@7[OsF
'r_[\Y!NHmf0 在软件生命周期中,即使一个得到良好维护的测试用例库也可能变得相当大,这使每次回归测试都重新运行完整的测试包变得不切实际。一个完全的回归测试包括每 个基线测试用例,时间和成本约束可能阻碍运行这样一个测试,有时测试组不得不选择一个缩减的回归测试包来完成回归测试。