Skip to main content
QUICK REVIEW

[논문 리뷰] Learning a Static Bug Finder from Data

Yu Wang, Fengjuan Gao|arXiv (Cornell University)|2019. 07. 12.
Software Engineering Research참고 문헌 43인용 수 8
한 줄 요약

이 논문은 코드 데이터에서 직접 학습하는 프레임워크인 NeurSA를 제안한다. 이 프레임워크는 간격 기반 전파 메커니즘을 갖춘 그래프 신경망(GNN)을 사용하여 정적 버그 검출기(예: null 포인터 해제, 배열 인덱스 오류 등)를 학습한다. 이 방법은 전통적인 정적 분석기보다 정밀도가 높으며, 실제 프로젝트에서 50개의 새로운 버그를 발견했고, 그 중 9개는 수정되었으며 3개는 확인되었다.

ABSTRACT

We present an alternative approach to creating static bug finders. Instead of relying on human expertise, we utilize deep neural networks to train static analyzers directly from data. In particular, we frame the problem of bug finding as a classification task and train a classifier to differentiate the buggy from non-buggy programs using Graph Neural Network (GNN). Crucially, we propose a novel interval-based propagation mechanism that leads to a significantly more efficient, accurate and scalable generalization of GNN. We have realized our approach into a framework, NeurSA, and extensively evaluated it. In a cross-project prediction task, three neural bug detectors we instantiate from NeurSA are effective in catching null pointer dereference, array index out of bound and class cast bugs in unseen code. We compare NeurSA against several static analyzers (e.g. Facebook Infer and Pinpoint) on a set of null pointer dereference bugs. Results show that NeurSA is more precise in catching the real bugs and suppressing the spurious warnings. We also apply NeurSA to several popular Java projects on GitHub and discover 50 new bugs, among which 9 have been fixed, and 3 have been confirmed.

연구 동기 및 목표

  • 인간이 작성한 규칙를 데이터 기반 학습으로 대체하여 전통적인 정적 버그 검출기의 높은 거짓 양성 및 거짓 음성 비율 문제를 해결한다.
  • 구문 패턴을 넘어서는 복잡한 의미적 버그를 탐지하는 데 있어 그래프 신경망(GNN)의 능력을 향상시킨다.
  • 수동으로 버그 패턴을 정의하지 않고도 일반적이고 확장 가능한 신경 정적 분석기 프레임워크를 개발한다.
  • 코드 코퍼스에서의 자동 학습을 통해 정적 분석 규칙 설계에 전문 지식 의존도를 낮춘다.
  • null 포인터 해제, 배열 인덱스 범위 초과, 클래스 캐스트 예외와 같은 버그를 다중 프로젝트 간 효과적으로 탐지할 수 있도록 한다.

제안 방법

  • 프레임워크는 여러 개의 오픈소스 프로젝트에서 학습 데이터를 수집하며, 알려진 버그 보고서를 기반으로 프로그램을 버그 있음 또는 정상으로 자동으로 레이블링한다.
  • 프로그램을 코드 속성 그래프로 표현하고, GNN의 깊은 의미적 특징 학습 능력을 향상시키기 위해 새로운 간격 기반 전파 메커니즘(IBPM)을 적용한다.
  • IBPM은 그래프 간격을 통해 계층적 메시지 전달을 가능하게 하여 모델의 표현력과 대규모 프로그램에 대한 확장성 향상에 기여한다.
  • 노드 및 그래프 수준의 표현을 사용하여 버그가 있는지 없는지 식별하는 이진 분류 작업으로 모델을 학습한다.
  • NeurSA는 프로그램 그래프 내 함수 호출 및 제어 흐름 구조를 통해 정보를 전파함으로써 함수 간 분석을 수행한다.
  • 프레임워크는 확장 가능하다: 특정 버그 유형에 대해 레이블이 붙은 데이터로 재학습하기만 하면 핵심 아키텍처를 변경하지 않고도 새로운 버그 검출기를 생성할 수 있다.

실험 결과

연구 질문

  • RQ1코드 데이터에서 직접 학습하는 딥러닝 모델이 규칙 기반 정적 분석기보다 더 효과적으로 복잡한 의미적 버그를 탐지할 수 있는가?
  • RQ2제안된 간격 기반 전파 메커니즘이 GNN의 프로그램 분석 성능과 확장성에 어떤 영향을 미치는가?
  • RQ3데이터 기반 신경 기반 접근이 프로젝트 간 일반화 능력을 얼마나 발휘할 수 있는가? 특히 이전에 보지 못한 버그를 탐지할 수 있는가?
  • RQ4이 프레임워크는 대규모로 유지 관리되는 실제 오픈소스 프로젝트에서 실질적인 버그를 발견할 수 있는가?
  • RQ5NeurSA의 성능은 Facebook Infer나 Pinpoint와 같은 최신 정적 분석기와 정밀도와 재현율 측면에서 어떻게 비교되는가?

주요 결과

  • NeurSA는 null 포인터 해제 버그 탐지에서 Facebook Infer와 Pinpoint를 능가하며, 더 높은 정밀도와 더 적은 거짓 양성을 보였다.
  • 프레임워크는 인기 있는 GitHub 프로젝트에서 50개의 새로운 버그를 발견했으며, 그 중 9개는 수정되었고 3개는 프로젝트 유저가 확인했다.
  • NeurSA에서 유도된 세 개의 신경 버그 검출기는 미리보지 못한 코드에서 null 포인터 해제, 배열 인덱스 오류, 클래스 캐스트 예외를 성공적으로 탐지했다.
  • 간격 기반 전파 메커니즘(IBPM)은 GNN의 일반화 능력을 크게 향상시켜, 복잡한 비문법적 버그 패턴을 더 잘 탐지할 수 있도록 했다.
  • 개선된 성능에도 불구하고, NeurSA는 약 1,000개의 노드를 갖는 매우 큰 프로그램에서는 지역적 버그 패턴이 불필요한 코드에 의해 가려져 있어 성능이 떨어지는 경향을 보였으며, 이는 신호 국소화 기법 향상의 필요성을 시사한다.
  • NeurSA의 거짓 양성은 주로 동일한 원인으로 발생한다: 전체 맥락 없이 null 포인터 존재에 과민하게 반응하는 것으로, 이는 거짓 음성의 주요 원인와도 일치한다.

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

논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.

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

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