Repositori ini berisi kode dan data untuk makalah yang menyempurnakan kode yang dihasilkan chatgpt: mengkarakterisasi dan mengurangi masalah kualitas kode, yang diterbitkan dalam transaksi ACM pada rekayasa perangkat lunak dan metodologi (TOSEM).
Eksperimen kami fokus pada penilaian kualitas dan kebenaran kode yang dihasilkan oleh ChatGPT. Kami menyelidiki faktor-faktor yang mempengaruhi efektivitas chatgpt dan mengeksplorasi kemampuan perbaikan diri dengan berbagai jenis umpan balik. Repositori ini mencakup 2033 tugas pemrograman, skrip untuk menguji kode yang dihasilkan, dan skrip otomatis untuk mengirimkan kode ke leetcode dan mengumpulkan hasil.
.
├── 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
Direktori data berisi tiga folder utama: leetcode_tasks , chatgpt_generated_code , rq3 .
Folder leetcode_tasks berisi 2.033 tugas pemrograman dari platform leetcode (). Tugas disimpan dalam format JSON dan menyertakan informasi berikut:
Berikut deskripsi terperinci tentang bidang:
id : Pengidentifikasi unik untuk tugas (misalnya, "001").name : Nama tugas (misalnya, "dua-sum").difficulty : Tingkat kesulitan tugas, yang bisa "mudah", "medium", atau "keras".link : URL ke tugas asli pada platform LeetCode (misalnya, "https://leetcode.com/problems/two-sum/").task_description : Deskripsi lengkap tugas, termasuk pernyataan masalah, format input, kendala, dan contoh.test_cases : Satu set kasus uji dengan input dan output yang diharapkan yang dapat digunakan untuk memverifikasi kebenaran kode yang dihasilkan.python_template : Templat kode Python untuk tugas tersebut, berisi tanda tangan kelas dan metode.java_template : Templat kode Java untuk tugas tersebut, berisi tanda tangan kelas dan metode. Folder chatgpt_generated_code terdiri dari dua file JSON: python.json dan java.json . Setiap file berisi cuplikan kode yang dihasilkan oleh ChatGPT di masing -masing bahasa pemrograman untuk tugas pemrograman di folder leetcode_tasks . Juga hasil analisis statis dan deteksi kesalahan runtime termasuk dalam file JSON.
Berikut deskripsi terperinci tentang bidang:
name : Nama tugas.is_pass : Indikator biner (1 atau 0) mewakili apakah solusi lulus kasus uji.test_cases : Deskripsi input dan output yang diharapkan untuk setiap test case.error : String yang menggambarkan jenis kesalahan.error_info : Informasi tambahan mengenai kesalahan runtime.is_quality_issue : Indikator biner (1 atau 0) mewakili apakah solusi memiliki masalah kualitas.quality_info : Deskripsi masalah kualitas yang dihasilkan oleh alat analisis statis, jika ada.generated_code : Cuplikan kode yang dihasilkan oleh chatgpt untuk tugas tersebut. Folder rq3 berisi hasil percobaan RQ3. Folder rq3 terdiri dari dua subfolder: simple_feedback dan feedback_with_static_analysis_runtime . Setiap subfolder berisi hasil percobaan menggunakan umpan balik sederhana dan analisis statis, masing -masing. Hasilnya disimpan dalam format JSON.
Direktori src berisi dua tiga folder: evaluation , debugging , leetcode_auto_submit .
chatgpt_code_generation.py adalah skrip utama untuk menghasilkan kode menggunakan chatgpt.
Subdirektori evaluasi berisi skrip untuk mengevaluasi kualitas kode yang dihasilkan. Untuk proses menilai kualitas kode yang dihasilkan, kami menggunakan alat analisis statis untuk mendeteksi masalah kualitas dalam kode yang dihasilkan. Harap baca file README.md di direktori src/evaluation untuk informasi lebih lanjut.
Subdirektori debugging mencakup skrip untuk mengeksplorasi kemampuan chatgpt sendiri. Script sederhana_feedback.py mengimplementasikan eksperimen menggunakan umpan balik sederhana, sedangkan skrip static_analysis_feedback.py menggabungkan alat analisis statis dan kesalahan runtime untuk memberikan umpan balik yang lebih rinci ke chatgpt.
Folder leetcode_auto_submit berisi skrip untuk secara otomatis mengirimkan kode yang dihasilkan ke platform leetCode. Script menggunakan selenium untuk mengotomatiskan proses masuk ke platform leetcode dan mengirimkan kode.
Parameter
Nama pengguna: (Jenis: String) - Alamat email yang digunakan untuk masuk ke layanan chatgpt.
Kata sandi: (Ketik: String) - Kata sandi yang terkait dengan alamat email untuk layanan chatgpt. Jaga ini aman.
Skip_login: (Jenis: Boolean) - Jika diatur ke true, klien akan mencoba menggunakan sesi yang disimpan untuk login, menghindari kebutuhan untuk kredensial. Berguna untuk lari berulang.
Headless: (Jenis: Boolean) - Menentukan apakah browser berjalan dalam mode tanpa kepala (tidak ada GUI). Diatur ke false untuk melihat UI browser.
Incognito: (Jenis: Boolean) - Jika benar, browser diluncurkan dalam mode penyamaran, memastikan tidak ada cookie atau sejarah dari sesi sebelumnya digunakan.
user_data_dir: (type: string) - Path ke direktori di mana data pengguna (seperti cookie dan sesi login) disimpan, memungkinkan untuk kegigihan sesi di antara berjalan.
LOGIN_TYPE (Opsional): (Jenis: String) - Menentukan jenis login yang akan digunakan (normal, secara manual). Menentukan bagaimana proses login otomatis ditangani.
Anda dapat menggunakan kode berikut untuk mengirimkan kode ke LeetCode dan mengumpulkan hasilnya.
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 )Script evaluasi memerlukan dependensi berikut:
python==3.8.5
openai==0.10.2
selenium==4.9.1
undetected_chromedriver=3.5.4
Jika Anda menemukan repo ini atau survei kami bermanfaat, silakan pertimbangkan mengutip kami:
@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}
}
Repositori ini dilisensikan di bawah lisensi MIT.