用技术提高回归测试精确度

简介:

在大家的常识中,回归测试在范围的选择上,有如下四种方法:

  1、测试全部用例——选择基线测试用例库中的全部测试用例,这是一种比较安全的方法,再测试全部用例具有最低的遗漏回归错误的风险,但测试成本最高;

  2、基于风险选择测试——可以基于一定的风险标准来从基线测试用例库中选择回归测试;

  3、基于操作剖面选择测试——如果基线测试用例库的测试用例是基于软件操作剖面开发的,回归测试可以优先选择那些针对最重要或最频繁使用功能的测试用例,释放和缓解最高级别的风险,有助于尽早发现那些对可靠性有最大影响的故障;

  4、再测试修改的部分——当测试者对修改的局部化有足够的信心时,可以通过相依性分析识别软件的修改情况并分析修改的影响,将回归测试局限于被改变的模块和它的接口上。

  我前一段时间在微博里发了一个号称“回归测试用例自动生成器”的设计图(如下),核心思路就是通过配置管理工具对版本差异的扫描来获取改动的文件,通过用代码扫描工具对改动文件的扫描得到改动的内容,再通过这些改动的内容扫描出关键字:

  SP:cursor、function、procedure……

  JAVA:method、interface、class、DAO、DTO……

  最后通过这些关键字和系统功能点、回归测试用例库中的测试用例,这三者的映射关系来精确的找到每次移交之后所要进行的关联测试。其实后来经过大家的讨论,发现这种构思叫“回归测试范围界定选择器”更加合适,用“生成”二字有点歧义。我自己也没有想清楚到底如何实现,需要关注哪些问题,但是我做这种设想的理由很简单:

  1、我厌倦了每次版本最后一次移交之后都需要的全面回归测试,这是一种无耻的浪费;

  2、我厌倦了这种“瞎蒙”式的回归测试,不精确,而且所谓的全面回归也无法避免测试遗漏;

  3、我不相信在没有足够的时间的情况下,所谓的回归测试剪裁,所谓基于风险的评估是无法保证规避一些重要的测试遗漏的;

  4、我不相信coder兄弟们告诉我的,他们基于本次版本所有需求所修改的内容,因为他们其中个别人往往会稍带着做一些自认为“无伤大雅的优化”;

  5、我憎恨任何一个把前期测试没有尽力却在出了测试遗漏的时候把责任推给回归测试的人,开发人员也好、测试人员也罢;

  当然,这些只是我个人主观上的认知倾向,貌似我应该用更有说服力的数据来说明我这么思考和想做这件事情的理由,那么不妨让我算一笔账给大家看看:

  1、前提:自动化开发和维护的成本撇开不算,因为有没有这个构思,自动化测试开发和维护都必须要做;

  2、按照目前Selenium/WebDriver的自动化回归测试脚本的粒度算,假设一个系统平均Web页面回归测试用例1000个,其中80%是自动化的,20%是手动的;

  3、这1000个Web页面测试Case的执行,总计约消耗12.67小时,其中人力是7人时:

  ● 受限与应用逻辑和环境效率,自动化平均每个可能要30s(现阶段全部门实际是100+,后续必须组织系统的优化),1000*80%*30=6.67小时;

  ● 手动的平均每个可能要执行1分钟到2分钟,按平均1分半计算:1000*20%*90=5小时;

  ● 自动化测试执行的6.67小时是机器时间,而我们需要关注和分析结果,同时硬件资源消耗在测试范围没有优化的情况下需要投入更多,这里将硬件资源的多余耗费也计入人力成本,则人力的总耗费大约为1.5+0.5=2小时;

  4、参照历史数据,实际上每个版本涉及的改动功能点和分支,只是整个系统功能点的10%不到,大家可以自己回顾思考一下有没有超过这个比例的;

  5、用10%的改动点,假设我们将回归测试用例挑选这件事情分三个步骤来做:

  ● 第一阶段:映射关系很粗糙,甚至只扫描到JAVA的独立文件和SP的独立文件,那么10%的改动点应该平均对应最多不过30%的回归测试用例的执行需求;

  ● 第二阶段:映射关系细化一层,JAVA改动点细化到.do/.screen,SP改动点细化到procedure,那么10%的改动点可能只涉及20%的回归测试用例的执行需求;

  ● 第三阶段:精确映射,加上关联影响的延伸,10%的改动点可能只会涉及15%左右的回归测试用例的执行需求;

  6、参照历史数据:在QC里,除去DB、EAI、ETL、TJS、MIS等暂时无需自动化回归测试的系统,最近107天发布版本约760个,这样算下来每年大约2600个版本,按照每人时180元计算,测试人力每人月成本3万,看一下每年这2600个版本的回归测试能够节省多少:

  ● 第一阶段:3万元/人月*(1-30%)*7*2600/22/7.58=约230万元

  ● 第二阶段:3万元/人月*(1-20%)*7*2600/22/7.58=约260万元

  ● 第三阶段:3万元/人月*(1-15%)*7*2600/22/7.58=约276万元

  对于某些保险公司或者银行来说,一年区区的两三百万算不得什么,不过,一屋不扫何以扫天下?精细经营才是王道,况且员工们在每次版本发布之前都能正常下班不也是Boss们的无上成就么?目前这个构思还在细化分析中,期待后续能够拿出实际的成果再来和大家分享。








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



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

目录
相关文章
|
1月前
|
机器学习/深度学习 存储 人工智能
现代软件测试技术的发展与应用
传统的软件测试方法在面对日益复杂的软件系统时已经显得力不从心。为了应对这一挑战,现代软件测试技术不断发展和演进,涌现出了一系列新的方法和工具,为软件质量保障提供了更加有效和全面的解决方案。本文将探讨现代软件测试技术的发展趋势以及其在实际应用中的价值和意义。
26 0
|
2月前
|
安全 测试技术
现代软件测试中的自动化技术应用及挑战
在当今数字化时代,软件测试的重要性日益凸显。本文探讨了现代软件测试中自动化技术的应用现状和挑战,分析了自动化测试在提高效率、降低成本、增强可靠性等方面的优势,同时也提出了自动化测试所面临的挑战和解决方案。
|
2天前
|
程序员 测试技术
程序员难以一次性写好代码并持续修复Bug,主要源于软件的高复杂性、需求不确定性、测试局限性和技术能力限制。
程序员难以一次性写好代码并持续修复Bug,主要源于软件的高复杂性、需求不确定性、测试局限性和技术能力限制。复杂的系统易产生意外问题,需求变化导致初始设计难完备,测试无法覆盖所有情况,而技术更新和个体能力差异也会引入错误。因此,持续调试和优化是保证软件质量的关键步骤。
6 0
|
8天前
|
敏捷开发 JavaScript 测试技术
深入理解与应用软件测试中的Mock技术
【5月更文挑战第5天】 在现代软件开发过程中,单元测试作为保障代码质量的重要环节,其独立性和可靠性至关重要。Mock技术应运而生,为开发者提供了一种在隔离环境下模拟外部依赖的方法。本文将深入探讨Mock技术的概念、实现方式及其在软件测试中的应用,旨在帮助读者更好地理解和运用这一强大的测试工具,以提升测试效率和软件质量。
|
11天前
|
安全 IDE Java
Java串口通信技术探究2:RXTX库单例测试及应用
Java串口通信技术探究2:RXTX库单例测试及应用
28 4
|
13天前
|
数据采集 机器学习/深度学习 人工智能
自动化测试中AI辅助技术的应用与挑战
【4月更文挑战第30天】随着人工智能(AI)技术的飞速发展,其在软件自动化测试领域的应用日益增多。本文探讨了AI辅助技术在自动化测试中的应用情况,包括智能化测试用例生成、测试执行监控、缺陷预测及测试结果分析等方面。同时,文章还分析了在融合AI技术时所面临的挑战,如数据质量要求、模型的透明度与解释性问题以及技术整合成本等,并提出了相应的解决策略。
|
13天前
|
JavaScript 前端开发 安全
【TypeScript技术专栏】TypeScript与Cypress端到端测试
【4月更文挑战第30天】随着前端开发复杂度提升,测试成为关键环节,Cypress因其强大的端到端测试和与TypeScript的集成备受青睐。TypeScript增强了代码的可读性和维护性,确保测试准确性和可靠性。在Cypress中,TypeScript用于定义测试变量、自定义命令和断言,提高测试代码质量。Cypress的优势包括模拟真实用户操作、时间旅行功能和强大的调试工具,能有效提升测试效率和准确性。结合两者,前端开发者能实现高效、全面的端到端测试。
|
13天前
|
JavaScript 安全 编译器
【TypeScript 技术专栏】TypeScript 与 Jest 测试框架
【4月更文挑战第30天】本文探讨了TypeScript与Jest测试框架的结合在确保代码质量和稳定性上的重要性。Jest以其易用性、内置断言库、快照测试和代码覆盖率分析等特点,为TypeScript提供全面的测试支持。两者结合能实现类型安全的测试,提高开发效率,并涵盖各种测试场景,包括异步操作。通过实际案例分析,展示了如何有效利用这两个工具提升测试质量和开发效率,为项目成功奠定基础。
|
13天前
|
监控 JavaScript 前端开发
【TypeScript技术专栏】TypeScript的单元测试与集成测试
【4月更文挑战第30天】本文讨论了在TypeScript项目中实施单元测试和集成测试的重要性。单元测试专注于验证单个函数、类或模块的行为,而集成测试关注不同组件的协作。选用合适的测试框架(如Jest、Mocha),配置测试环境,编写测试用例,并利用模拟和存根进行隔离是关键。集成测试则涉及组件间的交互,需定义测试范围,设置测试数据并解决可能出现的集成问题。将这些测试整合到CI/CD流程中,能确保代码质量和快速响应变化。
|
13天前
|
缓存 监控 前端开发
【Flutter前端技术开发专栏】Flutter应用的性能调优与测试
【4月更文挑战第30天】本文探讨了Flutter应用的性能调优策略和测试方法。性能调优对提升用户体验、降低能耗和增强稳定性至关重要。优化布局(避免复杂嵌套,使用`const`构造函数)、管理内存、优化动画、实现懒加载和按需加载,以及利用Flutter的性能工具(如DevTools)都是有效的调优手段。性能测试包括基准测试、性能分析、压力测试和电池效率测试。文中还以ListView为例,展示了如何实践这些优化技巧。持续的性能调优是提升Flutter应用质量的关键。
【Flutter前端技术开发专栏】Flutter应用的性能调优与测试

热门文章

最新文章