一、概述

所谓回归测试就是当软件发生改变时,重新测试已经通过测试的测试区域,以验证修改的正确性及其影响。在软件开发生命周期中,软件发生改变,就会带来问题,改变可能是源于发现了错误并做了修改,也有可能是因为集成或维护阶段加入了新模块。

错误跟踪与管理系统不完善;对错误的理解不透彻,只修正了错误的外在表现,从而造成修改失败;修改还有可能产生副作用,从而导致软件未被修改的部分产生新的问题;新加入的代码还有可能对原有代码带来影响。因此,我们就必须重新测试,以便确定修改是否达到了预期的目的。同时,为了验证修改的正确性及其影响就需要进行回归测试。

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

二、测试的大部分工作是做回归测试

软件一旦作了修改就必须进行项目的测试组在实施测试的过程中会将所开发的测试用例保存到“测试用例库”中,并对其进行维护和管理。当得到一个软件的基线版本时,用于基线版本测试的所有测试用例就形成了基线测试用例库。在需要进行回归测试的时候,就可以根据所选择的回归测试策略,从基线测试用例库中提取合适的测试用例组成回归测试包,通过运行回归测试包来实现回归测试。

保存在基线测试用例库中的测试用例可能是自动测试脚本,也有可能是测试用例的手工实现过程。回归测试需要时间、经费和人力来计划、实施和管理。在给定的预算和进度下,需要对测试用例库进行维护并依据一定的策略选择相应的回归测试包。

1、首先必须有个管理良好的测试用例库,用例库中的所有用例必须有效,达到足够的覆盖率。这需要有良好的测试管理工具,并有相应的资源(时间与人力)去维护这个测试用例库,使其中没有过时,冗余的测试用例。

如何管理组织好测试用例库是一个值得深入研究的课题,要做好回归测试,组织管理良好的测试用例库是前提。测试用例库的维护为了最大限度地满足客户的需要和适应应用的要求,软件在其生命周期中会频繁地被修改和不断推出新的版本,修改后的或新版本软件会添加新的功能或者变化。同时,被修改的或新增添的软件功能,仅靠重新运行以前的测试用例不行,必须追加新的测试用例来测试。

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

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

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

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

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

2、回归测试的实质在于它是一个能够检测到回归错误的受控实验

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

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

(2)基于风险选择测试。可以基于一定的风险标准来从基线测试用例库中选择回归测试包。首先运行最重要的、关键的和可疑的测试,而跳过那些非关键的、优先级别低的或者高稳定的测试用例,这些用例即便可能测试到缺陷,其严重性也仅有三级或四级。

(3)基于操作剖面选择测试。若基线测试用例库的测试用例是基于软件操作剖面开发的,测试用例的分布情况反映了系统的实际使用情况。回归测试所使用的测试用例个数可由测试预算确定,优先选择针对最重要或最频繁使用功能的测试用例,释放和缓解最高级别风险,有助于尽早发现那些对可靠性有最大影响的故障。

(4)再测试修改的部分。当测试者对修改的局部化有足够的信心时,可以通过相依性分析识别软件的修改情况并分析修改的影响,将回归测试局限于被改变的模块和它的接口上。通常,一个回归错误一定涉及一个新的、修改的或删除的代码段。在允许的条件下,回归测试尽可能覆盖受到影响的部分。

再测试全部用例的策略是最安全的策略,但过时回归测试不太可能揭示新的错误,而且由于时间、人员、设备和经费的原因,不允许选择再测试全部用例的回归测试策略,此时,可选择适当的策略进行缩减的回归测试。

3、实际工作中,回归测试需要反复进行,回归测试的基本过程有了测试用例库的维护方法和回归测试包的选择策略

回归测试可遵循下述基本过程进行:

(1)识别软件中被修改的部分;

(2)从原基线测试用例库中,排除所有不再适用的测试用例,确定那些对新的软件版本依然有效的测试用例,其结果是建立一个新的基线测试用例库t。

(3)依据一定的策略从t中选择测试用例测试被修改的软件。

(4)若必要可生成新的测试用例集t1,用于测试t无法充分测试的软件部分。

(5)用t1修改后的软件。第b和第c步测试验证修改是否破坏了现有的功能,第d和第e步测试验证修改工作本身。

三、结论

1、无论采取何种策略,回归测试是必须的一种测试。回归测试时我们必须采取一些较为有效的方法。例如安排新的测试者完成手工回归测试,让更有经验的测试者开发新的测试用例,做一些探索性的测试。但最重要的就是基于实际可行的引进自动化测试,因为机器不会累。实际中,回归测试的重复将非常令人厌烦,因此,需要通过自动测试来实现重复的和一致的回归测试,提高回归测试效率。

2、在测试软件时,应用多种测试技术是常见的。测试时,测试者希望采用多于一种回归测试策略来增加修改软件的信心。如果回归测试包不能达到所需的覆盖要求,必须补充新的测试用例。回归测试是重复性较多的活动,容易使测试者感到疲劳和厌倦,降低测试效率,在实际中可以采用一些策略减轻这些问题。可以在不影响测试目标的情况下,鼓励测试者创造性地执行测试用例,变化输入、按键和配置能够有助于激励测试者又能揭示新的错误。

3、回归测试需要根据项目、测试资源等实际情况采取有效计划和组织。其中需要注意的是必须重视回归测试,在测试计划中有很好的进度安排及选择相应的回归,重视测试用例的维护,借助于自动化工具。

在组织测试时需注意:首先是各测试阶段的修改一定要在本测试阶段内完成回归,以免将错误遗留到下一测试阶段。其次,测试期间应对软件版本冻结,将测试发现的问题集中修改,集中回归。建议将回归测试与兼容性测试结合起来。在新的配置条件下运行旧的测试可以发现兼容性问题,同时也可以揭示编码在回归方面的错误。

回归测试的关键性和重要性及测试方法相关推荐

  1. 2021-07-28 关于软件测试从业人员的几个误解

    目前软件测试对提高软件质量重要性的不断提高,软件测试也不断受到重视. 国内软件测试过程的不规范,重视开发和轻视测试的现象依旧存在 因此,对于软件测试的重要性.测试方法和测试过程等方面都存在很多不恰当的 ...

  2. 单元测试与集成测试、系统测试、测试过程管理、软件测试自动化的综合练习

    1.关于单元测试,下列说法正确的是(D) A单元测试只能使用白盒测试技术设计测试用例 B所有黑盒测试技术均适用于单元测试用例设计 C如果被测模块调用的硬件驱动模块未就绪,可以编写测试模块来替代这部分硬 ...

  3. 软件测试技术课后习题:第7章系统测试-广东高等教育出版社,主编杨胜利

    目录 1.什么是系统测试?系统测试和集成测试有什么区别? 2.功能测试的主要工作内容有哪些?如何选择测试用例设计方法? 3.什么是回归测试?回归测试有什么特征? 4.测试用例的维护主要包括哪些内容? ...

  4. MariaDB 10.0 和 MySQL 5.6 有何不同

    去年的5月,我第一次在博客上介绍了关于MariaDB 10.0. 我们当时收到很多的反馈,在进行众人意见总结后,我们再次的更加深入的解释过MariaDB 10.0. 在新的一年的伊始,随着MariaD ...

  5. android Instrumentation 转载

    Android提供了一系列强大的测试工具,它针对Android的环境,扩展了业内标准的JUnit测试框架.尽管你可以使用JUnit测试Android工程,但Android工具允许你为应用程序的各个方面 ...

  6. 你真的懂软件测试人员的痛苦吗?——目前软件测试5大误区

    随着软件测试对提高软件质量重要性的不断提高,软件测试也不断受到重视.但是,国内软件测试过程的不规范,重视开发和轻视测试的现象依旧存在. 因此,对于软件测试的重要性.测试方法和测试过程等方面都存在很多不 ...

  7. 程序员为什么要学习软件工程

    按照惯例,先回顾一下这周完成的工作: (1)练习英语听力240分钟 (2)完成了三个Test Case的自动化测试实现 (3)修复5个bug (4)发布小版本,做回归测试 (5)读完<构建之法& ...

  8. 288.软件开发过程与软件测试

    1.软件开发过程概述 1.1 软件开发的阶段.活动及角色 1.软件工程的阶段 软件工程的三个阶段: 定义.开发.检验交付与维护 (1)定义阶段:可行性研究初步项目计划.需求分析.如图2-1所示. 图2 ...

  9. 如果你对自己有要求 | “回顾,再出发”——记2020软工提问回顾与个人总结

    回顾,再出发 项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任建) 这个作业的要求在哪里 提问回顾与个人总结 我在这个课程的目标是 完成一次完整的软件开发经历 并以博客的方式 ...

最新文章

  1. C++编程的175条“军规”
  2. UML图系列——用例图
  3. Kotlin实战指南十九:use 函数魔法
  4. 经典|Linux:为什么性能工具需要 BPF 技术(送多本)
  5. JavaScript-client、offset、scroll、定时器
  6. 前端学习(542):node得环境搭建
  7. python改变列的数据类型_PySpark SQL: 改变列的数据类型
  8. 第2章[2.1] 开发模式及快速测试方式
  9. Access 数据库导入到SQL Server 2000
  10. 矩形窗、汉明窗、汉宁窗的频率响应图
  11. 一块带给无数人年少欢乐的CPU
  12. flvjs is not defined
  13. 怎么修改docker镜像的名字_docker镜像如何重命名
  14. cocos creator切换场景闪退_#Cocos Creator# 为什么音乐音效在场景切换的时候自动停止了?...
  15. 蝴蝶效应 青蛙现象 鳄鱼法则 马太效应 木桶理论 二八定律(巴莱多定律) 破窗理论 羊群效应
  16. EMQ X 存储消息到 MySQL 数据库
  17. 【PyTorch】PyTorch神经网络实战入门
  18. 怎么删除github项目/仓库中已经上传的代码
  19. win7 64位 java_1.win7 64位 java安装
  20. pencv 二值图像的孔洞填充

热门文章

  1. 关于Restful风格使用的一些误区
  2. 模拟股票预期收益案例源代码
  3. MyBatis-plus 从入门到入土
  4. Material Design设计规范与符合MD设计风格的库、APP
  5. 5G NR的速率计算方法
  6. Torch.empty
  7. std::string::empty
  8. 计算机p是什么单位是什么,电脑分辨率的单位是什么
  9. 【数字信号处理】傅里叶分析:FS、FT、DTFT、DFS、DFT、TTF
  10. 封魔录聊天窗口默认文本功能