《刘晓娟-百度单元测试智能生成实践.pdf》由会员分享,可在线阅读,更多相关《刘晓娟-百度单元测试智能生成实践.pdf(26页珍藏版)》请在三个皮匠报告上搜索。
1、百度单元测试智能生成实践刘晓娟 百度演讲嘉宾刘晓娟百度资深软件工程师2014年加入百度,负责百度研究院CI工作。2017年担任覆盖率平台技术负责人,从0开始构建了百度内部测试覆盖率度量的工具体系及平台。2018年负责了百度单测构建基础设施的建设,注重单测提效,建设了精准单测及分布式单测。2022年底着手单测智能化生成,截止目前在百度内部已支持了top研发语言的单测生成,并广泛落地在研发的日常研发工作中。目 录CONTENTS1.背景介绍2.单测生成的探索3.百度单测智能生成的具体实现4.当前效果、挑战和未来展望背景介绍:百度的单测PART 01背景介绍 单测保障代码质量代码提交代码评审单元测试
2、(60%增量覆盖率)P0 测试代码扫描构建代码合入.代码检查背景介绍 平台化建设路径全方位度量全自动执行智能用例生成全量覆盖率增量覆盖率用例结果自动配置自动用例选择分布式执行人机交互执行反馈修复【书写成本高】据调研,单测的研发时间约占总研发时长的30%50%【项目开发周期紧】来不及写单测【影响研发迭代效率】单位时间内交互的需求变少UIAPIUTUIAPIUT背景介绍 单测推广面临的问题单测生成的探索PART 02传统的单测生成 以追求代码高覆盖为目标,依托于代码解析技术+遗传变异算法,以追求代码高覆盖为目标 明显的问题:1.代码可读性差2.断言质量差3.生成性能差4.支持语言单一5.开发维护成
3、本高6.生成环境要求高百度单测智能生成的具体实现PART 03一、实现路径单测模型数据提示词单测模型数据提示词产品化落地IDE人机交互产品化落地IDE人机交互工程化落地自验证自修复工程化落地自验证自修复用AI原生思想重构单元测试的生成单测模型:模型精调整体流程GitHub测试文件被测文件测试方法被测方法用例被测样本均衡数据清洗映射数据处理模型精调文心代码模型数据挖掘让模型会写单测,写好单测单测模型:数据挖掘测试方法上下文测试方法体初始化调用属性调用方法被测方法上下文类签名构造函数签名调用属性调用方法签名被测方法体属性setter/getter包/命名空间包引用类型定义数据要完善,包含足够的上下
4、文单测模型:数据处理数据清洗单测的基本结构断言被测函数调用代码格式无效注释body体大小样本均衡代码复杂度单测框架Mock框架/业务代码语言数据质量要高,要有各框架各场景用例书写样本单测模型:模型效果评估分支覆盖运行通过无运行时错误无语法错误单测结构正确,有正确的断言生成符合题意优点 定制性:满足更多的书写风格,支持特定框架及库 生成能力:内容更丰富,mock处理更好 性能:响应更快缺点 多场景支持 用例的解释能力评估指标:单测模型 提示词遵循规则 与精调数据格式一致,提供足够的上下文 在token限制范围内自适应上文下提示词 代码解析获取被测方法相关信息 根据优先级与token限制,构造提示
5、词内容单测模型:提示词【无上下文信息】被测方法内容幻想严重生成的用例只给出被测方法信息单测模型:提示词【完善的上下文信息】被测方法生成的用例被测类及构造函数签名入参相关方法签名入参相关方法签名内容书写正确产品化:IDE人机协同模式发起用例生成提示词构造模型推理内容解析上下文解析自适应机制IDE1.指定方法2.指定行数3.指定文件基本文件结构关联关系用例review用例采纳用例写入包引入信息属性信息测试套件信息已有用例文新用例文件工程化:批量可用用例生成用例生成用例执行结果判定基于规则修复基于模型修复验证及修复自验证自修复错误修复成功继续修复是正确修复失败否Run ResultSucceedCompile errorRunning errorAssert error系统库第三方库项目自身库包引用错误当前效果、挑战和未来展望PART 04当前效果 IDE编码场景 覆盖主流研发语言 覆盖主流IDEIntellij 家族Vscode 落地全百度日常的研发工作当前效果 CR阶段用例批量生成代码提交代码评审代码合入单元测试(增量覆盖率不达标).代码检查.Diff代码用例生成修复挑战 正确性的提升,更少的幻想 Mock技术的合理应用 断言的正确性 高场景(分支)覆盖的用例生成 多用例的写入文件合并感 谢 聆 听