该存储库包含论文的代码和数据,以精炼Chatgpt生成的代码:表征和缓解代码质量问题,发表在ACM软件工程和方法论(TOSEM)中。
我们的实验着重于评估Chatgpt生成的代码的质量和正确性。我们研究了影响Chatgpt有效性并探索其自我修复功能的因素,并使用不同类型的反馈。该存储库包括2033个编程任务,测试生成的代码的脚本以及自动脚本以将代码提交给leetcode并收集结果。
.
├── data
│ ├── chatgpt_generated_code
│ ├── leetcode_tasks
│ ├── rq3
│ ├── results (the folder to store the results of the experiments)
├── src
│ ├── evaluation
│ ├── debugging
│ ├── leetcode_auto_submit
├── README.md
data目录包含三个主要文件夹: leetcode_tasks , chatgpt_generated_code , rq3 。
leetcode_tasks文件夹包含来自LeetCode Platform()的2,033个编程任务。任务以JSON格式存储,并包括以下信息:
这是对字段的详细描述:
id :任务的唯一标识符(例如“ 001”)。name :任务的名称(例如,“二-SUM”)。difficulty :任务的难度级别,可以是“简单”,“中等”或“硬”。link :LeetCode平台上原始任务的URL(例如,“ https://leetcode.com/problems/problems/two-sum/”)。task_description :任务的完整描述,包括问题语句,输入格式,约束和示例。test_cases :一组具有输入和预期输出的测试用例,可用于验证生成代码的正确性。python_template :用于任务的Python代码模板,其中包含类和方法签名。java_template :任务的Java代码模板,包含类和方法签名。 chatgpt_generated_code文件夹由两个JSON文件组成: python.json和java.json 。每个文件包含ChatGpt生成的代码片段,以leetcode_tasks文件夹中的编程任务相应的编程语言中。 JSON文件中还包括静态分析和运行时错误检测的结果。
这是对字段的详细描述:
name :任务的名称。is_pass :二进制指标(1或0)表示解决方案是否通过了测试用例。test_cases :每个测试用例的输入和预期输出的描述。error :描述错误类型的字符串。error_info :有关运行时错误的其他信息。is_quality_issue :一个二进制指标(1或0),表示解决方案是否有质量问题。quality_info :静态分析工具(如果有)产生的质量问题的描述。generated_code :chatgpt生成的代码段用于任务。 rq3文件夹包含RQ3实验的结果。 rq3文件夹由两个子文件夹组成: simple_feedback和feedback_with_static_analysis_runtime 。每个子文件夹分别使用简单的反馈和静态分析反馈包含实验的结果。结果以JSON格式存储。
src目录包含两个三个文件夹: evaluation , debugging , leetcode_auto_submit 。
chatgpt_code_generation.py是使用chatgpt生成代码的主要脚本。
评估子目录包含用于评估生成代码质量的脚本。对于评估生成代码质量的过程,我们使用静态分析工具来检测生成的代码中的质量问题。请阅读src/evaluation目录中的README.md文件以获取更多信息。
调试子目录包括用于探索Chatgpt自我欺骗功能的脚本。 simple_feedback.py脚本使用简单反馈实现实验,而static_analsisy_feedback.py脚本包含静态分析工具和运行时错误,以向chatgpt提供更详细的反馈。
leetcode_auto_submit文件夹包含一个脚本,用于自动将生成的代码提交给LeetCode平台。该脚本使用Selenium来自动登录到LeetCode平台并提交代码的过程。
参数
用户名:(类型:字符串) - 用于登录chatgpt服务的电子邮件地址。
密码:(类型:字符串) - 与ChatGpt服务的电子邮件地址关联的密码。保持这一安全。
SKIP_LOGIN :(类型:布尔值) - 如果设置为true,则客户将尝试使用保存的会话进行登录,从而避免需要凭据。对重复运行有用。
无头:(类型:布尔值) - 确定浏览器是否以无头模式运行(无GUI)。设置为false以查看浏览器UI。
隐身:(类型:布尔值) - 如果为true,则浏览器以隐身模式启动,确保不使用以前的会话中的cookie或历史记录。
USER_DATA_DIR :(类型:String) - 存储用户数据(例如Cookie和Login sessions)的目录的路径,可以在运行之间进行会话持久性。
login_type(可选):(类型:字符串) - 指定要使用的登录类型(正常,手动)。确定如何处理自动登录过程。
您可以使用以下代码将代码提交列表并收集结果。
from leetcode_auto_submit import AutoLeetCode
import time
autoleet = AutoLeetCode (
headless = False ,
username = "your_username" ,
password = "your_password" ,
verbose = False ,
incognito = False ,
skip_login = False ,
user_data_dir = "data/profile/" ,
login_type = 'manully'
)
time . sleep ( 2 )
chatgpt_generated_code = "xxxxxxxxxxxx"
task_name = "Two Sum"
language = "Python3"
# if only run code and collect
result_status , result_details = autoleet . run_and_collect ( task_name , language , chatgpt_generated_code )
# if submit codd and collect
result_status , result_details = autoleet . submit_and_collect ( task_name , language , chatgpt_generated_code )评估脚本需要以下依赖项:
python==3.8.5
openai==0.10.2
selenium==4.9.1
undetected_chromedriver=3.5.4
如果您发现此回购或我们的调查很有帮助,请考虑引用我们:
@article{liu2023refining,
title={Refining ChatGPT-generated code: Characterizing and mitigating code quality issues},
author={Liu, Yue and Le-Cong, Thanh and Widyasari, Ratnadira and Tantithamthavorn, Chakkrit and Li, Li and Le, Xuan-Bach D and Lo, David},
journal={arXiv preprint arXiv:2307.12596},
year={2023}
}
该存储库是根据MIT许可证获得许可的。