[논문 리뷰] How Does Naming Affect LLMs on Code Analysis Tasks?
이 논문은 ChatGPT와 CodeBERT와 같은 대규모 언어 모델(Large Language Models, LLMs)이 보안 중심의 코드 분석 작업에서 이름 규칙이 어떻게 영향을 미치는지 조사한다. 연구 결과, 두 모델 모두 의미 있는 변수, 함수, 메서드 이름에 크게 의존하며, 이름이 익명화될 경우 정확도가 급격히 감소하여 17–24%로 떨어지는 것으로 나타났다. 이는 코드에서 문자 그대로의 식별자 없이 의미론적 논리를 학습하는 데에 있어 중요한 한계를 드러낸다.
The Large Language Models (LLMs), such as GPT and BERT, were proposed for natural language processing (NLP) and have shown promising results as general-purpose language models. An increasing number of industry professionals and researchers are adopting LLMs for program analysis tasks. However, one significant difference between programming languages and natural languages is that a programmer has the flexibility to assign any names to variables, methods, and functions in the program, whereas a natural language writer does not. Intuitively, the quality of naming in a program affects the performance of LLMs in program analysis tasks. This paper investigates how naming affects LLMs on code analysis tasks. Specifically, we create a set of datasets with code containing nonsense or misleading names for variables, methods, and functions, respectively. We then use well-trained models (CodeBERT) to perform code analysis tasks on these datasets. The experimental results show that naming has a significant impact on the performance of code analysis tasks based on LLMs, indicating that code representation learning based on LLMs heavily relies on well-defined names in code. Additionally, we conduct a case study on some special code analysis tasks using GPT, providing further insights.
연구 동기 및 목표
- 보안 중심의 코드 분석 작업에서 LLMs, 특히 ChatGPT와 CodeBERT의 효과성을 평가하기 위해.
- 의미 있는 변수, 함수, 메서드 이름의 유무가 LLM 성능에 미치는 영향을 조사하기 위해.
- 문자 그대로의 식별자가 제거되거나 의미 없는 문자열로 대체될 경우 LLMs가 코드의 의미론적 논리를 어떻게 학습할 수 있는지 평가하기 위해.
- 표면적인 이름 외의 의미론적 코드 이해 능력에서 LLMs의 강점과 한계를 규명하기 위해.
- 연구자와 실무자들이 소프트웨어 보안 응용 분야에서 LLMs를 신뢰할 수 있게 사용하기 위한 실질적 통찰을 제공하기 위해.
제안 방법
- 보안 중심의 코드 분석 작업에 대해 ChatGPT의 응답을 질적 사례 연구로 수행하여 추론력과 정확도를 평가하기 위해 의도적인 과제를 도입하였다.
- CodeBERT에 대해 정량적 분석을 수행하여 변수 이름, 메서드 정의, 메서드 호출 요소를 체계적으로 익명화하였다.
- 두 가지 익명화 전략을 적용하여 원본 데이터셋의 여덟 가지 변형을 생성하였다: '임의로 생성된'(비논리적 문자열) 및 '의미적으로 생성된'(의미적으로 오해의 소지가 있지만 문법적으로 유효한 이름).
- 익명화된 데이터셋으로 CodeBERT와 GraphCodeBERT를 재학습하고, 자연어 기반 코드 검색 및 코드 클론 탐지와 같은 두 가지 후행 작업에서 성능을 평가하였다.
- 원본 및 익명화된 데이터셋 간의 모델 정확도를 비교하여 문자 그대로의 이름 특징이 모델 성능에 미치는 영향을 측정하였다.
- 개발자가 정의한 다양한 종류의 이름이 제거되거나 대체될 경우 성능 저하 정도를 분석하였다.
실험 결과
연구 질문
- RQ1보안 중심의 코드 분석 작업에서 ChatGPT와 CodeBERT와 같은 LLMs의 성능에 의미 있는 변수, 함수, 메서드 이름의 존재가 어떻게 영향을 미치는가?
- RQ2LLMs가 익명화된 식별자를 가진 코드로 일반화할 수 있는 정도는 어느 정도인가? 특히 이름이 의미 없는 문자열이나 오해의 소지가 있는 문자열로 대체될 경우에 대해.
- RQ3'의미적으로 생성된' 이름 사용(예: 'bubble_sort'를 'aes_encryption'로 대체)이 '임의로 생성된' 이름보다 LLMs를 더 오도시키는가?
- RQ4변수, 메서드 정의, 메서드 호출과 같은 다양한 종류의 코드 익명화가 코드 검색 및 클론 탐지 작업에서 모델 정확도에 각각 어떻게 영향을 미치는가?
- RQ5문자 그대로의 식별자가 없거나 가려졌을 경우 현재 LLMs가 코드의 의미론적 논리를 효과적으로 학습할 수 있는가?
주요 결과
- CodeBERT의 코드 검색 성능은 변수 이름을 모두 제거하고 임의로 생성된 문자열로 대체했을 때 원본 자바 데이터셋의 70.36%에서 17.42%로 떨어졌다.
- 파이썬 코드 검색에서는 원본 데이터셋의 68.17%에서 익명화된 경우 24.09%로 감소하였다.
- 클론 탐지 작업에서는 원본 데이터셋 대비 자바 코드에서 정확도가 94.87%에서 86.77%로, 파이썬 코드에서 94.27%에서 84.76%로 떨어졌다.
- '의미적으로 생성된' 익명화 전략은 항상 '임의로 생성된' 문자열보다 성능 저하가 더 심했다. 이는 오해의 소지가 있는 의미적 신호가 모델을 더 쉽게 오도시킬 수 있음을 시사한다.
- 이 연구는 현재의 LLMs, 예를 들어 CodeBERT와 GraphCodeBERT가 코드의 의미론적 또는 논리적 특징보다는 문자 그대로의 특징(예: 이름)에 크게 의존함을 확인하였으며, 이는 오브스컬레이션 공격에 취약함을 드러낸다.
- ChatGPT는 이름이 의미 있는 경우 고수준의 코드 의미론적 이해 능력을 보였지만, 애매하거나 이름이 없는 맥락에서는 성능이 크게 저하되었다.
더 나은 연구,지금 바로 시작하세요
논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.
카드 등록 없음 · 무료 플랜 제공
이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.