大型软件回归测试方法研究

简介:
摘要:程序被修改后,要保证程序能正常运行并且修改不能给程序质量带来任何负面影响, 回归测试是必要的。大型软件系统结构复杂,构成要素多,如何做到不遗漏功能点同时降低软件回归测试代价,本文结合业务规则模型、修改影响分析和成本风险管理等技术提出了一种自动化回归测试方法。

  关键词:回归测试风险管理修改影响分析

  1、引言

  在软件测试过 程中,由于需要对软件进行修改,修改后的程序必须重新测试,以确保程序的修改是否达到了目的和是否引入了新的错误,这种测试就是回归测试。软件的变化可能 是源于发现了错误并做了修改,也有可能是因为在集成或维护阶段加入了新的模块。当软件中所包含的错误被发现时,如果对错误的跟踪管理系统不够完善,可能会 遗漏对这些错误的修改;而开发人员对错误理解的不够透彻,也可能导致所做的修改只修正了错误的外在表现,没有修改错误本身,甚至可能产生副作用,从而导致 软件未被修改的部分又产生新的问题,使本来正常的功能产生错误。同样,在有新代码加入软件的时候,除了新加入的代码中有可能含有错误外,新代码还有可能对 原有的代码带来影响。因此,每当软件发生变化时,我们就必须重新测试现有的功能,以便确定修改是否达到了预期的目的,检查修改是否损害了原有的正常功能。 因此需要进行回归测试。

  回归测试是一种代价较高,比较耗时的测试方法,然而又是必不可少的。大型软件通常规模大,系统结构复杂,构成要 素多、层次多,在渐进和快速迭代开发中,新版本的连续发布使回归测试的实施更加频繁。因此,通过选择正确的回归测试策略来改进回归测试的效率和效果,减小 回归测试代价是非常有意义的。

  2、大型软件回归测试面临的问题

  大型软件回归测试面临两个重大难题:一是系统变更引起的回归测试范围无法准确界定;二是参数组合引起的测试用例急剧膨胀,无法在较短时间内以合理成本完成最低覆盖率要求的回归测试。而且大型软件回归测试往往受到测试时间和测试环境条件的约束,而测试的工程性质又决定了它不可能达到理论上的完整。

  在有限的时间和资源条件下,为了更合理的规划和安排测试工作,在测试计划的制定阶段需要一个决策机制能够在资源约束,如时间、人力、成本的前提下基于风险管理和测试成本预算进行决策。

  随着软件生命周期的推进,软件的开发与回归测试反复迭代,规则的表达逐渐完善,测试用例库越来越丰富,回归测试的实施效率将越来越高。

  3、大型软件回归测试方法

  通过构建回归测试决策支持平台可以为大型软件的回归测试提供可行的解决方案。

  3.1 业务规则

   业务规则是定义和约束业务结构与业务行为的规定或规范,是业务运作和管理决策所依赖的重要资源。建立大型软件业务规则模型正是要继承资深测试专家所积累 的业务知识,使事实上得到使用的规则有一种显式的表达。在此基础上,结合测试理论和规则的整合以及用例优化算法,建立自动化用例生成系统。

  业务规则的来源一般包括:

  1)业务需求导出的规则;

  2)测试理论原则导出的规则;

  3)软件业传统导出的规则;

  4)业内常识导出的规则。

  业务规则模型的基础是手工测试中积累的一系列用例设计规则、行业规范和源于业务的特殊约束。业务规则模型用于表达这些手工时代的规则,并建立一种可加载规则的引擎结构,在通过该引擎加载规则后,可以通过决策支持系统生成面向某个具体过程的用例模板的基础用例集。

  所谓规则的加载,是将某条规则加入规则库中,重点是适用条件的表达和优化算法的指定。

  对于一个目标系统,一次穷尽所有可能的规则是不可能的,只能渐进地逼进,所以应该允许手工追加规则,这一过程是业务规则模型的学习过程。

 3.2 修改影响分析

  对于软件回归测试来说,确定修改影响的范围是至关重要的,修改的影响范围也是回归测试的目标范围。如果无法确定修改的范围,则理论上说就得把整个系统重测一遍,对于大型软件,这种代价也是巨大的。

  3.3 成本风险评估

  如何在有限的时间和资源预算下,更合理的规划和安排测试工作。回归测试在实践中往往受到测试时间、测试成本、人工投入和测试对象业务关键性等约束,因此需要制定一个科学的测试计划,以保证在满足各种条件约束的前提下能够确保测试质量。

  Boehm 用公式RE=P(UO)*L(UO)对风险进行定义,其中RE表示风险或者风险所造成的影响,P(UO)表示令人不满意的结果所发生的可能性,L(UO)表示糟糕的结果会产生的破坏性程度。

  因此,被测试对象f中存在的风险值 Re(f)的大小可以用出错的概率与出错的代价的乘积来表达:

  Re(f) = p(f)*l(f)

  确定待测试对象风险因素发生的可能性及其造成的损失的过程是风险估计阶段。将风险发生的概率与风险发生造成的损失相乘,可以得到每个测试对象的风险值。

  为了方便对风险进行定量的估计,采用等级评定的方法对出错代价和出错概率进行表达。其中风险概率由模块成熟度和开发人员的出错预期共同计算。确 定开发方的出错预期的依据是过往的缺陷率记录,在没有缺陷记录时,所有的开发人员度成熟度都默认为高,此后,个人成熟度分值随着个人缺陷率对平均缺陷率的 相对值和个人缺陷率趋势而变化。

  根据风险值的估算,可以确定待测试对象的最低测试深度。在测试深度的要求下,首先选择适当强度的测试用例简约算法进行试算,可以得出完成该对象测试需要的用例数。

  由于回归测试中大量用例可以复用,计算实施成本是需要对自动生成的测试用例和手工完成的测试用例区分对待,以不同的权重进行计算,最终得出整个 测试过程的实施成本。实施成本可以表示为测试投入的人时数。根据实施成本与项目预期成本投入和时间进行比较,判断待测试对象的成本是否在可以接受的范围 里,如果可以接受,就可以根据相应简约算法生成最终需要的测试用例库。如果实施成本无法接受,可以重新调整用例简约算法,降低或者提高测试强度,重新计算 实施成本,直到满足预算要求。

  4、结论

  回归测试研究有着广阔的空间,尤其对于系统结构复杂,构成要素多的大型系统软件回归测试,本文提出的自动化回归测试方法,对于降低回归测试代价,提高回归测试质量和效率具有及其重要的作用。








====================================分割线================================



最新内容请见作者的GitHub页:http://qaseven.github.io/

目录
相关文章
|
12天前
|
测试技术 开发者 Python
自动化测试之美:从零构建你的软件质量防线
【10月更文挑战第34天】在数字化时代的浪潮中,软件成为我们生活和工作不可或缺的一部分。然而,随着软件复杂性的增加,如何保证其质量和稳定性成为开发者面临的一大挑战。自动化测试,作为现代软件开发过程中的关键实践,不仅提高了测试效率,还确保了软件产品的质量。本文将深入浅出地介绍自动化测试的概念、重要性以及实施步骤,带领读者从零基础开始,一步步构建起属于自己的软件质量防线。通过具体实例,我们将探索如何有效地设计和执行自动化测试脚本,最终实现软件开发流程的优化和产品质量的提升。无论你是软件开发新手,还是希望提高项目质量的资深开发者,这篇文章都将为你提供宝贵的指导和启示。
|
29天前
|
测试技术 API 项目管理
API测试方法
【10月更文挑战第18天】API测试方法
45 1
|
1月前
|
机器学习/深度学习 人工智能 监控
提升软件质量的关键路径:高效测试策略与实践在软件开发的宇宙中,每一行代码都如同星辰般璀璨,而将这些星辰编织成星系的过程,则依赖于严谨而高效的测试策略。本文将引领读者探索软件测试的奥秘,揭示如何通过精心设计的测试方案,不仅提升软件的性能与稳定性,还能加速产品上市的步伐,最终实现质量与效率的双重飞跃。
在软件工程的浩瀚星海中,测试不仅是发现缺陷的放大镜,更是保障软件质量的坚固防线。本文旨在探讨一种高效且创新的软件测试策略框架,它融合了传统方法的精髓与现代技术的突破,旨在为软件开发团队提供一套系统化、可执行性强的测试指引。我们将从测试规划的起点出发,沿着测试设计、执行、反馈再到持续优化的轨迹,逐步展开论述。每一步都强调实用性与前瞻性相结合,确保测试活动能够紧跟软件开发的步伐,及时适应变化,有效应对各种挑战。
|
27天前
|
测试技术 UED
软件测试中的“灰盒”方法:一种平衡透明度与效率的策略
在软件开发的复杂世界中,确保产品质量和用户体验至关重要。本文将探讨一种被称为“灰盒测试”的方法,它结合了白盒和黑盒测试的优点,旨在提高测试效率同时保持一定程度的透明度。我们将通过具体案例分析,展示灰盒测试如何在实际工作中发挥作用,并讨论其对现代软件开发流程的影响。
|
12天前
|
机器学习/深度学习 人工智能 自然语言处理
自动化测试的新篇章:利用AI提升软件质量
【10月更文挑战第35天】在软件开发的海洋中,自动化测试犹如一艘救生艇,它帮助团队确保产品质量,同时减少人为错误。本文将探索如何通过集成人工智能(AI)技术,使自动化测试更加智能化,从而提升软件测试的效率和准确性。我们将从AI在测试用例生成、测试执行和结果分析中的应用出发,深入讨论AI如何重塑软件测试领域,并配以实际代码示例来说明这些概念。
40 3
|
19天前
|
Java 测试技术 Maven
Java一分钟之-PowerMock:静态方法与私有方法测试
通过本文的详细介绍,您可以使用PowerMock轻松地测试Java代码中的静态方法和私有方法。PowerMock通过扩展Mockito,提供了强大的功能,帮助开发者在复杂的测试场景中保持高效和准确的单元测试。希望本文对您的Java单元测试有所帮助。
35 2
|
26天前
|
敏捷开发 监控 jenkins
自动化测试之美:打造高效的软件质量保障体系
【10月更文挑战第20天】在软件开发的海洋中,自动化测试如同一艘精准的导航船,引领项目避开错误的礁石,驶向质量的彼岸。本文将扬帆起航,探索如何构建和实施一个高效的自动化测试体系,确保软件产品的稳定性和可靠性。我们将从测试策略的制定、工具的选择、脚本的编写,到持续集成的实施,一步步描绘出自动化测试的蓝图,让读者能够掌握这一技术的关键要素,并在自己的项目中加以应用。
29 5
|
26天前
|
Java 测试技术 持续交付
探索自动化测试的奥秘:提升软件质量的关键
【10月更文挑战第20天】 在当今快速发展的软件行业中,自动化测试已成为确保产品质量和加速开发周期的重要工具。本文将深入探讨自动化测试的核心概念、实施策略及其对软件开发生命周期的影响,旨在为读者提供一种全面理解自动化测试的视角,并展示如何有效地将其应用于实际项目中以提高软件质量和效率。
18 2
|
1月前
|
测试技术 Python
自动化测试项目学习笔记(三):Unittest加载测试用例的四种方法
本文介绍了使用Python的unittest框架来加载测试用例的四种方法,包括通过测试用例类、模块、路径和逐条加载测试用例。
62 0
自动化测试项目学习笔记(三):Unittest加载测试用例的四种方法
|
1月前
|
测试技术 Python
自动化测试项目学习笔记(二):学习各种setup、tearDown、断言方法
本文主要介绍了自动化测试中setup、teardown、断言方法的使用,以及unittest框架中setUp、tearDown、setUpClass和tearDownClass的区别和应用。
63 0
自动化测试项目学习笔记(二):学习各种setup、tearDown、断言方法
下一篇
无影云桌面