該存儲庫包含論文的代碼和數據,以精煉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許可證獲得許可的。