《A2--李志群--单元测试用例有效性提升实践.pdf》由会员分享,可在线阅读,更多相关《A2--李志群--单元测试用例有效性提升实践.pdf(42页珍藏版)》请在三个皮匠报告上搜索。
1、单元测试用例有效性提升实践李志群字节跳动 资深测试开发工程师目录C O N T E N T S1.1.单测用例有效性实践背景单测用例有效性实践背景2.2.增量场景的单测用例有效性提升增量场景的单测用例有效性提升3.3.存量场景的单测用例有效性提升存量场景的单测用例有效性提升4.4.总结总结&展望展望实践背景01为什么要提升 用例的有效性?“这么多的CASE,花费大量的时间和资源去执行,真的能发现缺陷吗?”“用例集的CI行覆盖率已经做到90%,甚至更高,能发现缺陷吗?”“怎么找出哪些仅仅为了覆盖率而覆盖,却发现不了缺陷的用例?”实践背景实践背景*以上例子,均非真实代码*提升思路关键增量场景管控防
2、劣化,存量场景低质用例提升以指标度量为抓手,引导研发关注用例有效性,最终提升业务整体单测质量 增量场景用例有效性提升02通过往源代码中注入“变异”,如果现有的用例集无法检测出注入的变异,则说明当前用例集的覆盖场景可能是不完备的。缺陷注入原理*理论来源:变异测试(Mutation Testing)*缺陷注入 的变异类型算子类型业务线上、线下缺陷模式转化业务无关的、通用型的 缺陷注入方案用例有效性另一个评价维度是:用例在执行对应异常场景代码时能不能准确报出错误?关键关键:是否在用例中做了全面且有效的断言静态检测与用例有效性静态检测方案有效性 检测结果项目项目UT总数总数注入数注入数未发现未发现漏检
3、率漏检率项目项目A A53138314738%项目项目B B66727813347%项目项目C C7363039230%项目项目D D8954455011%项目项目E E103887238143%有效性校验类型有效性校验类型注入数注入数未发现未发现边界值变化4826条件分支修复2815循环结构破坏92函数变换3810用例有效性=1 未发现的注入数/注入数有效性 检测结果注入缺陷漏检率低的项目D,包含更多一般、完全断言类型的用例15920018490364267400405267519805074358104251773180510100200300400500600项目A项目B项目C项目D项目
4、E用例断言层级数量分布用例断言层级数量分布无断言简单断言一般断言完全断言有效性 检测结果业务仓库在CI接入有效性工具过滤掉无效断言的用例后,一些“虚高”的覆盖率被降低了有效性 检测结果通过增量场景治理,业务A的9个仓库单测用例有效性均有明显提高。根据有效性检测工具暴露出来的问题,有针对性的改进单测用例。用例有效性从原来的31.77分(低于平均分9.73分)提升到目前61.99分(高于平均分20.49分)。缺陷注入的挑战对一个1000行以内的代码文件,工具可以注入103-104级别数量的缺陷(变异),甚至更多,是否存在大量无效的缺陷,如何识别它们?如何减少无效缺陷的注入,以降低研发对结果的消费成
5、本?缺陷注入的挑战存量场景用例有效性提升031.核心模块单测用例数少,大量函数无用例覆盖,模块变更、重构的风险左移预知能力差,人力补充用例成本高LLM(Large Language Model)+流量+模版-用例生成2.用例低质(低覆盖率、低断言完备度)问题较为严重,执行维护成本高,缺陷召回能力差LLM(Large Language Model)+路径分析+断言生成-用例提升存量场景的痛点一次执行流程:1.给定文件路径/目录路径及可选参数,解析输入参数及完成校验,调用命令行工具执行。2.针对给定的文件/目录,筛选待生成的目标函数(剔除如 NewXX,init 等方法)。3.根据生成的目标函数,
6、完成以下信息准备:目标函数 data-pair 的获取(数据流,入参出参数据对,中间过程函数相关数据)目标函数源代码及上下文依赖目标函数的测试用例模版4.根据第 3 步提供的信息,生成测试用例(下述方式为两种生成路径均可,对比生成优劣):利用 LLM 进行生成直接通过 data-pair 和 测试template 生成5.根据第 4 步生成的测试用例,进行静态分析、编译检查、执行检查,并对其中的错误,进行单用例的 refine(工程手段及 LLM 手段)。6.根据执行结果,分析覆盖率和断言,进行单用例的 refine。7.最后输出生成用例的结果报告及文件