前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >大模型生成单测用例的评估方案

大模型生成单测用例的评估方案

作者头像
Antony
发布于 2024-04-22 09:45:29
发布于 2024-04-22 09:45:29
1.2K0
举报

大模型生成单元测试是目前比较常见的研发侧落地的应用场景之一。为了对大模型以及单测生成方案进行评估,因此梳理了一个评估方案,供业内同仁参考。

此处所谓的单测生成是指基于既有的代码,让大模型来自动生成单元测试。生成成功的标志是:

1) 可以生成单元测试用例

2) 该用例可以被编译、执行通过

3) 被测方法被调用

4) 有断言

评估框架

类别

具体项

代码场景

对各种代码场景的覆盖

过程

用例的通过率和正确率%

结果

断言丰富度和数量

Mock丰富度

覆盖率(行覆盖/分支覆盖)%

1. 人工评判

用例体验

代码可读性

经济性

成本(非私有化部署需要考虑)

生成耗时

代码场景

基于我们现有的方案,经过测试ChatGPT3.5以及GLM4这两个大模型,发现17个通用场景大概能通关12-14个,以及SpringBoot项目中的前4个场景。可以说基本能满足了。因此目前已经将单测生成的插件在内部进行试点使用。当然,由于内部部署的模型规模要小很多,生成效果会进一步打折。

通用场景:

·基础代码场景 (10行以内的一个方法,无任何外部代码调用)

·基本if-else逻辑

·方法间调用-本类其它方法(public)

·方法间调用-本类其它方法(非public)

·方法间调用-非本类的方法

·静态方法调用- 项目自定义Utils

·静态方法调用-SDK类,如定时器

·静态方法调用-枚举类

·接口/实现的调用

·抽象类/实体类的继承

·异常(受检异常、非受检异常、try-catch-finally)

·文件I/O操作

·反射代码

·泛型

·lambda

·圈复杂度高

·方法体超长

Springboot项目场景

·Mybatis数据库交互-查询后插入(upsert操作)

·Mybatis数据库交互-插入数据库后return Id(期待使用 Mockito对数据库自增Id进行模拟)

·Mybatis数据库交互-从第三方获取Id,随后插入数据库中,返回值代表成功失败(期待使用 Mockito Capture验证中间过程值而不是只验证返回值)

·@Autowired引入Service,调用Service中方法

·applicationContext.getBean注入bean,调用bean中的方法,期待使用MockStatic进行mock

单元测试用例筛选(Selection)

单测用例如果能自动生成,用例编写的成本就会极大降低,转而会对用例的维护带来压力。因此,有必要考虑单测用例筛选的问题。目前这部分工作还没有启动,以下是一些思路。

筛选条件

方案

1

缺陷对应的测试用例优先保留

测试用例的方法上带有 @Bug 或者 @OnlineBug 的注解

2

接口覆盖率100%,应保留接口自动化覆盖的用例

每个接口至少要保留一个单接口的集成测试用例

3

最少用例实现最大覆盖率(行覆盖、分支覆盖、判定?jacoco貌似没有)

剔除没有新增覆盖率的用例。案例:某个用例执行之后,整个用例集的覆盖率并没有新增。(可能受用例执行顺序的影响,每次筛选的结果会不一样)

4

用例集的执行耗时最小

在3的基础上,如果有多个用例可选,则选择耗时最短的(要考虑 setup/teardown)

方案局限性

就代码生成单测,属于后补用例的一种,只是将后补用例的成本极大降低了而已,但是并没有完全解决Test Oracle的问题,也就是说用例虽然生成了,但也可能是假阴性( False Positive)的。

希望大家注意。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-04-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 软件测试那些事 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
TestMe自动生成单元测试用例
最近有个公众号发了一篇《阿里内部如何做单元测试培训的》的文章,在文章的最后提到了TestMe这个自动生成单元测试用例的工具TestMe。
Antony
2023/03/23
4.4K0
TestMe自动生成单元测试用例
2018-08-05 没有测试用例的代码,根本不应该跑在服务器上
在实际测试中,一个单元可以小到一个方法,也可以大到包含多个类。从定义上讲,单元测试和集成测试是有严格的区分的,但是在实际开发中它们可能并没有那么严格的界限。如果专门追求单元测试必须测试最小的单元,反而容易造成多余的测试并且不易维护。换句更严谨一点的说法,我们要考虑测试的场景再去选择不同粒度的测试。
Albert陈凯
2018/08/15
1.4K0
2018-08-05 没有测试用例的代码,根本不应该跑在服务器上
【测试左移专栏】用 Powermock 和 Mockito 来做安卓单元测试
作者:刘洋 团队公众号:腾讯移动品质中心TMQ 一、单元测试及Android单元测试简介 惯例,先简单介绍下理论知识,懂得的可以跳过。 1、单元测试定义和特性 单测定义: 在计算机编程中,单元测试(U
腾讯移动品质中心TMQ
2017/06/01
4.6K0
开发必会的测试知识,Junit+Mock+Assert+DevOps
我之前写过一篇 devops 开发相关的文章 一文理解什么是 devops,可以看到测试在整个开发流程中扮演者什么样的角色。
阿甘的码路
2022/09/22
1.1K0
开发必会的测试知识,Junit+Mock+Assert+DevOps
代码不规范,调试两行泪(单元测试篇)
《Java 开发手册》是阿里巴巴集团技术团队的集体智慧结晶和经验总结吧,出发点是是码出高效,码出质量。
千羽
2021/01/14
1.1K0
学习单元测试,你必须要懂得的基础理论
1.定义 1.1 单元测试是编写测试代码,用来检测特定的、明确的、细颗粒的功能 1.2 单元测试并不一定保证程序功能正确性,更不保证整体业务正确性 2.编写目的 2.1 为了达到 尽早发现问题 和 尽量小的影响范围 以及 暴露错误 2.2 提升代码质量,督促开发人员写出更加易于测试和维护的代码 2.3 减少维护成本保证功能实现的长期稳定 2.4 降低重构难度 2.5 提升代码信心 2.6 提升bug修复速度 2.7 减少集成测试和回归测试成本 2.8 通过单元测试快速熟悉代码,提升开发团队内部的协作效率
cwl_java
2019/10/26
9570
合格的后端Coder都应该写好UT和Mock测试
作者 | S.L 来源 | http://r6d.cn/aaTem 关于测试 1 测试都包括哪些 广义的测试包括 UT、IT、压力测试、硬件测试等等,这里重点讨论 Unit Test 即单元测试。 2 啥是 UT 单元测试(又称为模块测试, Unit Testing)是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。程序单元是应用的最小可测试部件。在过程化编程中,一个单元就是单个程序、函数、过程等;对于面向对象编程,最小单元就是方法,包括基类(超类)、抽象类、或者派生类(子类)中的方法。 简
程序猿DD
2023/04/04
7740
合格的后端Coder都应该写好UT和Mock测试
Spock单元测试框架以及在美团优选的实践
Spock是国外一款优秀的测试框架,基于BDD(行为驱动开发)思想实现,功能非常强大。Spock结合Groovy动态语言的特点,提供了各种标签,并采用简单、通用、结构化的描述语言,让编写测试代码更加简洁、高效。目前,美团优选物流绝大部分后端服务已经采用了Spock作为测试框架,在开发效率、可读性和维护性方面均取得了不错的收益。
测试开发社区
2021/08/23
3.4K0
Spock单元测试框架以及在美团优选的实践
基于LLM的单元测试生成,你在第几级?
选定一个被测方法(focal method),将方法体的源码传给大模型,要求生成单元测试用例。这是不少所谓的可以赋能开发单测的大模型的方案。在某些厂商的demo中,求解一个Hello级别的用例生成还是OK的,一旦换到实际项目,就只能呵呵了。
Antony
2024/12/10
5030
基于LLM的单元测试生成,你在第几级?
手把手教你实战TDD
Tech 导读 本文将对测试驱动开发(TDD)进行探讨,主要阐述了TDD基本概念理解、TDD常见误区、TDD技术选型等,并提供了贫血模型三层架构和DDD下的TDD实战案例。
京东技术
2023/08/22
4780
手把手教你实战TDD
编写你的第一个 Android 单元测试
  本文主要面向单元测试新手,首先简单介绍了什么是单元测试,为什么要写单元测试,讨论了一下 Android 项目中哪些代码适合做单元测试,并以一个简单例子演示了如何编写属于你的第一个 Android 单元测试(kotlin 代码)。
顾翔
2019/12/12
1.8K0
编写你的第一个 Android 单元测试
实践Jenkins集成Cobertura自动化构建SpringBoot工程
文章摘要:追求代码质量一直都是优秀程序员对自己的目标,那么有什么好方法能够实现这个目标?
用户2991389
2018/09/05
3.4K1
实践Jenkins集成Cobertura自动化构建SpringBoot工程
研效优化实践:聊聊单元测试那些事儿
作者:ciuwaalu,腾讯安全平台部后台开发 研发效能提升是一个系统化的庞大工程,它涵盖了软件交付的整个生命周期,涉及到产品、架构、开发、测试、运维等各个环节。而单元测试作为软件中最小可测试单元的检查验证环节,可以说是这个庞大工程中最细致但又不可忽视的一个细节因素。本文内容梳理自安全平台部测试效能提升的经验实践,从零开始介绍探讨单测的方法论和优化思路,期望为大家带来参考,欢迎共同交流。 什么是单元测试? 在最开始,我们先看看大家认为的单元测试是什么: 在计算机编程中,单元测试是一种软件测试方法,通
腾讯技术工程官方号
2021/07/26
1.1K0
如何使用Python进行单元测试
在我的日常工作中,我是一名专业程序员。我使用c++、c#和Javascript。我是一个开发团队的一员,他们使用单元测试来验证我们的代码是否按照它应该的方式工作。
HuangWeiAI
2021/04/21
3.1K0
如何使用Python进行单元测试
2025第一篇-精准测试等基建的十五种变现场景
以精准测试等为代表的质量保障的基础设施建设,常常面临一个尴尬的局面:开发者们精通底层技术,却往往不擅长实际应用场景的推广落地。这种状况容易导致技术优势无法转化为实际效益,空有一身武艺,以为《胜券在握》,却最后落得两手空空的窘境。囧囧。面对企业领导者对于“降低成本、提高质量、增加效率”这一看似是“不可能三角”的要求,本文将探讨如何以综合利用接口变更清单、代码静态分析、调用链分析、Git差异分析、流量录制回放等技术,实现质量保障的数字化,进而在DevOps的各个环节实现技术变现,提高软件质量和测试效率。以下是笔者梳理的15个应用场景。请注意,本文主要讨论应用场景,不展开讲述背后的技术。
Antony
2025/01/02
1500
2025第一篇-精准测试等基建的十五种变现场景
如何才能避免漏测事故的发生?
在我们进行测试时候,会遇到漏测的事情发生,不管你是“初出茅庐”,还是从业多年的“老司机”,在测试的时候都会遇到过这样的事情,那么出现漏测的原因都是有哪些,如何才有有效的避免它再次发生,是我们需要考虑的问题?
漫谈测试
2025/03/19
1520
如何才能避免漏测事故的发生?
Java 项目自动生成单元测试插件推荐
很多公司对分支单测覆盖率会有一定的要求,比如 单测覆盖率要达到 60% 或者 80%才可以发布。
明明如月学长
2021/12/05
12.6K0
Java 项目自动生成单元测试插件推荐
测试技术|白盒测试以及代码覆盖率实践
白盒测试也称逻辑驱动测试,是针对被测单元内部是如何进行工作的测试。它根据程序的控制结构设计测试用例,主要用于软件程序验证,属于基于代码的测试技术。与之相对应的黑盒测试是从用户角度对软件进行测试。
互联网金融打杂
2022/08/01
1.9K0
测试技术|白盒测试以及代码覆盖率实践
聊一聊接口测试如何评估代码覆盖率
代码覆盖率通常指的是在测试过程中,代码被执行到的比例。常见的覆盖率指标包括行覆盖率、分支覆盖率、函数覆盖率等。接口测试主要是针对应用程序的接口进行测试,比如API,确保它们按预期工作。那么,如何将代码覆盖率应用到接口测试中呢?
漫谈测试
2025/05/19
1430
聊一聊接口测试如何评估代码覆盖率
小样邂逅单元测试后的反思
文章主要讲述了如何在项目中开展单元测试,包括代码规范、单元测试框架、测试覆盖率、代码维护、单元测试的效率、测试用例设计、单元测试报告等。通过这些内容,旨在让读者了解单元测试的重要性,并学会如何正确开展单元测试。
腾讯移动品质中心TMQ
2017/07/10
3.2K1
小样邂逅单元测试后的反思
推荐阅读
相关推荐
TestMe自动生成单元测试用例
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档