用例自动生成——阿里测试之道_阿里的测试之道,2024年最新干了5年软件测试开发还没掌握binder机制

本文介绍了如何通过用例自动生成技术,如录制回放、符号执行、模型和搜索等,提升软件测试的充分性,以及测试数据和测试预言的自动化生成。提供了一份全面的学习资料,旨在帮助程序员系统化提升技能,解决自我学习中的难题。
摘要由CSDN通过智能技术生成

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新软件测试全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注软件测试)
img

正文

我们可以从两个角度来提升测试充分性和解决“不知道自己不知道”问题。

用例自动生成:用技术手段减少测试人员的个人能力差异的影响,减少对个人经验的依赖。

业务覆盖率度量:用技术手段发现测试遗漏,为补充测试用例、提升测试充分性指明方向。

1.7.1用例自动生成

对于人工枚举测试用例(TestCaseEnumeration)来说,一方面人力的多少和水平的高低限制了测试用例的数目和质量,另一方面人工无法穷举所有的输入作为测试用例,也无法想到所有可能的业务场景。为了解决这些问题,用例自动生成技术得到越来越广泛的研究和使用。用例自动生成的重要作用是减少漏测、提效、节省人力成本。

自动生成测试用例赋能业务场景的情况如图1-8所示。

img

▲图1-8自动生成测试用例赋能业务场景的情况

1.从测试用例自动生成技术的角度看

录制回放是一种运用比较广泛的用例自动生成技术。例如,阿里的双引擎自动回归平台是一个复制线上真实流量并用于自动回归测试的平台。除了录制回放,还有以下几类用例自动生成技术。

(1)基于符号执行(SymbolicExecution)。符号执行是一种经典的程序分析技术,它以符号值作为输入,而非一般程序执行的具体值。经分析得到路径约束后,通过约束求解器得到客户触发目标代码的具体值,如JBSE、JDart和SUSHI等。但是这种方法存在路径爆炸、路径发散、复杂约束求解难的问题。

(2)基于模型。这里的模型指能够形式化,程序可以理解和执行的行为描述,包括有限状态机(FiniteStateMachines)、理论证明(TheoremProving)、约束逻辑编程(ConstraintLogicProgramming)、模型检查器(ModelChecking)、马尔可夫链(MarkovChain)。目前,大多数模型仍需手动创建,在真正实现自动化创建模型之前还要克服较多的困难。

(3)基于搜索。基于搜索的测试用例自动生成技术(SBST)是基于搜索的软件工程(SBSE)的一个子领域。通过定义适应度函数,将测试用例自动生成问题转化为目标优化问题,进而用各类搜索算法来解决。例如,全局搜索算法包括遗传算法、粒子群优化算法和蚁群算法等;局部搜索算法包括爬山算法和模拟退火算法(如JTest、JCrasher、eToc、Randoop、EvoSuite及GRT等)。近年来该技术得到较快发展,例如通过提高代码覆盖率、多目标帕累托优化、强化学习来指导测试参数的变异过程,如Zest、RLCheck等。基于覆盖率的模糊测试(Coverage-guidedFuzzing)也可以归入此类。

2.从测试过程的角度看

用例的自动生成包含测试数据的自动生成、测试方法序列的自动生成和测试预言(TestOracle)的自动生成。

(1)测试数据的自动生成。测试数据包括针对基本类型(如整数型、字符串型)的参数值及针对实体对象类的参数值。应用的技术主要为基于随机的技术、基于搜索的技术和基于程序语义的技术,如符号执行(SymbolicExecution)。目前,业界已经提出了很多为基本类型参数生成数据的技术,但是这些技术对于复杂的被测软件效果仍然不够好,取得的代码覆盖率不够高。另外,针对实体对象类参数生成数据的技术大多局限于通过随机生成方法序列来产生对象状态(如Randoop、AgitarOne、Jtest)或基于搜索生成方法序列来产生对象状态(如EvoSuite)。而最近有一些研究(如JQF、Zest、RLCheck)通过人工撰写数据生成方法(Generator)生成特定的类型或格式的数据,并且和Coverage-guided方法结合起来,针对给定的种子输入参数,进行变异生成新的输入参数,保留覆盖新代码的变异结果作为新的种子,生成的新参数的语义覆盖率更高,在一些基本类型参数值的生成上做得较好,对于提升代码覆盖率和缩短问题发现时间效果明显,如图1-9所示。但是针对实体对象类参数值,完全依赖于人工撰写带参数的数据生成方法(其返回值类型是实体对象类),使得测试数据的生成并不是全自动化的,如图1-10所示。

我们将人工撰写数据生成方法改造成XML配置的自动化数据生成方法,将复杂的实体类对象生成器进行基于属性(Property)的改造,并且引入线上录制的流量数据,作为更有效的种子初参。通过这些操作,在真实业务系统中,测试人员手写的单元测试用例的代码覆盖率提升了66%。经过变异后,自动生成的符合业务逻辑的入参数据增加了5倍,如图1-11所示。

▲图1-11XML配置的自动化数据生成方法

后续工作:

根据已有(自动产生或者线上捕获的)参数值采用组合测试的技术,有效覆盖需要现有参数值特定组合才能覆盖触发的Bug或者未曾覆盖的语句。

在实体对象类参数值的生成上,利用Randoop和EvoSuite生产的方法序列来提取高效的方法子序列自动合成数据。同时利用在线数据学习得出实体对象类的不变量,然后直接构建可以覆盖但未曾覆盖的语句,且满足类不变量的参数对象状态。这里的研究问题是:生成的哪些子序列要放到数据生成方法里?答案是将收集到的子序列中每个方法调用的recieverobjectstates都放到数据生成方法里。这样做会有很多数据生成方法。我们需要探索一些新技术来进一步减少数据生成方法的数量。

(2)测试预言的自动生成。测试预言的自动生成技术主要通过捕获方法返回值合成回归测试断言(预跑返填)和能推断出运行态状态遵循的属性规约的机器学习技术。业界商用工具ParasoftJtest在自生成测试预言上主要采用捕获方法的返回值合成回归测试断言的技术,只适用于回归测试并且检测Bug能力有限的情况。Agitar的AgitarOne主要采用能推断出运行态状态遵循的属性规约的机器学习技术,而且需要用户人工甄别工具所推荐的断言为真或假。

我们已经调用观测方法对产生的测试用例中的实体对象的返回值合成了回归测试断言,并且可以一键更新断言的期望值,如图1-12、图1-13所示。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注软件测试)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值