ChatTester:ChatGPT的单元测试生成能力评估与改进

点击蓝字 关注我们

人工编写高质量的单元测试用例费时费力。复旦大学CodeWisdom团队近期对ChatGPT的单元测试能力进行全面评估,并进一步提出基于ChatGPT的高质量单元测试生成框架ChatTester。更多细节参照论文Arxiv Preprint版本(https://arxiv.org/pdf/2305.04207.pdf),点击末尾“阅读原文”可跳转。

46a42c6d198791be6033ee9f2c869574.png

01

能力评估:“ChatGPT可以

代替开发者来写单元测试用例吗?”

为了解答这个问题,我们对ChatGPT写出的1000个Junit单元测试用例在正确性、充分性、可读性等多个维度进行了全面评估。我们用图1中所示的提示模版让ChatGPT为给定的被测代码片段生成单元测试(注:本文关注GPT-3.5-turbo 模型)。

6482a26baa8eea42f22b8e0f34d317d2.png

图1:提示示例

1.1  正确性评估

正确性:ChatGPT生成测试正确性仍然不足,仅有24.8%可顺利执行,58.9%和17.3%面临编译错误和运行错误。其中常见的编译错误包括符号解析错误、类型错误和访问错误等。而大多数执行错误是由于ChatGPT生成的错误断言语句导致的。

23af1b75980dd0ddb9900ee2092c3a0d.png

表1: ChatGPT、AthenaTest(基于深度学习的测试生成方法)、EvoSuite(基于搜索的测试生成方法)所生成测试的语法/编译/执行通过率

· 整体正确性。由表1所示, ChatGPT生成测试在正确率上并不理想,只有42.1%用例可通过编译,24.8%的用例可正确执行。但相比之前的基于学习的测试生成方法(AthenaTest),ChatGPT所生成测试用例的语法、编译和执行正确性更高。

· 常见编译错误。表2列举了ChatGPT生成测试用例中常见的编译错误类型分布。其中,最常见的编译错误为符号解析失败(如使用未定义的方法和变量等);另一个大类编译错误与类型相关(如函数调用中的参数类型与方法声明中的不一致);此外,ChatGPT所生成的错误测试代码会访问私有变量或方法、或对抽象类进行无效实例化。

0a30854deba6190be6a868e547c801a7.png

表2 常见编译错误分类

· 常见执行错误。表3列举了测试用例执行错误的类型和频率,大多数执行失败(85.5%)是由于ChatGPT生成了错误的测试断言所造成。

940b0eb0139e79902fc65f844a2d82a3.png

表3 常见执行错误分类

1.2  测试充分性评估

测试充分性:ChatGPT 生成测试的覆盖率与人工编写的测试相接近,并高于现有的测试生成技术。

表4展示了各生成用例的语句覆盖率和分支覆盖率。ChatGPT生成的测试用例实现了最高的测试覆盖率,并十分接近人工编写的水准。

ccc21a5dcb5d8775b2a6bf3162fc4470.png

表4 生成测试的覆盖率

1.3  测试可读性评估

可读性:ChatGPT 生成的测试具有良好的可读性,与人工编写的测试相比具有相近的可读性水平。

如图 2所示,其中X轴表示每个参与者(即从 A 到 E),Y轴表示不同得分比例的堆积条形图。总体而言,大多数 ChatGPT 生成的测试都被评为具有良好的可读性,并与人工编写的测试相近。

6f5095c7eea4f4221dbf72d1d3f52fba.png

图2 测试的可读性评估

02

能力提升:基于ChatGPT的高质量

单元测试生成框架 ChatTester

受上述研究结果的启发,我们进一步提出了ChatTester,一个基于ChatGPT的高质量单元测试生成框架。ChatTester通过引入初始测试生成器(initial test generator)和迭代测试优化器(iterative test refiner)进一步提升ChatGPT生成单元测试用例的质量。

2.1 ChatTester方法简介

· 初始测试生成器(initial test generator) 将测试生成的任务分解成了两个子任务:首先通过intention prompt让 ChatGPT理解被测代码的意图;然后通过generation prompt,令ChatGPT基于被测代码的意图为其生成单元测试。与basic prompt相比,初始测试生成器通过意图推断这一中间步骤帮助ChatGPT生成质量更高的测试断言。例如 ,图3对比了basic prompt和初始测试生成器如何为被测函数“setCharAt()”生成测试的例子。如图3(a)所示,给定没有任何意图推断的basic prompt,ChatGPT生成了包含错误断言的测试(即“assertEquals(Hello-World, strBuilder.toString())”)。在图3(b)中,通过intention prompt,ChatGPT首先正确生成了被测函数“setCharAt()”的意图描述;然后通过generation prompt,ChatGPT生成了带有正确断言的测试(即“assertEquals(Hello Jorld, strBuilder.toString())”)。

0fdcc0b9c40ca5a3715ae2f9bed40b6e.png

图3 basic prompt v.s. 初始测试生成器中的提示

· 迭代测试优化器(iterative test refiner) 通过迭代的方式修复初始测试生成器所生成测试中的编译错误。每次迭代都会依次执行两个步骤:(i)首先通过在验证环境中编译生成的测试来验证测试的正确性;(ii)其次根据编译过程中的错误消息和与编译错误相关的额外代码上下文构建提示。将构建好的提示输入到ChatGPT当中,以获得更加完善的测试。该修复过程不断重复直到生成的测试能够成功编译或达到最大迭代次数。图4展示了一个迭代测试优化器如何在两次迭代中修复了测试用例中的编译错误的例子。

44c6750bb43361aa6123ebb849d91854.png

图4 迭代测试优化器的提示示例

2.2  ChatTester效果评估

1f3211384ab492468e7a9b32c3c6f633.png

表5 ChatTester的有效性评估

如表5所示,与ChatGPT相比,ChatTester生成测试的编译率和执行通过率有了大幅提升。其中,ChatTester-是ChatTester移除迭代提升器的对照组方法。因此,ChatTester 、ChatTESTER-、ChatGPT三者之间的差距,也同时说明了ChatTester中迭代细化器和初始测试生成器这两个部分的有效性。

03

结尾

整体来说,基于大规模语言模型(如ChatGPT)的单元测试生成是一个具有潜力的方向。开发者不再需要手写单元测试的场景在不远的未来也许并不是梦。如何更好地将外部工具(编译、执行、分析信息)与大模型在测试生成场景下结合、如何构建更好的提示输入、以及如何将大模型在测试生成领域中微调,都会是未来进一步提升大模型测试生成能力的重要研究方向。

复旦大学 CodeWisdom团队

作者| 袁志强 娄一翎 刘名威 彭鑫

排版| 孙婕

审核娄一翎 彭鑫

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/15117.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CentOS 7系统安装图形桌面+JDK+Mysql+IDEA+Firefox+中文输入法

安装图形桌面 参考文章:https://cloud.tencent.com/developer/article/2071185?from15425&areaSource102001.1&traceIdsCDmh4ZJuJ0liZI4fR5q5 下载图形界面 首先安装x window system yum groupinstall “X Window System” 查看图形界面软件名称是否对应…

网络疯传华为面试题:800公斤牛,过承重700公斤的桥,有答案了?

前不久,华为一道面试题流传于网络:一头牛重800千克,一座桥承重700千克,牛怎么过桥? *图:源自网络,如侵删 面对这种看似无聊却又考验思维能力和底层逻辑的面试题,你会怎么回答&…

Radiology第14期:ChatGPT提供乳腺癌预防和筛查建议

本期文献一共5篇,简要汇总如下: P1: Appropriateness of Breast Cancer Prevention and Screening Recommendations Provided by ChatGPT >>>> 概要 ChatGPT 对于常见的乳腺癌预防和筛查问题的回答是否合适。研究人员对 ChatGPT 的回答进行…

[计算机图形学]MVP变换(前瞻预习/复习回顾)

一、前言 本文章将着重讲解图形学中的MVP矩阵变换,更注重当前阶段的理解,而不是纵观全局,如果想纵观全局,网上有很多资料,也可以等我更新,不过在这里,我不会给大家一个宏观的概念,也…

ChatGPT在物流与运输行业的智能场景:智能调度和自动驾驶的前瞻应用

第一章:引言 随着人工智能技术的飞速发展,物流与运输行业正迎来一场革命。传统的调度和运输模式已经无法满足快速增长的物流需求和客户期望。在这一领域,ChatGPT作为一种先进的自然语言处理模型,具有巨大的潜力。本文将探讨ChatG…

AI开始抢饭碗了!美国500家企业用ChatGPT取代员工,节省5000万美元...

作者| Mr.K 编辑| Emma 来源| 技术领导力(ID:jishulingdaoli) 自从ChatGPT掀起热潮,不少人担心AI会抢人类饭碗。 然而,现实可能更残酷。 根据,国外就业服务平台Resume Builder调查统计,在1000多家受访美国企业中&…

提一个小bug,如果编辑文章时输入 {{ }},发布后就会显示为 {undefined{ }};

提一个小bug,如果编辑文章时输入 {{ }},发布后就会显示为 {undefined{ }1111 如果编辑文章时输入 如果编辑文章时输入 111 Betaflight BN880 GPS测试 第三电 【建议收藏】一个插件白嫖ChatGPT! 如果编辑文章时输入 如果编辑文章时输入 …

Midjourney笔记

Tips:登录midjourney的官网(Midjourney),在左上角的【Home】界面内,会显示往期所渲染的作品,可用于内容回溯。 关键词的语法顺序 主题:人、动物、人物、地点、物体等。媒介:照片、绘画、插图、…

PHP第6周函数上机练习:实战输出2022年日历(含直播视频)

直播回放 PHP第6周函数上机题(实战输出2022年日历) 题目答案 PHP动态网站开发-函数 一、单选 1、下列关键字中,用于函数返回的是(D )。 A、 continue B、 break C、 exit D、 return 2、若在函数内访问函数…

最近热聊的代码解释器,是个啥?

大家好,我是Yuan,今天给大家介绍ChatGPT最新发布的代码解释器(Code Interpreter)。 近日,OpenAI 在 Twitter 上宣布,所有 ChatGPT Plus 用户都将可以使用:代码解释器(Code Interpreter)。官网地址:https:/…

姗姗来迟的ChatGPT

让聊天变得更有趣 在这个信息爆炸的时代,人们越来越需要一种简单、快捷、有趣的交流方式。ChatGPT应运而生,它是一款基于人工智能技术的聊天机器人,可以与用户进行自然语言交互,提供各种有趣的聊天内容。 ChatGPT的核心技术是GPT&…

OpenAI ChatGPT余额查询又不行了?2023-7-21

前言 之前一篇文章,用于介绍如何免登录在线查询ChatGPT余额,今天开始朋友们反馈用最新的方式也不行了。坑了。。。 免登录在线查询OpenAI ChatGPT API key余额,https://blog.csdn.net/lonliecom/article/details/130564423 一、官方增加了限…

2023 ChatGPT 3.5+4.0 + DALL-E源码 附卡密充值安装教程

在这个全方位的ChatGPT 3.54.0 DALL-E版本源码及视频搭建教程中,您将掌握构建一个功能丰富的Web应用所需的一切。不仅可以实现ChatGPT 3.54.0和DALL-E的强大功能,还能支持代码编写、短文创作、电影剧本和卡密管理,还有用户列表、消息记录、支…

chatgpt赋能python:Python多种用途之一:充值

Python多种用途之一:充值 Python作为一种多用途的编程语言,被广泛地应用在了各个领域中,包括互联网的充值领域。Python充值系统可以极大地提高充值效率,同时也可以保证充值的安全性。在这篇文章里,我们将介绍Python充…

ChatGPT只讲这25个笑话!实验上千次有90%重复,网友:幽默是人类最后的尊严

梦晨 发自 凹非寺量子位 | 公众号 QbitAI 如果你试过让ChatGPT随便讲个笑话(英语),那你大概率见过这个: 两位德国学者对GPT3.5做了个大型测试,发现它其实只会讲25个笑话。 1008次结果中有90%都是25个笑话的变体&#x…

用AI修复郭德纲远古相声;小红书爆款文案Prompt模板;用AI经营一家三明治店;AI将实现80%编程 | ShowMeAI日报

👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 🤖 B站UP主使用AI修复郭德纲远古相声,10天播放近70万 B站UP主 野老相声-风景-4K修复 使用了AI换脸技术,对郭德纲、…

做Walmart有什么工具可以事半功倍呢?

1.Easyya 易芽选品(免费付费) 官网:EasyYa易芽选品-跨境电商亚马逊选品_市场流量分析运营辅助工具 软件:有Web端插件小程序 功能介绍: 竞品分析 快速确定对标的商品、Listing、品牌以及卖家。 新品开发 通过市场…

AI卷入618战场;印象AI开放次数限制;2023 AIGC人才趋势洞察报告;员工瞒着老板悄悄用AI;超好用的AI头像生成教程 | ShowMeAI日报

👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 🤖 澳洲游戏媒体 Gamurs 招聘AI编辑,被各路媒体口诛笔伐 上周,澳洲知名游戏媒体集团 Gamurs 在官网招聘「AI Edit…

【企业架构设计实战】4 应用架构设计

前言 企业IT架构包括应用架构、数据架构和技术架构,企业IT架构与业务架构共同构成了企业架构的核心内容。接下来重点介绍IT架构中的应用架构。 应用架构是对企业所有应用系统、服务及它们之间交互关系的整体描述,反映应用系统如何支撑业务运行及未来业务发展,同时需要体现应…

打工人又被 AI “误伤”!印度 CEO:“我裁了 90% 的技术支持团队,都外包给了 AI”...

省时查报告-专业、及时、全面的行研报告库 省时查方案-专业、及时、全面的营销策划方案库 【免费下载】2023年6月份全网热门报告合集 全国最全大模型盘点(附列表) 千模大战:百家争鸣OR一地鸡毛? 2023年7月6日国务院经济形势专家座…