Skip to main content
QUICK REVIEW

[논문 리뷰] The Hitchhiker's Guide to Program Analysis: A Journey with Large Language Models

Haonan Li, Yu Hao|arXiv (Cornell University)|2023. 08. 01.
Software Engineering Research인용 수 11
한 줄 요약

해석: 이 논문은 LLift를 제안합니다. 정적 분석과 대형 언어 모델을 결합하여 대규모 코드베이스(Linux kernel)의 Use-Before-Initialization 버그를 탐지하는 완전 자동화 프레임워크로, 테스트 사례에서 50% 정밀도와 100% 재현율을 달성하고 13개의 새로운 버그를 발견합니다.

ABSTRACT

Static analysis is a widely used technique in software engineering for identifying and mitigating bugs. However, a significant hurdle lies in achieving a delicate balance between precision and scalability. Large Language Models (LLMs) offer a promising alternative, as recent advances demonstrate remarkable capabilities in comprehending, generating, and even debugging code. Yet, the logic of bugs can be complex and require sophisticated reasoning and a large analysis scope spanning multiple functions. Therefore, at this point, LLMs are better used in an assistive role to complement static analysis. In this paper, we take a deep dive into the open space of LLM-assisted static analysis, using use-before-initialization (UBI) bugs as a case study. To this end, we develop LLift, a fully automated framework that interfaces with both a static analysis tool and an LLM. By carefully designing the framework and the prompts, we are able to overcome a number of challenges, including bug-specific modeling, the large problem scope, the non-deterministic nature of LLMs, etc. Tested in a real-world scenario analyzing nearly a thousand potential UBI bugs produced by static analysis, LLift demonstrates a potent capability, showcasing a reasonable precision (50%) and appearing to have no missing bugs. It even identified 13 previously unknown UBI bugs in the Linux kernel. This research paves the way for new opportunities and methodologies in using LLMs for bug discovery in extensive, real-world datasets.

연구 동기 및 목표

  • 대형 소프트웨어 시스템(예: Linux kernel)의 정적 분석에서 정밀도와 확장성의 균형 필요성을 동기 부여합니다.
  • 전통적인 정적 분석이 어려움을 겪는 영역에서(LLM이 시간/메모리 제약을 처리할 수 있는지) 버그 발견에 LLM이 도움을 줄 수 있는지 조사합니다.
  • 정적 분석과 LLM을 통합하여 Use-Before-Initialization 버그를 식별하는 완전 자동화 프레임워크(LLift)를 개발합니다.
  • LLM의 비결정성, 컨텍스트 윈도우, 환각 등을 완화하고 신뢰할 수 있는 결과를 달성하기 위한 프롬프트 전략과 워크플로우 기법을 설계합니다.
  • 약 1,000개의 잠재 UB1 버그에 대해 LLift를 평가하고 정밀도, 재현율 및 새로 발견된 버그를 보고합니다.

제안 방법

  • 제한 이후의 제약 조건 기반 경로 분석을 도입하여 비실현 가능한 경로를 가지치기합니다.
  • LLM과의 다중 대화를 통해 분석을 여러 관리 가능한 단계로 분할하는 작업 분해를 적용합니다.
  • 요청 시 함수 정의를 공급하는 점진적 프롬팅을 사용하여 컨텍스트 윈도우의 부담을 줄입니다.
  • LLM이 자체 출력을 검토하도록 하는 자기 검증을 도입하여 신뢰성을 높입니다.
  • 사슬-사고(체인-오브-생각) 프롬팅과 소스 코드 기반 분석을 활용하여 LLN의 추론을 유도합니다.
  • OpenAI API를 통해 LLN 호출을 조정하고 결과를 처리하는 소프트웨어 에이전트를 구현합니다.

실험 결과

연구 질문

  • RQ1대규모 실제 코드베이스에서 Use-Before-Initialization 버그를 탐지하는 데 LLM이 정적 분석에 실질적으로 도움을 줄 수 있는가?
  • RQ2신뢰성과 확장을 가능하게 하는 프롬프트 전략 및 워크플로우 설계는 무엇인가?
  • RQ3실제 UB 버그 잠재 데이터 세트에서 LLift의 정밀도와 재현율은 어떤가?
  • RQ4전통적 정적 분석이 놓칠 수 있는 새로운 버그를 LLift가 어떤 방식으로 발견할 수 있는가?

주요 결과

  • LLift는 거의 1,000건의 분석된 UB 버그 사례에서 50%의 정밀도와 100%의 재현율을 달성했습니다.
  • LLift는 Linux kernel에서 13개의 이전에 알려지지 않은 UB 버그를 식별했고, Linux 커뮤니티의 검증을 받았습니다.
  • 1,000건이 넘는 사례를 분석한 결과, 26건의 보고서가 긍정적으로 나타나 실제 데이터에 대한 실용적 효과를 보여주었습니다.
  • 기저 정적 분석 파이프라인(UBITect)과 비교하여 LLift는 시간/메모리 제약으로 인한 어려운 케이스를 처리합니다.
  • 대규모 버그 발견을 위한 정적 분석 보완에 LLM을 활용하는 것이 가능하다는 것을 이 방법이 실증적으로 보여줍니다.
  • 오픈 소스 의도: 연구 확장을 촉진하기 위해 코드와 데이터를 공개할 계획입니다.

더 나은 연구,지금 바로 시작하세요

연구 설계부터 논문 작성까지, 연구 시간을 획기적으로 줄여보세요.

카드 등록 없음 · 무료 플랜 제공

이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.