《周海莲-基于AIGC的蚂蚁新一代测试用例自动生成技术.pdf》由会员分享,可在线阅读,更多相关《周海莲-基于AIGC的蚂蚁新一代测试用例自动生成技术.pdf(23页珍藏版)》请在三个皮匠报告上搜索。
1、基于AIGC的蚂蚁新一代测试用例自动生成技术周海莲 蚂蚁集团演讲嘉宾周海莲(花名:慕蓝)蚂蚁集团平台工程与技术风险部 高级技术专家目前主要负责测试用例自动生成方向。毕业后曾就职于百度、阿里、蚂蚁,负责过搜索系统、广告系统的质量保障和质量平台研发。2020年以来加入蚂蚁,负责测试用例自动生成方向,孵化出智能单元测试用例生成产品SmartUnit,在蚂蚁集团、阿里集团的多个BU中使用并取得优秀落地效果。2023年开始探索基于AIGC的新一代测试用例生成技术,并在蚂蚁内部实践落地;目 录CONTENTS1.测试用例生成的技术演进2.现有技术的问题和痛点3.基于AIGC的蚂蚁新一代测试用例自动生成4.
2、总结与展望测试用例自动生成的技术演进PART 01测试用例自动生成【测试智能化】人工手写大量测试用例 极致用户体验的用例编写方式:秒级智能生成高覆盖率、高有效性的测试用例MOCK成本高历史负债变更修正用例量级大运维吃力无有效Assert各阶段修复问题成本理想中的测试用例Google测试金字塔实际中的测试用例实际项目中测试占比测试用例的开发运维成本单测量级大技术演进路线技术方向发展历史优势不足模糊测试 Fuzzing1988年,Fuzz Generator首次被提出,用于测试Unix程序的健壮性,通过构造大量测试输入从而发现软件漏洞。2013年,Fuzzing技术迎来分水岭:AFL,首次采用通过
3、插桩获取代码覆盖从而引导Fuzzing的方式。这一技术随后被应用至测试用例生成领域。Fuzzing在安全领域获得了非常好的发现漏洞效果覆盖率不够好、生成用例量过大基于符号执行Symbolic Execution1976年,Symbolic Execution的概念首次被提出,通过解析程序的路径,用符号模拟通过路径并获得输出。2006年,研究人员提出了一种”先进行符号执行,后根据符号执行结果生成测试用例”的执行生成测试技术,这项技术后来发展出了用于检测Linux内核错误的KLEE。对能够求解出的路径,可以精准命中分支存在路径爆炸、约束求解复杂等问题,单一的符号执行技术难以实现测试用例生成基于搜索
4、Search Based Software Testing1990年,B.Korel提出了使用动态数据流分析的技术进行路径覆盖,这是基于搜索的测试用例生成的初始想法。SBST从问题的解空间出发,通过启发式搜索优化算法来解决测试用例生成的问题。可扩展性高,可以应用多种搜索算法,如遗传算法、爬山算法等等。随机性高基于AIGC2023年,基于AIGC的代码生成能力惊艳亮相,给用例生成领域带来了底层核心技术的变革。-可读性高-可扩展性强-生成效率高-生成用例的执行通过率仍在持续提升中现有技术的问题和痛点PART 02用例生成的难点与挑战用例数据构造业务落地难点技术难点复杂数据类型:大型业务系统中通常包
5、含复杂数据类型,如多层嵌套的JSON结构、复杂Object等;复杂语言特性:匿名内部类、lambda表达式等广泛应用于业务系统中;用例有效性运行效率:单测用例量级较大,需保证相应的运行效率,以适配Devops;环境依赖:需进行用例执行前后的清理,以解除用例相互依赖;断言语句生成:测试用例需要包含有效断言,才能具备发现问题的能力;问题发现能力:基于代码的用例生成,断言值一般与代码保持一致。对代码问题发现有滞后性;用例可读性多语言扩展机器生成的用例,由于用例语句组装策略相对固定,会导致生成的用例可读性低于人工手写用例;用例运行稳定性基于SBST、程序分析等技术进行用例生成时,多语言之间的工程化能力
6、差异较大,扩展难度高;AIGC浪潮下用例生成的变革用例可读性大模型生成的测试用例可读性优于传统生成工具;全语言支持大模型天然支持全语言,传统生成工具在跨语言支持时则会遇到很多技术难点。以SmartUnit为例,语句组装、运行时环境等都和语言紧密相关;以大模型为基础进行用例生成,很多已有的难点和挑战都有了新的解决方案;基于AIGC的蚂蚁新一代测试用例自动生成PART 03产品能力 需求-to-测试用例概括性需求:用Junit编写一个登录页面的自动化用例聚焦性需求:编写一个单元测试来测试一个名为hasCloseElements的方法,该方法检查输入的列表中是否有任何两个数字之间的距离小于给定的阈值
7、需求-to-测试用例,根据一句话需求来生成对应的测试用例(Java&Python)。帮助研发将测试环节前置,提高问题发现效率;简单被测代码:冒泡排序产品能力 被测代码-to-测试用例被测代码-to-测试用例,根据被测代码来生成对应的测试用例,目前支持五种语言:Java、Python、JavaScript、C+、Go;产品能力 被测代码-to-测试用例复杂被测代码:包含外部http请求产品能力 需求-测分-测试用例需求-测分-测试用例:根据需求描述生成对应的测试场景,再结合代码生成最终的测试用例,使得测试用例的校验能力与需求匹配,用于检查代码实现的逻辑错误;产品能力 测试用例补全测试用例补全:对
8、存量未包含Assert的测试用例进行补全,增强用例有效性;以开源代码仓库commons-lang中的代码为基础,设计评测集。以pass1和Assert强校验占比作为评测指标:技术大图测试用例训练样本多语言测试用例样本抽取框架,累计抽取原始样本量约800W;测试生成模型训练需求-to-测试用例被测代码-to-测试用例需求-测分-测试用例测试用例补全产品化WEB ChatIDE插件CI组件高质量样本构建探索高质量训练数据定义:测试用例与被测代码精确匹配 代码语法正确 代码编译通过 测试用例运行通过定义模型训练使用的数据质量对效果至关重要,如何定义高质量测试用例训练数据?高质量用例:代码仓库Meta
9、信息,如star数、是否fork、单测用例量级;代码仓库CI信息,最近一次CI与Coverage上报状态;代码分支与用例场景的映射;模型效果评测代码生成类任务评测集评测集评测集介绍HumanEvalHumanEval由OpenAI提出。Codex构建了一个包括164个人工手写的Python编程问题的数据集HumanEval,其中每个编程问题包括函数头、docstrings、函数体和几个 unit tests。HumanEval中的编程问题可以用来评估语言理解能力、推理能力、算法能力和简单的数学能力。HumanEval-X由于HumanEval只支持Python语言,因此智谱提出了HumanEv
10、al-X来更好地评测代码生成模型的多语言生成能力。HumanEval-X包含820个高质量手写样本,覆盖Python、C+、Java、JavaScript、Go,可用于多种任务。MBPPGoogle提出MBPP评测集(Mostly Basic Programming Problems),共包含974个Python编程任务CodeXGLUE微软发布的代码智能领域的基准数据集(CodeXGLUE),包含code-code、code-text、text-code、text-text 四个类别代码生成类任务评测指标指标名指标介绍BLEU计算生成代码和标准答案代码之间 N-gram 的匹配程度。Code
11、BLEU在BLEU之上,CodeBLEU 还要同时考虑代码的关键字信息、AST 结构化子树信息以及代码变量之间的数据流信息。CodeBLEU 的最终结果由各个子部分加权求和获得;passk每个问题生成了k个解法。如果k个解法中任一个通过了全部单元测试,则认为这个问题被解决了。passk则是全部问题被解决的比例。一般关注pass1;模型效果评测类比代码生成,使用HumanEval-X评测集进行评估,核心指标采用pass1;测试用例生成评测数据集构建prompt使用HumanEval-X中的declaration+canonical_solution,针对prompt调用模型生成测试用例类(包含多个tests、多个assert),测试用例类中的全部tests都执行通过则认为pass;模型效果使用HumanEval-X评测集对模型的测试用例生成能力进行评估(下表中为7b的评测结果,13b模型pass1模型效果更优)TestGPT-7B模型现已开源,欢迎大家围观试用:https:/ 04总结与展望开源共建 开放共建、快速迭代丰富产品场景 以研发活动中质量各个环节为切入点,持续丰富场景模型工程化能力 用例prompt自动组装 用例全生命周期管理模型能力优化 passk等核心指标提升 知识融会贯通的能力THANKS