Этот репозиторий содержит код и данные для переработки кода, сгенерированного CHATGPT, характеристики и смягчения проблем качества кода, опубликованные в транзакциях ACM по разработке программного обеспечения и методологии (TOSEM).
Наши эксперименты сосредоточены на оценке качества и правильности кода, сгенерированного CHATGPT. Мы исследуем факторы, которые влияют на эффективность CHATGPT, и исследуем его возможности самообслуживания с различными типами обратной связи. Этот репозиторий включает в себя задачи программирования 2033, сценарии для тестирования сгенерированного кода и автоматические сценарии для отправки кода в LeetCode и сбора результатов.
.
├── 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
Каталог data содержит три основных папки: leetcode_tasks , chatgpt_generated_code , rq3 .
Папка leetcode_tasks содержит 2 033 задачи программирования с платформы LeetCode (). Задачи хранятся в формате JSON и включают следующую информацию:
Вот подробное описание полей:
id : уникальный идентификатор для задачи (например, «001»).name : Имя задачи (например, «Двухмельница»).difficulty : уровень сложности задачи, который может быть «легким», «средним» или «жестким».link : URL-адрес исходной задачи на платформе LeetCode (например, "https://leetcode.com/problems/two-sum/").task_description : полное описание задачи, включая операторы проблем, формат ввода, ограничения и примеры.test_cases : набор тестовых случаев с входным и ожидаемым выводом, который можно использовать для проверки правильности сгенерированного кода.python_template : шаблон кода Python для задачи, содержащий подпись класса и метода.java_template : шаблон кода Java для задачи, содержащий подпись класса и метода. Папка chatgpt_generated_code состоит из двух файлов JSON: python.json и java.json . Каждый файл содержит фрагменты кода, сгенерированные CHATGPT в соответствующих языках программирования для задач программирования в папке leetcode_tasks . Также в файлах JSON включены результаты статического анализа и обнаружения ошибок среды выполнения.
Вот подробное описание полей:
name : имя задачи.is_pass : двоичный индикатор (1 или 0), представляющий, передало ли решение тестовые случаи.test_cases : описание ввода и ожидаемого вывода для каждого тестового примера.error : строка, описывающая тип ошибки.error_info : Дополнительная информация о ошибках времени выполнения.is_quality_issue : двоичный индикатор (1 или 0), представляющий, имеет ли решение проблемы качества.quality_info : описание проблем качества, полученных с помощью статических инструментов анализа, если таковые имеются.generated_code : фрагмент кода, сгенерированный CHATGPT для задачи. Папка rq3 содержит результаты экспериментов RQ3. Папка rq3 состоит из двух подпапок: simple_feedback и feedback_with_static_analysis_runtime . Каждая подпапалка содержит результаты экспериментов с использованием простой обратной связи и статического анализа, соответственно. Результаты хранятся в формате JSON.
Каталог src содержит две три папки: evaluation , debugging , leetcode_auto_submit .
chatgpt_code_generation.py - это основной сценарий для генерации кода с использованием CHATGPT.
Подкатария оценки содержит сценарии для оценки качества сгенерированного кода. Для процесса оценки качества сгенерированного кода мы используем инструменты статического анализа для выявления проблем качества в сгенерированном коде. Пожалуйста, прочитайте файл README.md в каталоге src/evaluation для получения дополнительной информации.
Подкаталогация отладки включает в себя сценарии для изучения возможностей самоотрагивания CHATGPT. Скрипт Simple_feedback.py реализует эксперименты с использованием простой обратной связи, в то время как скрипт static_analysis_feedback.py включает в себя инструменты статического анализа и ошибки времени выполнения, чтобы обеспечить более подробную обратную связь с Chatgpt.
Папка leetcode_auto_submit содержит сценарий для автоматического отправки сгенерированного кода на платформу LeetCode. Сценарий использует Selenium для автоматизации процесса входа на платформу LeetCode и отправки кода.
Параметры
Имя пользователя: (Тип: строка) - адрес электронной почты, используемый для входа в службу CHATGPT.
Пароль: (Тип: строка) - пароль, связанный с адресом электронной почты для службы CHATGPT. Держите это в безопасности.
skip_login: (type: boolean) - Если установлено true, клиент попытается использовать сохраненный сеанс для входа в систему, избегая необходимости в учетных данных. Полезно для повторных пробежек.
Без головы: (тип: логический) - определяет, работает ли браузер в режиме без головы (без графического интерфейса). Установите false, чтобы увидеть интерфейс браузера.
Incognito: (Тип: Boolean) - Если True, браузер запускается в режиме инкогнито, обеспечивая использование файлов cookie или истории из предыдущих сессий.
user_data_dir: (type: string) - Путь к каталогу, где хранятся пользовательские данные (например, файлы cookie и вход), что позволяет обеспечить постоянство сеанса между проходами.
login_type (необязательно): (type: string) - указывает тип использования входа в систему (нормально, вручную). Определяет, как обрабатывается автоматический процесс входа в систему.
Вы можете использовать следующий код для отправки кода в LeetCode и собрать результаты.
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 )Сценарии оценки требуют следующих зависимостей:
python==3.8.5
openai==0.10.2
selenium==4.9.1
undetected_chromedriver=3.5.4
Если вы обнаружите, что этот репо или наш опрос полезны, пожалуйста, рассмотрите возможность сослаться на нас:
@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}
}
Этот репозиторий лицензирован по лицензии MIT.