一、概述

  所谓回归测试是当软件发生改变时,重新测试已经通过测试的测试区域,以验证修改的正确性及其影响。在软件开发生命周期中,软件发生改变,会带来问题。改变可能是源于发现了错误并做了修改,也有可能是因为集成或维护阶段加入了新模块。错误跟踪与管理系统不完善;对错误的理解不透彻,只修正了错误的外在表现,从而造成修改失败;修改还有可能产生副作用,从而导致软件未被修改的部分产生新的问题;新加入代码还有可能对原有代码带来影响。因此,我们必须重新测试,以便确定修改是否达到了预期的目的。同时,为了验证修改的正确性及其影响需要进行回归测试。

  回归测试作为软件生命周期的一个组成部分,在整个软件测试过程中占有很大的工作量比重,软件开发的各个阶段都会进行多次回归测试。在渐进和快速迭代开发中,新版本的连续发布使回归测试进行的更加频繁,而在极端编程方法中,更是要求每天都进行若干次回归测试。因此,通过选择正确的回归测试策略来改进回归测试的效率和有效性是非常有意义的。

  二、测试的大部分工作是做回归测试,软件一旦作了修改必须进行

  项目的测试组在实施测试的过程中会将所开发的测试用例保存到“测试用例库”中,并对其进行维护和管理。当得到一个软件的基线版本时,用于基线版本测试的所有测试用例形成了基线测试用例库。在需要进行回归测试的时候,可以根据所选择的回归测试策略,从基线测试用例库中提取合适的测试用例组成回归测试包,通过运行回归测试包来实现回归测试。保存在基线测试用例库中的测试用例可能是自动测试脚本,也有可能是测试用例的手工实现过程。回归测试需要时间、经费和人力来计划、实施和管理。在给定的预算和进度下,需要对测试用例库进行维护并依据一定的策略选择相应的回归测试包。

  1、首先必须有个管理良好的测试用例库,用例库中的所有用例必须有效,达到足够的覆盖率。这需要有良好的测试管理工具,并有相应的资源(时间与人力)去维护这个测试用例库,使其中没有过时,冗余的测试用例。如何管理组织好测试用例库是一个值得深入研究的课题,要做好回归测试,组织管理良好的测试用例库是前提。测试用例库的维护为了大限度地满足客户的需要和适应应用的要求,软件在其生命周期中会频繁地被修改和不断推出新的版本,修改后的或新版本软件会添加新的功能或者变化。同时,被修改的或新增添的软件功能,仅靠重新运行以前的测试用例不行,必须追加新的测试用例来测试。

  测试用例库维护是一个连续的过程,通常可以将软件开发的基线作为基准,维护的主要内容包括:

  (1)删除过时的测试用例。因为需求的改变等原因可能会使一个基线测试用例不再适合被测试系统,这些测试用例会过时。

  (2)改进不受控制的测试用例。随着软件项目进展,库中的用例会不断增加,会出现对输入或运行状态十分敏感的测试用例。这些测试不容易重复且结果难以控制,影响测试效率。

  (3)删除冗余的测试用例。冗余测试用例的存在降低了回归测试的效率。所以需要定期的整理测试用例库,并将冗余的用例删除掉。

  (4)增添新的测试用例。程序段、构件或关键的接口在现有的测试中没有被测试,应该开发新测试用例。不仅改善了测试用例的可用性,而且也提高了测试库的可信性,同时还可以将一个基线测试用例库的效率和效用保持在一个较高的级别上。

  2、回归测试的实质在于它是一个能够检测到回归错误的受控实验。回归测试包的选择在软件生命周期中,即使一个得到良好维护的测试用例库,也可能变得相当大,这使每次回归测试都重新运行完整的测试包变得不切实际。当测试组选择缩减的回归测试时,有可能删除了将揭示回归错误的测试用例,消除了发现回归错误的机会。然而,如果采用了代码相依性分析等安全缩减技术,可决定哪些测试用例可以被删除而不会让回归测试的意图遭到破坏。选择回归测试策略应该兼顾效率和有效性两个方面。常用的选择回归测试的方式包括:

  (1)再测试全部用例。选择基线测试用例库中的全部测试用例组成回归测试包,这是比较安全的方法,它具有低遗漏和风险,但测试成本高。往往超出我们的预算和进度。