Este repositorio contiene el código y los datos para el código generado por el Paper Refining Generated: caracterizar y mitigar los problemas de calidad del código, publicados en Transacciones ACM sobre Ingeniería y Metodología de Software (TOSEM).
Nuestros experimentos se centran en evaluar la calidad y la corrección del código generado por ChatGPT. Investigamos los factores que influyen en la efectividad de ChatGPT y exploran sus capacidades de auto reparto con diferentes tipos de retroalimentación. Este repositorio incluye 2033 tareas de programación, scripts para probar el código generado y los scripts automatizados para enviar el código a LeetCode y recopilar resultados.
.
├── 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
El directorio data contiene tres carpetas principales: leetcode_tasks , chatgpt_generated_code , rq3 .
La carpeta leetcode_tasks contiene las 2,033 tareas de programación de la plataforma Leetcode (). Las tareas se almacenan en formato JSON e incluyen la siguiente información:
Aquí hay una descripción detallada de los campos:
id : un identificador único para la tarea (por ejemplo, "001").name : El nombre de la tarea (por ejemplo, "Dos suma").difficulty : el nivel de dificultad de la tarea, que puede ser "fácil", "mediano" o "duro".link : la URL a la tarea original en la plataforma Leetcode (por ejemplo, "https://leetcode.com/problems/two-sum/").task_description : la descripción completa de la tarea, incluidas las declaraciones de problemas, el formato de entrada, las restricciones y los ejemplos.test_cases : un conjunto de casos de prueba con entrada y salida esperada que se puede usar para verificar la corrección del código generado.python_template : una plantilla de código de Python para la tarea, que contiene la firma de clase y método.java_template : una plantilla de código Java para la tarea, que contiene la firma de clase y método. La carpeta chatgpt_generated_code consta de dos archivos json: python.json y java.json . Cada archivo contiene los fragmentos de código generados por ChatGPT en los lenguajes de programación respectivos para las tareas de programación en la carpeta leetcode_tasks . También los resultados del análisis estático y la detección de errores de ejecución se incluyen en los archivos JSON.
Aquí hay una descripción detallada de los campos:
name : El nombre de la tarea.is_pass : un indicador binario (1 o 0) que representa si la solución pasó los casos de prueba.test_cases : una descripción de la entrada y la salida esperada para cada caso de prueba.error : una cadena que describe el tipo de error.error_info : información adicional sobre errores de tiempo de ejecución.is_quality_issue : un indicador binario (1 o 0) que representa si la solución tiene problemas de calidad.quality_info : una descripción de los problemas de calidad generados por las herramientas de análisis estático, si las hay.generated_code : el fragmento de código generado por chatgpt para la tarea. La carpeta rq3 contiene los resultados de los experimentos RQ3. La carpeta rq3 consta de dos subcarpetas: simple_feedback y feedback_with_static_analysis_runtime . Cada subcarpeta contiene los resultados de los experimentos utilizando retroalimentación simple y retroalimentación de análisis estático, respectivamente. Los resultados se almacenan en formato JSON.
El directorio src contiene dos tres carpetas: evaluation , debugging , leetcode_auto_submit .
chatgpt_code_generation.py es el script principal para generar código usando chatgpt.
El subdirectorio de evaluación contiene scripts para evaluar la calidad del código generado. Para el proceso de evaluación de la calidad del código generado, utilizamos herramientas de análisis estático para detectar problemas de calidad en el código generado. Lea el archivo README.md en el directorio src/evaluation para obtener más información.
El subdirectorio de depuración incluye scripts para explorar las capacidades de autodeviramiento de ChatGPT. El script sencillo_feedback.py implementa experimentos utilizando retroalimentación simple, mientras que el script static_analysis_feedback.py incorpora herramientas de análisis estáticos y errores de tiempo de ejecución para proporcionar comentarios más detallados a ChatGPT.
La carpeta leetcode_auto_submit contiene un script para enviar automáticamente el código generado a la plataforma Leetcode. El script utiliza Selenium para automatizar el proceso de iniciar sesión en la plataforma LeetCode y enviar el código.
Parámetros
Nombre de usuario: (tipo: cadena): la dirección de correo electrónico utilizada para iniciar sesión en el servicio CHATGPT.
Contraseña: (tipo: cadena): la contraseña asociada con la dirección de correo electrónico para el servicio CHATGPT. Mantenga esto seguro.
Skip_login: (tipo: boolean): si se establece en verdadero, el cliente intentará usar una sesión guardada para iniciar sesión, evitando la necesidad de credenciales. Útil para carreras repetidas.
Sin cabeza: (tipo: booleano) - determina si el navegador se ejecuta en modo sin cabeza (sin GUI). Establecer en falso para ver la interfaz de usuario del navegador.
Incógnito: (Tipo: booleano): si es cierto, el navegador se lanza en modo de incógnito, asegurando que no se usen cookies o historial de sesiones anteriores.
user_data_dir: (tipo: cadena) - ruta al directorio donde se almacenan los datos del usuario (como cookies y sesiones de inicio de sesión), lo que permite la persistencia de la sesión entre las ejecuciones.
Login_type (opcional): (tipo: string): especifica el tipo de inicio de sesión que se utilizará (normal, manualmente). Determina cómo se maneja el proceso de inicio de sesión automatizado.
Puede usar el siguiente código para enviar el código a LeetCode y recopilar los resultados.
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 )Los scripts de evaluación requieren las siguientes dependencias:
python==3.8.5
openai==0.10.2
selenium==4.9.1
undetected_chromedriver=3.5.4
Si encuentra útil este repositorio o nuestra encuesta, considere citarnos:
@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}
}
Este repositorio tiene licencia bajo la licencia MIT.