Skip to main content
QUICK REVIEW

[논문 리뷰] Convolutional Neural Networks over Control Flow Graphs for Software Defect Prediction

Anh Viet Phan, Le-Minh Nguyen|arXiv (Cornell University)|2018. 02. 14.
Software Engineering Research참고 문헌 15인용 수 28
한 줄 요약

이 논문은 컴파일된 어셈블리 코드에서 제어 흐름 그래프(CFGs)를 구성하고, 다중 시각, 다중 레이어 방향 그래프 컨볼루션 신경망(DGCNNs)을 적용하여 의미적 특징을 자동으로 학습하는 새로운 딥러닝 접근법을 제안한다. 이 방법은 기존의 특징 기반 및 트리 기반 접근법보다 뛰어나며, 실제 데이터셋에서 정확도를 최대 15.49% 향상시키고 AUC를 최대 12.39% 향상시킨다.

ABSTRACT

Existing defects in software components is unavoidable and leads to not only a waste of time and money but also many serious consequences. To build predictive models, previous studies focus on manually extracting features or using tree representations of programs, and exploiting different machine learning algorithms. However, the performance of the models is not high since the existing features and tree structures often fail to capture the semantics of programs. To explore deeply programs' semantics, this paper proposes to leverage precise graphs representing program execution flows, and deep neural networks for automatically learning defect features. Firstly, control flow graphs are constructed from the assembly instructions obtained by compiling source code; we thereafter apply multi-view multi-layer directed graph-based convolutional neural networks (DGCNNs) to learn semantic features. The experiments on four real-world datasets show that our method significantly outperforms the baselines including several other deep learning approaches.

연구 동기 및 목표

  • 기존 소프트웨어 결함 예측 방법이 수작업으로 설계된 지표나 ASTs에 의존하는 데서 비롯되는 한계를 해결하기 위해.
  • 어셈블리 코드에서 유도된 제어 흐름 그래프(CFGs)가 전통적인 소프트웨어 지표나 ASTs보다 프로그램 실행 의미를 더 잘 표현할 수 있는지 탐구하기 위해.
  • 그래프 기반 신경망을 사용하여 CFGs에서 결함 관련 특징을 자동으로 학습하는 엔드 투 엔드 딥러닝 모델을 개발하기 위해.
  • 실제 소프트웨어 결함 예측 데이터셋에서 제안된 방법의 성능을 평가하고 최신의 특징 기반 및 트리 기반 접근법과 비교하기 위해.

제안 방법

  • 소스 코드가 어셈블리 코드로 컴파일되며, 이는 프로그램의 단계별 실행 흐름을 나타내는 정밀한 제어 흐름 그래프(CFGs)를 구성하는 데 사용된다.
  • CFGs에 다중 시각, 다중 레이어 방향 그래프 컨볼루션 신경망(DGCNNs)을 적용하여 그래프 구조 데이터에서 계층적인 의미적 특징을 학습한다.
  • DGCNN은 CFG 내의 방향성, 레이블이 부여된 노드와 간선을 처리하여 그래프 컨볼루션 연산을 통해 결함과 관련된 구조적 및 행동 패턴을 포착한다.
  • 학습된 CFG 표현을 기반으로 소스 코드가 결함이 있는지 없는지 분류하기 위해 엔드 투 엔드로 모델을 훈련한다.
  • 이 방법은 어셈블리 수준의 CFGs가 저수준 실행 의미를 유지하고 있으며, ASTs에 비해 문법적 재정렬에 덜 민감하다는 사실을 활용한다.
  • 정확도, AUC, F1-스코어와 같은 표준 지표를 사용하여 네 개의 실제 소프트웨어 결함 예측 데이터셋에서 성능을 평가한다.

실험 결과

연구 질문

  • RQ1어셈블리 코드에서 유도된 CFGs가 기존의 소프트웨어 지표나 ASTs보다 결함 예측을 위한 프로그램 의미를 더 잘 표현할 수 있는가?
  • RQ2DGCNNs가 트리 구조의 ASTs에 비해 그래프 구조의 CFGs에서 결함 관련 특징을 얼마나 효과적으로 학습할 수 있는가?
  • RQ3실제 데이터셋에서 제안된 방법은 기존의 특징 기반 및 트리 기반 딥러닝 접근법과 비교해 어떻게 성능을 내는가?
  • RQ4구조적 재정렬, 문장 교체, 라이브러리 사용 등의 코드 변형 유형이 CFG 기반 모델과 트리 기반 모델의 성능에 어떤 영향을 미치는가?

주요 결과

  • 제안된 DGCNN 기반 방법은 네 개의 실제 데이터셋에서 최고의 특징 기반 베이스라인 대비 정확도를 최대 15.49% 향상시켰다.
  • 트리 기반 딥러닝 접근법 대비 AUC를 최대 12.39% 향상시켜 더 뛰어난 분류 능력을 입증했다.
  • SibStCNN 및 TBCNN과 같은 트리 기반 모델은 AST 크기가 커질수록 성능 저하를 보였으며, 특히 SUMTRIAN 데이터셋의 복잡한 프로그램에서 두드러졌다.
  • CFG 기반 접근법은 문장 재정렬이나 변수 선언 위치 변경과 같은 문법적 변형에 더 강건했으며, 이러한 변형은 AST의 구조를 크게 변화시키지만 CFG에는 최소한의 영향을 미쳤다.
  • 외부 라이브러리 함수(예: __gcd)를 포함한 코드는 소스 코드가 누락되어 CFG에 포함되지 않아 모델이 잘못 분류하는 경향을 보였다.
  • 라이브러리 호출에 대한 한계가 있음에도 불구하고, 모든 평가 지표에서 CFG-DGCNN 모델의 전체 성능는 특징 기반 및 트리 기반 베이스라인을 일관되게 뛰어넘었다.

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

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

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

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