이 저장소에는 소프트웨어 엔지니어링 및 방법론 (TOSEM)에 대한 ACM 트랜잭션에 게시 된 코드 품질 문제 특성화 및 완화 및 완화 용지 Catgpt 생성 코드의 코드 및 데이터가 포함되어 있습니다.
우리의 실험은 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 폴더에는 leetcode 플랫폼 ()의 2,033 개의 프로그래밍 작업이 포함되어 있습니다. 작업은 JSON 형식으로 저장되며 다음 정보를 포함합니다.
다음은 필드에 대한 자세한 설명입니다.
id : 작업의 고유 식별자 (예 : "001").name : 작업의 이름 (예 : "2-sum").difficulty : "쉬운", "매체"또는 "하드"일 수있는 작업의 난이도.link : leetcode 플랫폼의 원래 작업에 대한 URL (예 : "https://leetcode.com/problems/two-sum/").task_description : 문제 문, 입력 형식, 제약 조건 및 예제를 포함한 작업에 대한 완전한 설명.test_cases : 생성 된 코드의 정확성을 확인하는 데 사용할 수있는 입력 및 예상 출력이있는 일련의 테스트 케이스 세트.python_template : 클래스 및 메소드 서명을 포함하는 작업을위한 Python 코드 템플릿.java_template : 클래스 및 메소드 서명을 포함하는 작업을위한 Java 코드 템플릿. chatgpt_generated_code 폴더는 python.json 및 java.json 의 두 JSON 파일로 구성됩니다. 각 파일에는 leetcode_tasks 폴더의 프로그래밍 작업에 대한 각 프로그래밍 언어로 ChatGpt가 생성 한 코드 스 니펫이 포함되어 있습니다. 또한 정적 분석 및 런타임 오류 감지 결과는 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 3 개의 3 개의 폴더가 있습니다.
chatgpt_code_generation.py chatgpt를 사용하여 코드를 생성하기위한 기본 스크립트입니다.
평가 하위 디렉토리에는 생성 된 코드의 품질을 평가하기위한 스크립트가 포함되어 있습니다. 생성 된 코드의 품질을 평가하는 프로세스를 위해 정적 분석 도구를 사용하여 생성 된 코드에서 품질 문제를 감지합니다. 자세한 내용은 src/evaluation 디렉토리의 README.md 파일을 읽으십시오.
디버깅 하위 디렉토리에는 chatgpt의 자체 버그 기능을 탐색하기위한 스크립트가 포함되어 있습니다. simple_feedback.py 스크립트는 간단한 피드백을 사용하여 실험을 구현하는 반면, static_analysis_feedback.py 스크립트에는 정적 분석 도구와 런타임 오류가 통합되어 ChatGpt에보다 자세한 피드백을 제공합니다.
leetcode_auto_submit 폴더에는 생성 된 코드를 Leetcode 플랫폼에 자동으로 제출하기위한 스크립트가 포함되어 있습니다. 스크립트는 셀레늄을 사용하여 Leetcode 플랫폼에 로그인하는 프로세스를 자동화하고 코드를 제출합니다.
매개 변수
사용자 이름 : (유형 : 문자열) - ChatGpt 서비스에 로그인하는 데 사용되는 이메일 주소.
비밀번호 : (유형 : 문자열) - ChatGpt 서비스의 이메일 주소와 관련된 비밀번호. 이 안전을 유지하십시오.
skip_login : (type : boolean) - true로 설정된 경우 클라이언트는 로그인을 위해 저장된 세션을 사용하여 자격 증명이 필요하지 않습니다. 반복 실행에 유용합니다.
헤드리스 : (유형 : 부울) - 브라우저가 헤드리스 모드 (GUI 없음)에서 실행되는지 여부를 결정합니다. 브라우저 UI를보기 위해 False로 설정하십시오.
Incognito : (유형 : 부울) - 사실이라면 브라우저는 시크릿 모드로 시작하여 이전 세션에서 쿠키 나 기록이 사용되지 않도록합니다.
user_data_dir : (type : string) - 사용자 데이터 (쿠키 및 로그인 세션과 같은)가 저장된 디렉토리로의 경로로 실행 사이의 세션 지속성이 허용됩니다.
login_type (선택 사항) : (유형 : 문자열) - 사용할 로그인 유형을 지정합니다 (수동, 수동). 자동화 된 로그인 프로세스가 처리되는 방법을 결정합니다.
다음 코드를 사용하여 코드를 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 라이센스에 따라 라이센스가 부여됩니다.