[논문 리뷰] GitHub Copilot: the perfect Code compLeeter?
이 논문은 자동화된 프레임워크를 사용하여 4개의 프로그래밍 언어(JAVA, C++, Python3, Rust)에서 1,760개의 LeetCode 문제에 대해 GitHub Copilot의 코드 생성 품질을 평가한다. Copilot은 자바와 C++에서 가장 신뢰할 수 있으며, 평균 인간의 제출물보다 더 효율적인 코드를 생성하지만, 파이썬3와 루스트에서는 정확성과 일관성에서 어려움을 겪으며, 상위 랭크 제안도 항상 최상의 결과를 내지는 않는다.
This paper aims to evaluate GitHub Copilot's generated code quality based on the LeetCode problem set using a custom automated framework. We evaluate the results of Copilot for 4 programming languages: Java, C++, Python3 and Rust. We aim to evaluate Copilot's reliability in the code generation stage, the correctness of the generated code and its dependency on the programming language, problem's difficulty level and problem's topic. In addition to that, we evaluate code's time and memory efficiency and compare it to the average human results. In total, we generate solutions for 1760 problems for each programming language and evaluate all the Copilot's suggestions for each problem, resulting in over 50000 submissions to LeetCode spread over a 2-month period. We found that Copilot successfully solved most of the problems. However, Copilot was rather more successful in generating code in Java and C++ than in Python3 and Rust. Moreover, in case of Python3 Copilot proved to be rather unreliable in the code generation phase. We also discovered that Copilot's top-ranked suggestions are not always the best. In addition, we analysed how the topic of the problem impacts the correctness rate. Finally, based on statistics information from LeetCode, we can conclude that Copilot generates more efficient code than an average human.
연구 동기 및 목표
- 프로그래밍 문제의 코드 생성에 있어 GitHub Copilot의 신뢰성, 정확성, 효율성을 체계적으로 평가하기 위해.
- 프로그래밍 언어, 문제 난이도, 주제, 제안 순위에 따라 코드 품질이 어떻게 달라지는지 조사하기 위해.
- 시간 및 메모리 효율성 측면에서 Copilot가 생성한 코드의 성능을 평균 인간 제출물과 비교하기 위해.
- 프롬프트 컨텍스트와 잠재적 리시테이션(학습 데이터 반복)이 Copilot 출력에 어떤 영향을 미치는지 평가하기 위해.
- LeetCode를 시험용으로 사용하여 AI 생성 코드 평가를 위한 재현 가능한 자동화 기준을 제공하기 위해.
제안 방법
- 모든 공개 가능하고 단일 함수로 구성된 LeetCode 문제에 대해, 네 가지 언어에서 Copilot의 제안을 자동으로 생성하고 테스트하는 프레임워크를 구축하였다.
- 각 문제에 대해 Copilot을 여러 차례 쿼리하여 모든 제안된 해결책을 수집하고, 이를 LeetCode의 자동 테스트 스크립트에 제출하였다.
- 정확성은 LeetCode의 테스트 결과를 기반으로 판단하였으며, 효율성은 LeetCode에서 제공하는 런타임 및 메모리 소비 메트릭을 사용하여 측정하였다.
- 통계 분석을 통해 Copilot의 성능을 프로그래밍 언어, 문제 난이도 수준(easy/medium/hard), 문제 주제별로 비교하였다.
- 리시테이션 탐지는 Copilot 출력에 LeetCode 링크가 포함되어 있는지 검색하여 학습 데이터에서 유출된 가능성을 확인하는 데 사용되었다.
- 결과는 각 언어별로 1,760개 문제에 대해 집계되었으며, 두 달 동안 총 50,000건 이상의 제출이 이루어졌다.

실험 결과
연구 질문
- RQ1RQ1: Copilot의 코드 생성 단계에서의 신뢰성은 어떠한가? 그리고 제안 수와 실패율은 프로그래밍 언어에 따라 어떻게 달라지는가?
- RQ2RQ2: Copilot의 제안 정확도는 프로그래밍 언어, 문제 난이도, 제안 순위, 문제 주제에 따라 어떻게 달라지는가?
- RQ3RQ3: Copilot가 생성한 정확한 해결책의 시간 및 메모리 효율성은 LeetCode의 평균 인간 제출물과 비교해 어떻게 되는가?
- RQ4RQ4: 특히 LeetCode 문제에 대해, 리시테이션(기존 해결책 반복)이 Copilot 출력에서 얼마나 자주 발생하는가?
주요 결과
- Copilot는 자바와 C++에서 파이썬3와 루스트보다 더 높은 신뢰성을 보였으며, 생성 실패 수가 적고 문제당 제안 수가 더 많았다.
- 모든 언어에서 Copilot는 정확도가 72%를 초과했으며, 특히 자바와 C++에서 파이썬3와 루스트보다 유의미하게 높은 성공률을 기록했다.
- 상위 랭크 제안이 항상 최적의 해결책은 아니었으며, 최적의 솔루션을 찾기 위해 여러 제안을 평가해야 했다.
- 문제 주제별로 볼 때, 버킷 정렬(Bucket Sort)이 가장 높은 정확도를 보였고, 트리 관련 문제는 가장 낮은 정확도를 기록했다.
- Copilot가 생성한 코드는 LeetCode의 평균 인간 제출물보다 시간 및 메모리 효율성이 뛰어나, 효율성 지표에서 뛰어난 성능을 보였다.
- 리시테이션은 1,760개 문제 중 5개에서 관찰되었으며, 모두 파이썬3에서 발생했고, Copilot가 출력에 작동하지 않는 LeetCode 링크를 포함시켜 학습 데이터에 노출된 것으로 보였다.

더 나은 연구,지금 바로 시작하세요
논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.
카드 등록 없음 · 무료 플랜 제공
이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.