Skip to main content
QUICK REVIEW

[논문 리뷰] Inferring Concise Specifications of APIs

John L. Singleton, Gary T. Leavens|arXiv (Cornell University)|2019. 01. 01.
Software Testing and Debugging Techniques참고 문헌 48인용 수 2
한 줄 요약

이 논문은 강력한 후조건(Strongest Postcondition, SP) 추론기법으로 생성된 지수적 크기의 공식을 변환하여 Java API 메서드에 대해 간결하고 인간이 읽을 수 있는 후조건을 유추하는 새로운 기법을 제시한다. SP 출력물의 구조적 패턴을 활용함으로써, 증명 길이에서 최대 76.7% 감소, 증명 도구 실행 시간에서 26.7% 감소를 달성하였으며, 7개 라이브러리의 2,300개 이상 메서드에서 75.7%의 성공률을 기록하였고, 84.6%의 사양은 20라인 이내로 간결하게 유지되었다.

ABSTRACT

Modern software relies on libraries and uses them via application programming interfaces (APIs). Correct API usage as well as many software engineering tasks are enabled when APIs have formal specifications. In this work, we analyze the implementation of each method in an API to infer a formal postcondition. Conventional wisdom is that, if one has preconditions, then one can use the strongest postcondition predicate transformer (SP) to infer postconditions. However, SP yields postconditions that are exponentially large, which makes them difficult to use, either by humans or by tools. Our key idea is an algorithm that converts such exponentially large specifications into a form that is more concise and thus more usable. This is done by leveraging the structure of the specifications that result from the use of SP. We applied our technique to infer postconditions for over 2,300 methods in seven popular Java libraries. Our technique was able to infer specifications for 75.7% of these methods, each of which was verified using an Extended Static Checker. We also found that 84.6% of resulting specifications were less than 1/4 page (20 lines) in length. Our technique was able to reduce the length of SMT proofs needed for verifying implementations by 76.7% and reduced prover execution time by 26.7%.

연구 동기 및 목표

  • 형식 검증 및 소프트웨어 공학 작업에 필수적인, 사용 가능한 형식 후조건을 생성하는 데 도전하는 것.
  • 인간의 이해와 도구 사용에 부적합하게 지수적으로 부풀어 오르는 강력한 후조건(SP) 공식의 문제를 해결하는 것.
  • 정밀도를 잃지 않으면서도 압축되고 읽기 쉬우며 의미적으로 동일한 사양으로 SP로 생성된 공식을 변환하는 방법을 개발하는 것.
  • 실제 Java 라이브러리에서 형식 검증을 통해 유추된 후조건의 실용성과 효과성을 평가하는 것.
  • 사용성에 장애가 되는 중복, 타투로지컬 또는 만족불가 조건을 식별하고 제거하는 것.

제안 방법

  • 메서드 본문으로부터 초기 논리 공식을 생성하기 위해 정방향 기호 실행과 함께 강력한 후조건(SP) 추론기법을 사용한다.
  • SP로 생성된 공식에 대해 구조적 패턴(예: 상호배타적 조건문, 공통 부분식 등)을 활용하여 재귀적 중복을 제거하는 최적화 규칙을 적용한다.
  • 의미적으로 동일한 표현을 식별하고 통합하기 위해 교환 가능 관계(∼)를 플러그인 방식으로 적용함으로써 브랜치 수준을 초월한 전역 최적화를 가능하게 한다.
  • 프레임 공리와 순수성/할당 가능(clause)을 통합하여 메모리 안전성 의미를 유지하면서도 문장의 길이를 최소화한다.
  • 검증된 사양을 위해 Z3를 SMT 해석기로 사용하며, OpenJML에 확장 기능으로 구현된 기법이다.
  • 이 기법은 Strongarm 도구로 구현되어 체계적으로 압축되고 인간이 읽을 수 있는 JML 스타일 사양을 생성한다.

실험 결과

연구 질문

  • RQ1SP로 생성된 후조건을 의미 정확도를 유지하면서 체계적으로 단순화하여 간결하고 사용 가능한 사양으로 만들 수 있는가?
  • RQ2SP 공식 내의 구조적 패턴을 얼마나 효과적으로 활용하여 사양 크기 감소와 가독성 향상을 이룰 수 있는가?
  • RQ3실제 API 메서드에서 제안된 최적화 기법이 증명 크기와 증명 도구 실행 시간을 얼마나 효과적으로 줄이는가?
  • RQ4실제 API 메서드 중 이 기법을 성공적으로 적용할 수 있는 비율은 얼마이며, 결과로 도출된 사양은 얼마나 간결한가?
  • RQ5개발자들은 일반적인 악성 패턴(예: 타투로지, 중복, 만족불가 전제 조건)을 피한 간결하고 비중복적이며 비타투로지컬인 사양을 얼마나 선호하는가?

주요 결과

  • 7개의 인기 있는 Java 라이브러리에 속한 2,300개 이상의 메서드 중 75.7%에 대해 성공적으로 후조건을 유추하였으며, OpenJML의 확장 정적 체크어플리케이션을 통해 모두 정확하게 검증되었다.
  • 유추된 후조건의 84.6%는 1/4 페이지(20라인) 이내로 간결하게 유지되어 높은 압축성을 보였다.
  • 검증을 위해 필요한 SMT 증명의 길이가 평균 76.7% 감소하여 확장성 향상 효과가 뚜렷했다.
  • 증명 도구 실행 시간은 평균 26.7% 감소하여 후속 도구의 성능 향상을 입증했다.
  • 모든 유추된 사양에 순수성 또는 할당 가능 조건이 포함되어 있어 메모리 안전성 모델링에 강력한 지원이 이루어졌음을 시사했다.
  • 개발자 설문 조사 결과, 일반적인 악성 패턴을 피한 간결하고 비중복적이며 비타투로지컬인 사양을 강력히 선호하는 것으로 확인되었다.

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

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

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

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