Este repositório contém o código e os dados para o artigo refinando o código gerado por ChatGPT: caracterizando e atenuando os problemas de qualidade do código, publicados no ACM Transactions on Software Engineering and Metodology (TOSEM).
Nossos experimentos se concentram na avaliação da qualidade e correção do código gerado pelo ChatGPT. Investigamos os fatores que influenciam a eficácia do ChatGPT e exploramos seus recursos de auto-reparo com diferentes tipos de feedback. Este repositório inclui 2033 tarefas de programação, scripts para testar o código gerado e scripts automatizados para enviar o código para LeetCode e coletar 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
O diretório data contém três pastas principais: leetcode_tasks , chatgpt_generated_code , rq3 .
A pasta leetcode_tasks contém as 2.033 tarefas de programação da plataforma LeetCode (). As tarefas são armazenadas no formato JSON e incluem as seguintes informações:
Aqui está uma descrição detalhada dos campos:
id : um identificador exclusivo para a tarefa (por exemplo, "001").name : o nome da tarefa (por exemplo, "duas soma").difficulty : o nível de dificuldade da tarefa, que pode ser "fácil", "médio" ou "duro".link : o URL para a tarefa original na plataforma LeetCode (por exemplo, "https://leetcode.com/problems/two-sum/").task_description : A descrição completa da tarefa, incluindo instruções de problemas, formato de entrada, restrições e exemplos.test_cases : Um conjunto de casos de teste com entrada e saída esperada que podem ser usados para verificar a correção do código gerado.python_template : um modelo de código Python para a tarefa, contendo a assinatura da classe e do método.java_template : um modelo de código Java para a tarefa, contendo a assinatura da classe e do método. A pasta chatgpt_generated_code consiste em dois arquivos json: python.json e java.json . Cada arquivo contém os trechos de código gerados pelo ChatGPT nas respectivas linguagens de programação para as tarefas de programação na pasta leetcode_tasks . Além disso, os resultados da análise estática e da detecção de erros de tempo de execução estão incluídos nos arquivos JSON.
Aqui está uma descrição detalhada dos campos:
name : o nome da tarefa.is_pass : Um indicador binário (1 ou 0) representando se a solução passou nos casos de teste.test_cases : Uma descrição da entrada e saída esperada para cada caso de teste.error : uma string descrevendo o tipo de erro.error_info : Informações adicionais sobre erros de tempo de execução.is_quality_issue : um indicador binário (1 ou 0) representando se a solução tem problemas de qualidade.quality_info : uma descrição dos problemas de qualidade gerados pelas ferramentas de análise estática, se houver.generated_code : o snippet de código gerado pelo chatgpt para a tarefa. A pasta rq3 contém os resultados das experiências RQ3. A pasta rq3 consiste em duas subpastas: simple_feedback e feedback_with_static_analysis_runtime . Cada subpasta contém os resultados dos experimentos usando feedback simples e feedback da análise estática, respectivamente. Os resultados são armazenados no formato JSON.
O diretório src contém duas três pastas: evaluation , debugging , leetcode_auto_submit .
chatgpt_code_generation.py é o script principal para gerar código usando o chatgpt.
O subdiretório de avaliação contém scripts para avaliar a qualidade do código gerado. Para o processo de avaliação da qualidade do código gerado, usamos ferramentas de análise estática para detectar problemas de qualidade no código gerado. Leia o arquivo README.md no diretório src/evaluation para obter mais informações.
O subdiretório de depuração inclui scripts para explorar os recursos de auto-redução do ChatGPT. O script simples_feedback.py implementa experimentos usando feedback simples, enquanto o script static_analysis_feedback.py incorpora ferramentas de análise estática e erros de tempo de execução para fornecer feedback mais detalhado ao ChatGPT.
A pasta leetcode_auto_submit contém um script para enviar automaticamente o código gerado para a plataforma LeetCode. O script usa o selênio para automatizar o processo de login na plataforma LeetCode e enviar o código.
Parâmetros
Nome de usuário: (Tipo: String) - O endereço de email usado para fazer login no serviço ChatGPT.
Senha: (TIPO: String) - A senha associada ao endereço de email para o serviço ChatGPT. Mantenha isso seguro.
skip_login: (Tipo: booleano) - Se definido como true, o cliente tentará usar uma sessão salva para login, evitando a necessidade de credenciais. Útil para corridas repetidas.
Sem cabeça: (Tipo: booleano) - determina se o navegador é executado no modo sem cabeça (sem GUI). Defina como false para ver a interface do usuário do navegador.
Incognito: (Tipo: booleano) - Se verdadeiro, o navegador é lançado no modo incógnito, garantindo que não sejam usados cookies ou histórico de sessões anteriores.
user_data_dir: (tipo: string) - caminho para o diretório em que os dados do usuário (como cookies e sessões de login) são armazenados, permitindo a persistência da sessão entre as execuções.
Login_type (Opcional): (Tipo: String) - Especifica o tipo de login a ser usado (normal, manualmente). Determina como o processo de login automatizado é tratado.
Você pode usar o código a seguir para enviar o código ao LeetCode e coletar os 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 )Os scripts de avaliação requerem as seguintes dependências:
python==3.8.5
openai==0.10.2
selenium==4.9.1
undetected_chromedriver=3.5.4
Se você achar útil este repositório ou nossa pesquisa, considere nos citar:
@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 repositório é licenciado sob a licença do MIT.