相信很多人试过用 ChatGPT 帮助自己完成各种各样的编程任务,并且已经取得了不错的效果。但是,直接使用 ChatGPT 存在一些问题:一是生成的代码很多时候不能正常执行,“编程五分钟,调试两小时”;二是不方便跟现有工程进行集成,需要手动与 ChatGPT 进行交互,并且在不同页面间切换。为了解决这些问题,我们提出了“生成-验证-修复”框架,并实现了原型系统,同时为了方便大家使用,我们开发了一些插件,能够方便的集成到已有开发流程中。
已完成 Maven 插件开发( https://github.com/ZJU-ACES-ISE/chatunitest-maven-plugin ),最新版 1.1.0 已发布到 Maven 中心仓库,欢迎试用和反馈。IDEA 插件正在开发中,欢迎持续关注。
联系人:智晨
主要开发人员:陈膺浩、吴孜璇、谢卓魁
浙江大学 ACES 实验室
原理:
针对待测方法,首先收集一些待测方法中必要的上下文信息,让 ChatGPT 进行初始生成,然后验证 ChatGPT 生成的测试用例是否正确,如果不正确,则根据编译器的报错信息进行修复,其中,对于一些常见的简单错误,使用预定义规则进行修复,对于其余错误,则让 ChatGPT 修复测试用例,如此循环迭代,直至测试用例正确执行,或者达到最大迭代次数。
使用:
[ol]
将以下依赖项添加到pom.xml文件中
io.github.ZJU-ACES-ISE
chatunitest-starter
1.0.0
pom
在项目的pom.xml文件内加入 chatunitest-maven-plugin 的插件配置,并按照您的需求添加参数:
io.github.ZJU-ACES-ISE
chatunitest-maven-plugin
1.1.0
gpt-3.5-turbo
5
5
500
0.5
1
0
0
${proxy}
下面是每个配置选项的详细说明:
一般情况下,您只需要提供 OPENAI 的 API 密钥。
通过运行 mvn compile 或 mvn install 命令下载所需的依赖。
使用以下命令运行插件:
1 ) 为目标方法生成单元测试:
mvn chatunitest:method -DselectMethod=className#methodName
2 ) 为目标类生成单元测试:
mvn chatunitest:class -DselectClass=className
当执行 mvn chatunitest:method 或 mvn chatunitest:class 命令时,您必须指定 selectMethod 和 selectClass,可以使用 -D 选项来实现这一点。在 pom 文件中配置的所有参数都可以使用 -D 选项在命令行指定。
3 ) 为整个项目生成单元测试:(警告:对于大型项目来说,可能会消耗大量的 token ,导致相当大的费用。
mvn chatunitest:project
4 ) 清理生成的测试代码:
mvn chatunitest:clean
运行该命令将删除所有生成的测试代码并恢复您的测试目录。
5 ) 手动运行测试:
mvn chatunitest:copy
运行该命令将复制所有生成的测试代码到您的测试文件夹,同时备份您的测试目录。
mvn chatunitest:restore
运行该命令将恢复您的测试目录。
[/ol]
原理图之前的链接失效了