Ce référentiel contient le code et les données du code de raffinage de papier de raffinage de l'article: caractérisation et atténuation des problèmes de qualité du code, publiés dans ACM Transactions on Software Engineering and Methodology (Tosem).
Nos expériences se concentrent sur l'évaluation de la qualité et de l'exactitude du code généré par Chatgpt. Nous étudions les facteurs qui influencent l'efficacité de Chatgpt et explorons ses capacités d'auto-réparation avec différents types de commentaires. Ce référentiel comprend des tâches de programmation 2033, des scripts pour tester le code généré et des scripts automatisés pour soumettre le code à Leetcode et collecter les résultats.
.
├── 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
Le répertoire data contient trois dossiers principaux: leetcode_tasks , chatgpt_generated_code , rq3 .
Le dossier leetcode_tasks contient les tâches de programmation 2 033 de la plate-forme LEETCODE (). Les tâches sont stockées au format JSON et incluent les informations suivantes:
Voici une description détaillée des champs:
id : un identifiant unique pour la tâche (par exemple, "001").name : le nom de la tâche (par exemple, "Two-Sum").difficulty : le niveau de difficulté de la tâche, qui peut être "facile", "moyen" ou "dur".link : l'URL vers la tâche d'origine sur la plate-forme Leetcode (par exemple, "https://leetcode.com/problems/two-sum/").task_description : la description complète de la tâche, y compris les instructions de problème, le format d'entrée, les contraintes et les exemples.test_cases : un ensemble de cas de test avec entrée et sortie attendue qui peuvent être utilisés pour vérifier l'exactitude du code généré.python_template : un modèle de code python pour la tâche, contenant la signature de classe et de méthode.java_template : un modèle de code java pour la tâche, contenant la signature de classe et de méthode. Le dossier chatgpt_generated_code se compose de deux fichiers JSON: python.json et java.json . Chaque fichier contient les extraits de code générés par Chatgpt dans les langages de programmation respectifs pour les tâches de programmation dans le dossier leetcode_tasks . Les résultats de l'analyse statique et de la détection des erreurs d'exécution sont également inclus dans les fichiers JSON.
Voici une description détaillée des champs:
name : le nom de la tâche.is_pass : Un indicateur binaire (1 ou 0) représentant si la solution a passé les cas de test.test_cases : une description de l'entrée et de la sortie attendue pour chaque cas de test.error : une chaîne décrivant le type d'erreur.error_info : informations supplémentaires concernant les erreurs d'exécution.is_quality_issue : un indicateur binaire (1 ou 0) représentant si la solution a des problèmes de qualité.quality_info : une description des problèmes de qualité générés par les outils d'analyse statique, le cas échéant.generated_code : l'extrait de code généré par Chatgpt pour la tâche. Le dossier rq3 contient les résultats des expériences RQ3. Le dossier rq3 se compose de deux sous-dossiers: simple_feedback et feedback_with_static_analysis_runtime . Chaque sous-dossier contient les résultats des expériences en utilisant une rétroaction simple et une rétroaction d'analyse statique, respectivement. Les résultats sont stockés au format JSON.
Le répertoire src contient deux trois dossiers: evaluation , debugging , leetcode_auto_submit .
chatgpt_code_generation.py est le script principal pour générer du code à l'aide de chatppt.
Le sous-répertoire d'évaluation contient des scripts pour évaluer la qualité du code généré. Pour le processus d'évaluation de la qualité du code généré, nous utilisons des outils d'analyse statique pour détecter les problèmes de qualité dans le code généré. Veuillez lire le fichier README.md dans le répertoire src/evaluation pour plus d'informations.
Le sous-répertoire de débogage comprend des scripts pour explorer les capacités d'auto-renbugage de Chatgpt. Le script simple_feedback.py implémente des expériences en utilisant un rétroaction simple, tandis que le script static_analysis_feedback.py intègre des outils d'analyse statique et des erreurs d'exécution pour fournir des commentaires plus détaillés à Chatgpt.
Le dossier leetcode_auto_submit contient un script pour soumettre automatiquement le code généré sur la plate-forme LeetCode. Le script utilise le sélénium pour automatiser le processus de connexion dans la plate-forme Leetcode et la soumission du code.
Paramètres
Nom d'utilisateur: (Type: String) - L'adresse e-mail utilisée pour se connecter au service Chatgpt.
Mot de passe: (Type: String) - Le mot de passe associé à l'adresse e-mail du service ChatGPT. Gardez cela en sécurité.
skip_login: (type: booléen) - Si défini sur true, le client tentera d'utiliser une session enregistrée pour la connexion, en évitant la nécessité des informations d'identification. Utile pour les courses répétées.
Sans tête: (Type: Boolean) - Détermine si le navigateur fonctionne en mode sans tête (pas d'interface graphique). Réglé sur false pour voir l'interface utilisateur du navigateur.
Incognito: (Type: Boolean) - Si vrai, le navigateur se lance en mode incognito, en veillant à ce que aucun cookies ou historique des séances précédentes ne soit utilisés.
user_data_dir: (type: chaîne) - Chemin vers le répertoire où les données utilisateur (comme les cookies et les sessions de connexion) sont stockées, permettant une persistance de session entre les exécutions.
Login_type (facultatif): (type: chaîne) - spécifie le type de connexion à utiliser (normal, manuellement). Détermine comment le processus de connexion automatisé est géré.
Vous pouvez utiliser le code suivant pour soumettre le code à Leetcode et collecter les résultats.
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 )Les scripts d'évaluation nécessitent les dépendances suivantes:
python==3.8.5
openai==0.10.2
selenium==4.9.1
undetected_chromedriver=3.5.4
Si vous trouvez ce dépôt ou notre enquête utile, veuillez envisager de nous citer:
@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}
}
Ce référentiel est concédé sous licence MIT.