[논문 리뷰] FLAG: Finding Line Anomalies (in code) with Generative AI
FLAG는 대규모 언어 모델(Large Language Models, LLMs)을 사용하여 각 소스 코드 라인을 LLM이 생성한 대체 버전과 비교함으로써 코드 이상 현상을 탐지하는 새로운 언어 독립적 프레임워크이다. 유사도가 낮거나 LLM의 신뢰도가 낮거나 주석과의 일치도가 떨어지는 차이점을 식별함으로써 FLAG는 수동 검토의 검색 범위를 코드의 12–17%로 줄이며, C, 파이썬, 벨리로그에서 알려진 버그 121개 중 101개를 탐지한다.
Code contains security and functional bugs. The process of identifying and localizing them is difficult and relies on human labor. In this work, we present a novel approach (FLAG) to assist human debuggers. FLAG is based on the lexical capabilities of generative AI, specifically, Large Language Models (LLMs). Here, we input a code file then extract and regenerate each line within that file for self-comparison. By comparing the original code with an LLM-generated alternative, we can flag notable differences as anomalies for further inspection, with features such as distance from comments and LLM confidence also aiding this classification. This reduces the inspection search space for the designer. Unlike other automated approaches in this area, FLAG is language-agnostic, can work on incomplete (and even non-compiling) code and requires no creation of security properties, functional tests or definition of rules. In this work, we explore the features that help LLMs in this classification and evaluate the performance of FLAG on known bugs. We use 121 benchmarks across C, Python and Verilog; with each benchmark containing a known security or functional weakness. We conduct the experiments using two state of the art LLMs in OpenAI's code-davinci-002 and gpt-3.5-turbo, but our approach may be used by other models. FLAG can identify 101 of the defects and helps reduce the search space to 12-17% of source code.
연구 동기 및 목표
- 개발 중인 프로그램이 완성되지 않거나 컴파일되지 않을 때도 보안 및 기능 버그를 식별하는 데 도전하는 문제를 해결한다.
- 잠재적 결함을 찾기 위한 수동 리뷰의 노력을 줄이기 위해 검색 범위를 좁힌다.
- LLM과 코드 및 주석에 담긴 개발자 의도에 기반한 언어 독립적이고 규칙 기반 없는 버그 탐지 방법을 개발한다.
- 공식 사양이나 테스트 케이스가 필요 없이도 LLM이 생성한 코드 비교를 새로운 이상 탐지 메커니즘으로 탐색한다.
제안 방법
- 소스 파일의 각 라인에 대해 주변 컨텍스트(주석 포함)와 함께 사전 훈련된 LLM에 입력하여 대체 라인을 생성한다.
- Levenshtein 거리와 LLM 로그 확률(신뢰도)를 포함한 여러 유사도 메트릭을 사용해 원본 라인과 LLM이 생성한 라인을 비교한다.
- LLM의 기대 계속 라인과 크게 다를 경우, 특히 LLM이 불확실한 경우(낮은 로그 확률) 또는 주석과 거리가 먼 경우 라인을 이상으로 분류한다.
- 탐지율과 임의의 경고 비율을 균형 잡기 위해 두 가지 분류 기준 C1(거리와 신뢰도 기반)과 C2(낮은 신뢰도 제안을 추가로 걸러내는 기준)를 적용한다.
- C, 파이썬, 벨리로그에서 121개의 벤치마크를 대상으로 두 가지 최신 LLM인 code-davinci-002와 gpt-3.5-turbo를 사용해 방법을 평가한다.
- 주석과의 거리, Levenshtein 거리, LLM 신뢰도와 같은 특징을 활용해 이상 탐지 분류를 향상시키며, 거짓 경고를 최소화하면서 진짜 경고 탐지율을 유지하는 데 중점을 둔다.
실험 결과
연구 질문
- RQ1LLM이 생성한 코드 계속 라인은 개발자 의도에서 벗어난 라인을 효과적으로 식별하여 잠재적 버그로 표시할 수 있는가?
- RQ2원본 코드와 생성된 코드 간의 Levenshtein 거리는 이상 라인을 식별하는 데 얼마나 효과적인가?
- RQ3주석과의 거리와 LLM 신뢰도는 이상 탐지 정확도를 얼마나 향상시키는가?
- RQ4C, 파이썬, 벨리로그와 같은 다양한 프로그래밍 언어 및 code-davinci-002, gpt-3.5-turbo 등의 LLM에서 FLAG는 어떤 성능을 보이는가?
- RQ5이 프레임워크는 알려진 보안 및 기능 버그를 높은 탐지율을 유지하면서도 수동 코드 리뷰의 검색 범위를 줄일 수 있는가?
주요 결과
- FLAG는 두 가지 최신 LLM인 code-davinci-002와 gpt-3.5-turbo를 사용하여 C, 파이썬, 벨리로그 벤치마크에서 알려진 보안 및 기능 버그 121개 중 101개를 성공적으로 탐지했다.
- 평균적으로 FLAG는 수동 코드 리뷰의 검색 범위를 원본 소스 코드의 12–17%로 줄였으며, 이는 개발자 효율성 향상에 기여했다.
- gpt-3.5-turbo는 code-davinci-002보다 더 높은 탐지 능력을 보였지만, 거짓 경고 비율도 더 높았다(거짓 경고 비율 0.172 대비 0.121).
- 원본 코드와 생성된 코드 간의 Levenshtein 거리가 이상 탐지 분류에 가장 중요한 특징였으며, 그 다음으로 주석과의 거리와 LLM 신뢰도가 영향을 미쳤다.
- 프레임워크는 C 코드에서 가장 우수한 성능을 보였고, 파이썬에서 가장 열악한 성능을 보였다. 기능 버그는 보안 관련 버그보다 더 신뢰성 있게 탐지되었다.
- C2 필터링 기준을 적용함으로써 낮은 신뢰도의 LLM 제안을 제거하여 거짓 경고를 줄였지만, 평균적으로 3.75개의 결함 탐지율이 감소했다.
더 나은 연구,지금 바로 시작하세요
논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.
카드 등록 없음 · 무료 플랜 제공
이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.