소개
LLMAO (Large Language Models for Automated fault localization)는 테스트 없이도 결함 위치를 추론할 수 있는 대형 언어 모델 기반 버그 로컬라이제이션 기법입니다. 기존 통계 기반(SBFL)·머신러닝 기반(MLFL) 접근법의 한계를 극복하고, 프로그램 분석 도구나 테스트 케이스 없이도 효과적인 결함 탐지를 수행합니다.
1. Fault Localization 개요
1.1 정의
Fault Localization(FL)은 프로그램에서 버그가 발생했을 때,
어떤 코드 엔티티(라인, 구문, 함수, 모듈 등)가 결함과 관련이 있는지를 자동으로 식별하는 기술입니다.
2. 기존 접근 방식 비교
| 구분 |
SBFL (Spectrum-Based) |
MLFL (Machine Learning-Based) |
| 데이터 요구 |
테스트 케이스 커버리지 |
코드·테스트·실행 특성 |
| 예시 기법 |
Tarantula, Ochiai |
DeepFL, TRANSFER-FL, DeepRL4FL |
| 특징 |
통계 기반, 단순 계산 |
의미·스펙트럼·변이 기반 특징 결합 |
| 한계 |
테스트 필요, 깊은 의미 반영 부족 |
변이 기반 수집 비용 큼, 일반화 한계 |
3. LLM 기반 접근 필요성
3.1 배경
- 최신 LLM(Codex, InCoder)은 자연어 ↔ 코드 변환 가능
- 대규모 코드语料 학습으로 코드 의미를 깊이 이해
- 하지만 좌→우 언어 모델은 각 토큰이 왼쪽 문맥에만 의존
→ 라인 단위 결함 식별에 최적화되지 않음
4. LLMAO 아키텍처
- 코드 입력
- 줄 단위 표현 생성
- 각 줄의
newline token 히든 상태 추출
- 양방향 어댑터 레이어
- Causal Attention Mask 제거 → 미래 토큰 정보까지 활용
- 결함 점수 산출
5. 데이터셋
| 데이터셋 |
언어 |
버그 수 |
설명 |
| Defects4J v1.2.0 |
Java |
395 |
기존 FL 비교 실험 |
| Defects4J v2.0.0 |
Java |
226 |
v1.2.0 학습 후 일반화 성능 평가 |
| BugsInPy |
Python |
493 |
17개 프로젝트 |
| Devign |
C |
5,260 |
보안 결함 포함 |
6. 실험 결과
6.1 RQ1: 기존 SOTA 대비 성능
- LLMAO > DeepFL, TRANSFER-FL
- 변이 기반 정보 없이도 SOTA 성능
6.2 RQ2: 새로운 프로젝트 일반화
- v1.2.0 학습 → v2.0.0 평가 시 성능 유지
6.3 RQ3: 구성 요소 영향
- LTR LLM만으로도 일부 결함 탐지 가능
- 양방향 어댑터 추가 시 SOTA 달성
6.4 RQ4: 다중 언어 적용성
- Python, C에서도 효과적
- C 보안 결함 탐지에 강점
7. 기존 기법과 성능 비교
| 모델 |
Defects4J v1.2.0 MAP |
Defects4J v2.0.0 MAP |
BugsInPy MAP |
| BLUiR |
낮음 |
- |
- |
| DeepFL |
중간 |
중간 |
- |
| TRANSFER-FL |
높음 |
높음 |
- |
| LLMAO |
최고 |
최고 |
최고 |
8. 결론
- LLMAO는 테스트 케이스 없이도 버그 로컬라이제이션이 가능
- 기존 SOTA를 능가하며, 프로그램 분석 도구 없이 적용 가능
- 보안 결함 및 테스트 케이스 부재 환경에서 특히 유용
참고자료
발표 자료
- 자세한 내용은 논문이나 아래 발표 자료로 확인 가능합니다.
Presentation Slides