Dieses Repository enthält den Code und die Daten für den von Papier verfeinerten ChatGPT-generierten Code: Charakterisierung und Minderung von Codequalitätsproblemen, die in ACM-Transaktionen zu Software-Engineering und -Methodik (TOSEM) veröffentlicht wurden.
Unsere Experimente konzentrieren sich auf die Bewertung der Qualität und Korrektheit des von ChatGPT generierten Code. Wir untersuchen die Faktoren, die die Effektivität von ChatGPT beeinflussen, und untersuchen ihre Selbstverträglichkeitspfähler mit unterschiedlichen Feedback-Arten. Dieses Repository enthält 2033 Programmieraufgaben, Skripte zum Testen des generierten Codes und automatisierte Skripte, um den Code an Leetcode zu senden und Ergebnisse zu sammeln.
.
├── 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
Das data enthält drei Hauptordner: leetcode_tasks , chatgpt_generated_code , rq3 .
Der Ordner leetcode_tasks enthält die 2.033 Programmieraufgaben aus der Leetcode -Plattform (). Die Aufgaben werden im JSON -Format gespeichert und enthalten die folgenden Informationen:
Hier ist eine detaillierte Beschreibung der Felder:
id : Eine eindeutige Kennung für die Aufgabe (z. B. "001").name : Der Name der Aufgabe (z. B. "Zwei-Summen").difficulty : Der Schwierigkeitsgrad der Aufgabe, der "einfach", "mittel" oder "hart" sein kann.link : Die URL zur ursprünglichen Aufgabe auf der Leetcode-Plattform (z. B. "https://leetcode.com/problems/two-sum/").task_description : Die vollständige Beschreibung der Aufgabe, einschließlich Problemanweisungen, Eingabeformat, Einschränkungen und Beispielen.test_cases : Ein Satz von Testfällen mit Eingang und erwartete Ausgabe, mit der die Richtigkeit des generierten Codes überprüfen kann.python_template : Eine Python -Code -Vorlage für die Aufgabe, die die Klasse und die Methodensignatur enthält.java_template : Eine Java -Code -Vorlage für die Aufgabe, die die Signatur der Klasse und der Methode enthält. Der Ordner chatgpt_generated_code besteht aus zwei JSON -Dateien: python.json und java.json . Jede Datei enthält die von ChatGPT in den jeweiligen Programmiersprachen generierten Code -Snippets für die Programmieraufgaben im Ordner leetcode_tasks . Auch die Ergebnisse der statischen Analyse und der Erkennung von Laufzeitfehlern sind in den JSON -Dateien enthalten.
Hier ist eine detaillierte Beschreibung der Felder:
name : Der Name der Aufgabe.is_pass : Ein binärer Indikator (1 oder 0), der darstellt, ob die Lösung die Testfälle übergeben hat.test_cases : Eine Beschreibung des Eingangs und der erwarteten Ausgabe für jeden Testfall.error : Eine Zeichenfolge, die den Fehlertyp beschreibt.error_info : Zusätzliche Informationen zu Laufzeitfehlern.is_quality_issue : Ein binärer Indikator (1 oder 0), der darstellt, ob die Lösung Qualitätsprobleme aufweist.quality_info : Eine Beschreibung der Qualitätsprobleme, die durch statische Analyse -Tools erzeugt werden, falls vorhanden.generated_code : Der von ChatGPT für die Aufgabe generierte Code -Snippet. Der rq3 -Ordner enthält die Ergebnisse der RQ3 -Experimente. Der rq3 -Ordner besteht aus zwei Unterordnern: simple_feedback und feedback_with_static_analysis_runtime . Jeder Unterordner enthält die Ergebnisse der Experimente mit einfachem Feedback bzw. statischen Analyse -Feedback. Die Ergebnisse werden im JSON -Format gespeichert.
Das src -Verzeichnis enthält zwei drei Ordner: evaluation , debugging , leetcode_auto_submit .
chatgpt_code_generation.py ist das Hauptskript zum Generieren von Code mit ChatGPT.
Das Evaluierungs -Unterverzeichnis enthält Skripte zur Bewertung der Qualität des generierten Code. Für den Prozess der Bewertung der Qualität des generierten Code verwenden wir statische Analyse -Tools, um Qualitätsprobleme im generierten Code zu erkennen. Bitte lesen Sie die Datei README.md im src/evaluation Evaluierungsverzeichnis, um weitere Informationen zu erhalten.
Das Debugging-Unterverzeichnis enthält Skripte zur Erforschung der Selbstentwicklungsfunktionen von Chatgpt. Das Skript von Simple_feedback.py implementiert Experimente mit einfachem Feedback, während das Skript static_analysis_feedback.py statische Analyse -Tools und Laufzeitfehler enthält, um ein detaillierteres Feedback für ChatGPT zu geben.
Der Ordner leetcode_auto_submit enthält ein Skript zum automatischen Übermitteln des generierten Codes an die Leetcode -Plattform. Das Skript verwendet Selen, um den Prozess der Anmeldung an der Leetcode -Plattform zu automatisieren und den Code einzureichen.
Parameter
Benutzername: (Typ: String) - Die E -Mail -Adresse zum Anmelden im ChatGPT -Dienst.
Passwort: (Typ: String) - Das Kennwort, das der E -Mail -Adresse für den ChatGPT -Dienst zugeordnet ist. Halten Sie das sicher.
Skip_login: (Typ: Boolean) - Wenn der Client auf TRUE eingestellt ist, versucht der Client, eine gespeicherte Sitzung für die Anmeldung zu verwenden, um die Notwendigkeit von Anmeldeinformationen zu vermeiden. Nützlich für wiederholte Läufe.
Kopflos: (Typ: boolean) - bestimmt, ob der Browser im Kopflosenmodus (keine GUI) ausgeführt wird. Setzen Sie auf False, um die Browser -Benutzeroberfläche zu sehen.
Incognito: (Typ: Boolean) - Wenn wahr, startet der Browser im Inkognito -Modus und stellt sicher, dass keine Cookies oder Geschichte aus früheren Sitzungen verwendet werden.
user_data_dir: (Typ: String) - Pfad zum Verzeichnis, in dem Benutzerdaten (wie Cookies und Anmeldeseinheiten) gespeichert werden, sodass die Sitzungsdauer zwischen den Läufen.
login_type (optional): (type: string) - Gibt den zu verwendenden Anmeldetyp an (normal, manuell). Bestimmt, wie der automatisierte Anmeldungsprozess behandelt wird.
Sie können den folgenden Code verwenden, um den Code an Leetcode zu senden und die Ergebnisse zu sammeln.
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 )Die Bewertungsskripte erfordern die folgenden Abhängigkeiten:
python==3.8.5
openai==0.10.2
selenium==4.9.1
undetected_chromedriver=3.5.4
Wenn Sie dieses Repo oder unsere Umfrage hilfreich finden, sollten Sie uns angeben:
@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}
}
Dieses Repository ist unter der MIT -Lizenz lizenziert.