Home Pretraining Code Representation with Semantic Flow Graph for Effective Bug Localization
Post
Cancel

Pretraining Code Representation with Semantic Flow Graph for Effective Bug Localization

소개

이 글은 Semantic Flow Graph(SFG)를 활용하여 코드 표현을 사전 학습(Pre-training)하고, 이를 효율적인 버그 로컬라이제이션에 적용하는 연구를 정리한 것입니다. 기존 BERT 기반 버그 로컬라이제이션의 한계를 보완하기 위해 SemanticCodeBERTHMCBL(Hierarchical Momentum Contrastive Bug Localization)을 제안합니다.


1. 문제 정의

1.1 기존 BERT 기반 기법의 한계

  1. 코드의 깊은 의미(Deep Semantics) 부족
    • 자연어와 달리, 프로그래밍 언어는 명확한 구조를 가짐
    • 기존 모델은 코드 토큰 시퀀스로만 처리하거나 얕은 구조(예: Data Flow Graph)만 고려
  2. 부적절한 Negative Sample 사용 & 어휘 유사도 미반영
    • 버그 보고서당 하나의 비관련 변경셋만 Negative로 선택 → 비효율적 학습
    • 버그 보고서와 변경셋 간 어휘 유사도(Lexical similarity) 고려 부족

2. Semantic Flow Graph (SFG)

2.1 개념

SFG는 코드의 데이터·제어 흐름을 타입역할 정보까지 반영한 그래프입니다.

1
2
예시 코드:
a = m(b, c)
  • 데이터 흐름: b → a, c → a
  • 타입 정보 예시:
    • b: Integer
    • c: User-defined type
    • a: Boolean (함수 호출 결과)
  • 역할 정보 예시: m 함수 호출을 통해 bca로 전달됨

SFG 정의: <N, E, T, R>

  • N: 노드 집합 (변수, 함수 등)
  • E: 간선(데이터/제어 흐름)
  • T: 타입 집합 (총 55개)
  • R: 역할 집합 (총 43개)

예시: Semantic Flow Graph 구조


3. SemanticCodeBERT

3.1 입력 구조

[CLS], W, [C], S, [SEP], [N], N, [T], T, [R], R, [SEP]

  • W: 버그 보고서 텍스트
  • S: 소스 코드 토큰 시퀀스
  • N: SFG 노드
  • T: 타입 시퀀스
  • R: 역할 시퀀스
  • C: 주석(Comment)

SemanticCodeBERT 입력 예시

3.2 Masked Attention

  • SFG에서 직접 연결된 토큰 간만 Attention 허용
  • 불필요한 잡음을 줄이고 의미 있는 의존성만 학습

4. HMCBL (Hierarchical Momentum Contrastive Bug Localization)

4.1 개념

  • 버그 보고서(Q)와 변경셋(K) 간 유사도 학습
  • (Q, Positive, Negative) Triplet 구성
  • 목표: Positive 유사도↑, Negative 유사도↓

4.2 구조

HMCBL 구조도

  1. Encoder Network
    • 버그 보고서: 자연어 입력
    • 변경셋: 코드 입력
  2. Projector Network
    • 다층 퍼셉트론(MLP)으로 벡터를 압축해 공유 임베딩 공간으로 매핑
  3. Momentum Update + Memory Bank
    • 대규모 Negative sample 활용
    • 이전 배치에서 얻은 변경셋 임베딩을 메모리에 저장해 대조 학습

5. 실험

5.1 데이터셋

  • 기존 버그 로컬라이제이션 벤치마크 데이터 사용

5.2 비교 모델

  • BLUiR: AST 기반 전통 IR 기법
  • FBL-BERT: SOTA BERT 기반 기법
  • GraphCodeBERT: Data flow 고려한 코드 표현
  • UniXcoder: AST+주석 등 다중 모달 활용

5.3 평가 지표

  • Precision@K (P@K): 상위 K개 결과 중 정답 비율
  • MAP (Mean Average Precision): 관련 변경셋 전체를 찾는 능력
  • MRR (Mean Reciprocal Rank): 첫 번째 정답 위치 평가

5.4 결과

모델 P@1 P@5 MAP MRR
BLUiR 낮음 낮음 낮음 낮음
FBL-BERT 높음 높음 높음 높음
GraphCodeBERT 중간 중간 중간 중간
제안 기법 최고 최고 최고 최고

6. Ablation Study

  • SFG, 타입·역할 정보, 마스크드 어텐션 각각의 성능 기여도를 실험적으로 검증
  • 모든 구성 요소가 성능 향상에 기여함을 확인

결론

  • Semantic Flow Graph를 활용한 사전 학습이 코드 의미를 깊이 있게 반영
  • SemanticCodeBERT + HMCBL 조합으로 기존 SOTA를 초월하는 성능 달성
  • 향후 연구:
    • 더 다양한 코드 구조 정보 포함
    • 대규모 데이터에서 학습 안정성 개선

발표 자료

  • 자세한 내용은 논문이나 아래 발표 자료로 확인 가능합니다.

Presentation Slides

This post is licensed under CC BY 4.0 by the author.