Skip to main content
QUICK REVIEW

[논문 리뷰] Automatic Repair of Infinite Loops

Sebastian R. Lamelas Marcote, Martin Monperrus|arXiv (Cornell University)|2015. 04. 20.
Software Testing and Debugging Techniques참고 문헌 14인용 수 13
한 줄 요약

이 논문은 동적 루프 인스트루멘테이션을 사용해 반복 횟수와 런타임 상태를 모니터링하고, 만족 가능성 모듈로 이론(SMT) 해결을 통해 정확한 루프 조건을 합성함으로써 무한 루프를 자동으로 수정하는 기법 $\mathit{Infinitel}$을 제시한다. 표준 하드웨어에서 1초에서 1시간 이내로 7개의 시드된 버그와 7개의 실제 무한 루프 버그를 성공적으로 수정하였다.

ABSTRACT

Research on automatic software repair is concerned with the development of systems that automatically detect and repair bugs. One well-known class of bugs is the infinite loop. Every computer programmer or user has, at least once, experienced this type of bug. We state the problem of repairing infinite loops in the context of test-suite based software repair: given a test suite with at least one failing test, generate a patch that makes all test cases pass. Consequently, repairing infinites loop means having at least one test case that hangs by triggering the infinite loop. Our system to automatically repair infinite loops is called $Infinitel$. We develop a technique to manipulate loops so that one can dynamically analyze the number of iterations of loops; decide to interrupt the loop execution; and dynamically examine the state of the loop on a per-iteration basis. Then, in order to synthesize a new loop condition, we encode this set of program states as a code synthesis problem using a technique based on Satisfiability Modulo Theory (SMT). We evaluate our technique on seven seeded-bugs and on seven real-bugs. $Infinitel$ is able to repair all of them, within seconds up to one hour on a standard laptop configuration.

연구 동기 및 목표

  • 소프트웨어 버그의 높은 유지보수 비용을 해결하기 위해, 일반적이고 파괴적인 결함 유형인 무한 루프를 자동으로 수정할 수 있도록 하는 것.
  • 무한 루프의 구조적 및 행동적 특성에 기반해 일반적인 수리 도구와는 다름없는 특화된 수리 방법을 개발하는 것.
  • 정상 통과 테스트 케이스의 정확성을 유지하면서도 멈추지 않는 테스트 케이스를 정지시키는 올바른 루프 조건을 자동으로 합성하는 것.
  • 기존의 검출 전용 또는 런타임 회피 기반 접근 방식의 한계를 극복하기 위해 정적이고 오프라인 수리 솔루션을 제공하는 것.
  • 실제 프로그램과 시드된 버그 시나리오에서 SMT 기반 코드 합성을 통한 무한 루프 수리의 가능성과 효과성을 평가하는 것.

제안 방법

  • 각 반복 단위에서 반복 횟수, 실행 상태, 변수 값 등을 동적으로 추적할 수 있도록 소스 코드를 인스트루멘테이션하는 것.
  • 런타임 분석을 통해 무한 루프를 유발하는 멈춘 테스트 케이스를 식별하고 실행 추적을 수집하는 것.
  • 수집된 런타임 상태를 만족 가능성 모듈로 이론(SMT) 해결을 위한 제약 조건 집합으로 표현하는 것.
  • 수리 작업을 루프 조건을 새로 생성함으로써 종료성과 정확성을 보장하는 코드 합성 문제로 공식화하는 것.
  • 모든 테스트 케이스가 통과하고 루프가 정지하도록 보장하는 SMT 솔버를 사용해 새로운 루프 가드 조건을 합성하는 것.
  • 합성된 조건을 원본 코드에 통합하여 정확한 패치를 생성하는 것.

실험 결과

연구 질문

  • RQ1테스트 셋 기반 수리에 동적 인스트루멘테이션과 SMT 기반 합성을 사용해 무한 루프를 자동으로 수정할 수 있는가?
  • RQ2제안된 방법은 실제 무한 루프 버그에 대해 시드된 버그보다 얼마나 효과적인가?
  • RQ3스펙트럼 기반 결함 로컬라이제이션이나 변형 연산자에 의존하지 않고도 무한 루프를 탐지하고 수정할 수 있는가?
  • RQ4실제 프로그램에서 동적 인스트루멘테이션과 SMT 해결 파이프라인의 성능 오버헤드와 확장성은 어떠한가?
  • RQ5무한 루프를 초월해 잘못된 루프 경계와 같은 다른 루프 관련 결함에도 이 기법이 일반화될 수 있는가?

주요 결과

  • $\mathit{Infinitel}$은 표준 랩탑에서 1초에서 1시간 이내로 7개의 시드된 버그와 7개의 실제 무한 루프 버그를 모두 성공적으로 수정하였다.
  • 동적 인스트루멘테이션 기법은 반복 간 루프 상태를 정밀하게 모니터링할 수 있게 해 무한 루프 유발 요인을 정확히 탐지할 수 있었다.
  • SMT 기반 합성은 모든 테스트 케이스에서 종료성과 정확성을 보장하는 정확한 루프 조건 패치를 생성하였다.
  • 단순히 루프를 회피하는 것이 아니라 의미적 패치를 생성하기 때문에, $\mathit{Jolt}$와 $\mathit{NoPol}$과 같은 검출 전용 도구보다 뛰어난 성능을 보였다.
  • 다양한 프로그램에서 뛰어난 강건성을 보였으며, grep 명령어의 무한 루프 수정과 같은 실제 사례에서도 유용했다.
  • 익명 클래스와 중첩 루프 구조를 포함한 복잡한 케이스에서도 효과적이었지만, 인스트루멘테이션 중 필드 접근 시 일부 제한점이 존재한다.

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

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

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

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