[논문 리뷰] Lost in Translation: A Study of Bugs Introduced by Large Language Models while Translating Code
이 연구는 다섯 가지 프로그래밍 언어 간 코드 번역에서 대규모 언어 모델(Large Language Models, LLMs)의 신뢰성을 조사하며, LLMs가 오직 2.1%에서 47.3%의 경우에만 정확한 번역을 생성하는 것으로 드러났다. 연구에서는 번역 버그의 15가지 유형을 규명하고, LLM 기반 방법과 전통적인 비-LLM 기반 기법을 비교하며, 맥락을 고려한 프롬프트 설계 전략을 제안하여 평균적으로 번역 정확도를 5.5% 향상시켰다.
Code translation aims to convert source code from one programming language (PL) to another. Given the promising abilities of large language models (LLMs) in code synthesis, researchers are exploring their potential to automate code translation. The prerequisite for advancing the state of LLM-based code translation is to understand their promises and limitations over existing techniques. To that end, we present a large-scale empirical study to investigate the ability of general LLMs and code LLMs for code translation across pairs of different languages, including C, C++, Go, Java, and Python. Our study, which involves the translation of 1,700 code samples from three benchmarks and two real-world projects, reveals that LLMs are yet to be reliably used to automate code translation -- with correct translations ranging from 2.1% to 47.3% for the studied LLMs. Further manual investigation of unsuccessful translations identifies 15 categories of translation bugs. We also compare LLM-based code translation with traditional non-LLM-based approaches. Our analysis shows that these two classes of techniques have their own strengths and weaknesses. Finally, insights from our study suggest that providing more context to LLMs during translation can help them produce better results. To that end, we propose a prompt-crafting approach based on the symptoms of erroneous translations; this improves the performance of LLM-based code translation by 5.5% on average. Our study is the first of its kind, in terms of scale and breadth, that provides insights into the current limitations of LLMs in code translation and opportunities for improving them. Our dataset -- consisting of 1,700 code samples in five PLs with 10K+ tests, 43K+ translated code, 1,748 manually labeled bugs, and 1,365 bug-fix pairs -- can help drive research in this area.
연구 동기 및 목표
- 일반적이고 코드 전용 LLM이 다섯 가지 프로그래밍 언어(C, C++, Go, Java, Python) 간 코드 번역에 얼마나 효과적인지 평가하기.
- LLM 기반 소스 코드 번역에서 발생하는 번역 실패의 근본 원인을 규명하고 분류하기.
- 정확성과 버그 프로파일 측면에서 LLM 기반 번역과 비-LLM 기반 접근 방식 간의 비교 수행하기.
- 번역 오류에 대한 맥락적 피드백을 제공함으로써 반복적 프롬프트 엔지니어링을 통해 LLM 성능 향상 여부 탐구하기.
- 미래의 LLM 기반 코드 번역 연구를 지원하기 위해 1,700개의 코드 샘플, 10,000개 이상의 테스트 케이스, 43,000개 이상의 번역, 1,748개의 레이블링된 버그, 1,365개의 버그 수정 쌍을 포함한 종합적인 데이터셋 공개하기.
제안 방법
- 다섯 가지 프로그래밍 언어에서 세 가지 벤치마크와 두 개의 실질적 프로젝트에서 1,700개의 실행 가능한 코드 샘플을 수집.
- 최신 기술의 일반적 및 코드 전용 LLM을 사용하여 각 코드 샘플을 다수의 목표 언어로 번역.
- 데이터셋에 제공된 자동화된 테스트 세트를 사용해 번역 정확도를 평가하고, 극단적인 케이스는 수동 검증을 실시.
- 실패한 번역 1,748건에 대한 수동 분 析를 통해 15가지의 구체적인 번역 버그 유형을 규명하고 레이블링.
- 이전 오류의 징후를 활용해 LLM에 맥락적 피드백을 제공하는 프롬프트 설계 기법을 설계 및 평가하고, 재번역 과정에서 적용.
- LLM 기반 번역과 비-LLM 기반 접근 방식(예: 트랜스파일러)을 비교하여 번역 품질 및 오류 프로파일 측면에서 상대적 강점과 약점을 평가.

실험 결과
연구 질문
- RQ1RQ1.1: 최신 기술의 일반적 및 코드 전용 LLM이 다수의 프로그래밍 언어 간 코드 번역에서 어떻게 성능을 발휘하는가?
- RQ2RQ1.2: 실패한 번역의 결과는 어떠한가? 어떤 유형의 오류를 보이는가?
- RQ3RQ2.1: 실패한 LLM 기반 코드 번역의 근본적인 원인(번역 버그)은 무엇인가?
- RQ4RQ2.2: 이러한 버그 유형은 실패한 번역에서 얼마나 퍼져 있는가?
- RQ5RQ2.3: 실질적 프로젝트에서의 번역 버그는 합성 벤치마크에서의 것과 어떻게 다를까?
- RQ6RQ3: 비-LLM 기반 번역 기법은 LLM 기반 방법과 비교해 정확성과 오류 프로파일 측면에서 어떻게 다른가?
- RQ7RQ4: 오류 징후를 기반으로 한 반복적 프롬프트 엔지니어링을 통해 LLM 기반 코드 번역 성능은 어느 정도 향상될 수 있는가?
주요 결과
- LLM 기반 코드 번역은 연구된 모델과 언어 조합 간 테스트 케이스의 2.1%에서 47.3% 사이에서만 정상 기능을 달성한다.
- semantic 오해, 잘못된 타입 처리, 잘못된 제어 흐름 구조 등 총 15가지의 구체적인 번역 버그 유형이 규명되었다.
- 실제 프로젝트에서는 합성 벤치마크보다 더 복잡하고 다양한 버그 패tern을 보였으며, 이는 실제 코드가 LLM에게 더 큰 과제를 제기한다는 것을 시사한다.
- 비-LLM 기반 접근 방식(예: 트랜스파일러)은 정확성 측면에서 LLM을 능가했으며, 특히 복잡한 코드 구조에서 더 적은 의미적 버그를 유발했다.
- 이전 오류의 징후를 활용해 재번역을 안내하는 제안된 프롬프트 설계 기법은 평균 번역 정확도를 5.5% 향상시켰다.
- 이 연구에서 확보한 데이터셋(1,700개의 코드 샘플, 10,000개 이상의 테스트 케이스, 43,000개 이상의 번역, 1,748개의 레이블링된 버그, 1,365개의 버그 수정 쌍)은 향후 LLM 기반 코드 번역 연구를 지원하기 위해 공개되어 있다.

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