[Paper] 저자원 언어 방언 컴파일러를 위한 Bootstrapping Fuzzers, Language Models 활용

발행: (2025년 12월 6일 오전 02:00 GMT+9)
8 min read
원문: arXiv

Source: arXiv - 2512.05887v1

Overview

이 논문은 Germinator라는 도구를 소개한다. Germinator는 MLIR 프레임워크 위에 구축된 컴파일러 다이얼렉트에 대해 자동으로 고품질 테스트 시드를 생성한다. 자동으로 추출된 다이얼렉트 문법과 대형 언어 모델(LLM)을 결합함으로써, 저자들은 모든 다이얼렉트에 대해 작동하면서도 다이얼렉트‑특정 버그를 효과적으로 드러내는 퍼징을 구현한다—이는 저자원 언어 확장 개발자들에게 오랫동안 골칫거리였던 문제다.

Key Contributions

  • 다이얼렉트에 구애받지 않는 시드 생성: MLIR 다이얼렉트 사양에서 직접 형식 문법을 추출하여, 수작업으로 만든 시드 코퍼스가 필요 없게 한다.
  • LLM 기반 시드 부트스트래핑: 사전 학습된 대형 언어 모델을 사용해 추출된 문법으로부터 다양한 타입‑정합 프로그램을 샘플링한다. 별도의 학습 데이터가 필요하지 않다.
  • Coverage‑guided 퍼징 통합: LLM이 만든 시드를 표준 커버리지 기반 퍼저에 투입해 코드 커버리지 지표를 크게 향상시킨다.
  • 대규모 실증 검증: 91개의 다이얼렉트를 포함하는 6개의 MLIR 프로젝트에서 테스트했으며, 문법‑전용 베이스라인 대비 10‑120 %의 라인 커버리지 향상을 보였다.
  • 버그 발견: 자동 테스트 지원이 없던 23개의 다이얼렉트에서 88개의 새로운 버그(그 중 40개는 확인)를 발견했다.

Methodology

  1. Grammar Extraction – 각 MLIR 다이얼렉트는 선언적 사양(예: TableGen)을 제공한다. 저자들은 이 사양을 파싱해 다이얼렉트의 구문 형태와 타입 제약을 포착하는 컨텍스트‑프리 문법을 자동으로 만든다.
  2. LLM Prompting – 추출된 문법을 대형 언어 모델(예: GPT‑3.5)을 위한 프롬프트로 변환한다. 모델은 문법 규칙을 준수하는 무작위 프로그램을 생성하도록 요청받으며, 사실상 “스마트 시드 생성기” 역할을 한다.
  3. Seed Filtering – 생성된 프로그램을 다이얼렉트 검증기에 넣어 타입 검사를 수행한다. 검사를 통과한 것만 유효한 시드로 유지한다.
  4. Bootstrapping Fuzzers – 검증된 시드를 커버리지‑기반 퍼저(예: AFL++)에 제공한다. 퍼저는 런타임 커버리지 피드백을 기반으로 시드를 변형해 컴파일러 내부 경로를 더 깊게 탐색한다.
  5. Evaluation – 저자들은 Germinator의 시드 집합을 순수 문법 기반 베이스라인과 비교해 라인 커버리지와 버그 탐지 측면에서 여러 실제 다이얼렉트에 대해 평가한다.

Results & Findings

  • Coverage Boost: 91개의 다이얼렉트 전체에서 Germinator 시드는 문법‑전용 시드 생성기 대비 **10 %에서 120 %**까지 라인 커버리지를 증가시켰다.
  • Bug Yield: 퍼징 캠페인에서 88개의 이전에 알려지지 않은 버그를 발견했으며, 그 중 40개는 다이얼렉트 유지보수자에 의해 확인되었다.
  • Low‑Resource Success: 자동 테스트 생성기가 전혀 없던 23개의 다이얼렉트에서도 Germinator는 효과적인 시드를 만들어냈으며, 개발자 자원이 부족한 상황에서도 접근 방식이 작동함을 입증했다.
  • Scalability: 문법 추출부터 버그 발견까지 전체 파이프라인이 모든 다이얼렉트에 대해 수동 튜닝 없이 자동으로 실행되어 실용적인 확장성을 보여준다.

Practical Implications

  • 컴파일러 개발 가속화: 새로운 MLIR 다이얼렉트를 구축하는 팀은 Germinator를 CI 파이프라인에 연결해 시드 코퍼스를 직접 작성하지 않고도 즉시 고커버리지 테스트 스위트를 얻을 수 있다.
  • 유지보수 비용 감소: 시드가 다이얼렉트 사양에서 재생성되므로 언어 기능이 진화해도 테스트가 자동으로 최신 상태를 유지해, 깨지기 쉬운 테스트 스위트 관리 부담이 크게 줄어든다.
  • 도메인‑특화 언어 신뢰성 향상: 그래픽, 머신러닝, 하드웨어 설계 등 맞춤형 DSL에 의존하는 산업 분야는 컴파일러 충돌을 조기에 포착해 최종 사용자를 위한 툴체인의 안정성을 높일 수 있다.
  • 기존 LLM 투자 활용: 이미 LLM API를 사용하고 있는 조직은 이를 시드 생성에 재활용함으로써 “부가적인” AI 기능을 구체적인 품질 보증 자산으로 전환할 수 있다.

Limitations & Future Work

  • 문법 품질 의존성: 다이얼렉트 사양이 불완전하거나 오류가 있으면 추출된 문법(따라서 시드)도 중요한 구문을 놓칠 수 있다.
  • LLM 프롬프트 민감도: 생성 프로그램의 다양성은 프롬프트 설계와 모델 버전에 따라 달라지며, 특수 다이얼렉트의 경우 튜닝이 필요할 수 있다.
  • 런타임 오버헤드: 초기 LLM 생성 단계가 순수 문법 샘플링에 비해 지연을 추가하지만, 퍼징 캠페인 전체에 걸쳐서는 비용이 상쇄된다.
  • 향후 방향: 저자들은 타입 추론 엔진과의 tighter integration을 통해 잘못된 시드를 더 일찍 제거하고, 더 작고 fine‑tuned된 LLM을 탐색해 빠른 생성 속도를 얻으며, MLIR을 넘어 다른 확장 가능한 컴파일러 인프라에도 접근 방식을 확장할 것을 제안한다.

Authors

  • Sairam Vaidya
  • Marcel Böhme
  • Loris D’Antoni

Paper Information

  • arXiv ID: 2512.05887v1
  • Categories: cs.SE, cs.LG, cs.PL
  • Published: December 5, 2025
  • PDF: Download PDF
Back to Blog

관련 글

더 보기 »