Skip to main content
QUICK REVIEW

[논문 리뷰] Enhancing Symbolic Execution of Heap-based Programs with Separation Logic for Test Input Generation

Long Hoang Pham, Quang Loc Le|arXiv (Cornell University)|2017. 12. 16.
Software Testing and Debugging Techniques참고 문헌 37인용 수 3
한 줄 요약

이 논문은 힙 기반 프로그램을 대상으로 분리 논리( separation logic )를 사용하여 완전히 초기화되고 유효한 테스트 입력을 생성하는 기호 실행 프레임워크를 제안한다. 문맥에 민감한 지연 초기화를 분리 논리의 사전조건과 통합함으로써, 잘못된 입력을 제거하고 경로 폭발을 줄이며 평가에서 평균 98.98%의 브랜치 커버리지 달성.

ABSTRACT

Symbolic execution is a well established method for test input generation. Despite of having achieved tremendous success over numerical domains, existing symbolic execution techniques for heap-based programs are limited due to the lack of a succinct and precise description for symbolic values over unbounded heaps. In this work, we present a new symbolic execution method for heap-based programs based on separation logic. The essence of our proposal is context-sensitive lazy initialization, a novel approach for efficient test input generation. Our approach differs from existing approaches in two ways. Firstly, our approach is based on separation logic, which allows us to precisely capture preconditions of heap-based programs so that we avoid generating invalid test inputs. Secondly, we generate only fully initialized test inputs, which are more useful in practice compared to those partially initialized test inputs generated by the state-of-the-art tools. We have implemented our approach as a tool, called Java StarFinder, and evaluated it on a set of programs with complex heap inputs. The results show that our approach significantly reduces the number of invalid test inputs and improves the test coverage.

연구 동기 및 목표

  • 기존 기호 실행 도구가 힙 기반 프로그램의 유효한 테스트 입력을 생성하는 데 한계를 보이는 문제를 해결하기 위해.
  • 지연 초기화에서 힙 객체 선택을 명시적으로 나열함으로써 발생하는 경로 폭발을 줄이기 위해.
  • 분리 논리에 의한 정밀한 힙 사양을 활용하여 부분적으로 초기화되거나 유효하지 않은 테스트 입력을 제거하기 위해.
  • 복잡한 데이터 구조물에 대해 의미 있는 테스트 입력을 생성함으로써 테스트 커버리지와 효율성을 향상시키기 위해.
  • 실제 Java 프로그램의 가변 힙 구조를 갖는 실용적이고 확장 가능한 기호 실행 프레임워크를 제공하기 위해.

제안 방법

  • 이 방법은 분리 논리, 존재 기술 변수, 인도적 술어, 산술을 조합한 논리를 사용하여 힙 사전조건을 정밀하게 기술한다.
  • 기본적으로 분리 논리 사전조건을 만족하는 상태만 탐색하는 문맥에 민감한 지연 초기화를 도입한다.
  • 최소 고정점 분석을 사용하여 잘못된 상태를 나열하지 않고도 유효한 힙 구성 상태를 계산한다.
  • 이 방법은 후처리에서 구체화가 필요 없이 오직 완전히 초기화된 테스트 입력만 생성한다.
  • 프레임워크는 Java bytecode를 분석하기 위해 Symbolic PathFinder 위에 구축된 Java StarFinder로 구현된다.
  • 분리 논리 공식을 사용하여 기호 실행을 이끌고 소스 수준에서 잘못된 경로를 잘라낸다.

실험 결과

연구 질문

  • RQ1분리 논리는 어떻게 힙 입력 구조를 정밀하게 명시하고 잘못된 테스트 입력 생성을 줄일 수 있는가?
  • RQ2분리 논리 사전조건에 기반한 문맥에 민감한 지연 초기화가 경로 폭발과 잘못된 입력을 제거할 수 있는가?
  • RQ3기존 기호 실행 대비 분리 논리를 사용할 경우 테스트 커버리지 향상 정도는 어느 정도인가?
  • RQ4이 방법은 복잡하고 가변적인 힙 기반 데이터 구조물에 대해 완전히 초기화된 테스트 입력을 얼마나 효과적으로 생성하는가?
  • RQ5기호 실행과 분리 논리를 통합하면 무한대의 힙 구조를 갖는 실세계 프로그램에 대해 확장 가능한가?

주요 결과

  • 제안된 방법은 최신 기술 도구 대비 잘못된 테스트 입력의 수를 크게 줄였다.
  • Java StarFinder는 복잡한 힙 기반 Java 프로그램 세트에서 평균 98.98%의 브랜치 커버리지를 달성했다.
  • 모든 생성된 테스트 입력은 완전히 초기화되어 있었으며, 후처리 구체화가 필요 없었다.
  • 분리 논리 사전조건의 사용은 힙 조각에 대한 정밀하고 국소적인 추론을 가능하게 하여 전반적인 추론 복잡도를 피했다.
  • 모든 가능한 힙 객체 바인딩을 명시적으로 나열하는 것을 피함으로써 이전 방법보다 우수한 성능을 보였다.
  • 기호 실행과 분리 논리의 통합은 실세계 프로그램에 대해 확장성과 실용성을 입증했다.

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

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

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

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