Skip to main content
QUICK REVIEW

[논문 리뷰] Mimicking Production Behavior with Generated Mocks

Deepika Tiwari, Martin Monperrus|arXiv (Cornell University)|2022. 08. 02.
Software Engineering Research인용 수 5
한 줄 요약

이 논문은 실제 생산 환경 실행을 모니터링하여 모의 기반 오라클을 사용해 현실적인 단위 테스트를 생성하는 오픈소스 도구 rick을 제안한다. 대상 메서드를 인스트루먼트하고, 입력, 반환값, 상호작용을 포함한 맥락 데이터를 캡처한 후, 이 데이터를 바탕으로 생산 환경의 동작을 52.4%의 성공률로 재현하는 실행 가능한 테스트를 생성한다.

ABSTRACT

Mocking allows testing program units in isolation. A developer who writes tests with mocks faces two challenges: design realistic interactions between a unit and its environment; and understand the expected impact of these interactions on the behavior of the unit. In this paper, we propose to monitor an application in production to generate tests that mimic realistic execution scenarios through mocks. Our approach operates in three phases. First, we instrument a set of target methods for which we want to generate tests, as well as the methods that they invoke, which we refer to as mockable method calls. Second, in production, we collect data about the context in which target methods are invoked, as well as the parameters and the returned value for each mockable method call. Third, offline, we analyze the production data to generate test cases with realistic inputs and mock interactions. The approach is automated and implemented in an open-source tool called RICK. We evaluate our approach with three real-world, open-source Java applications. RICK monitors the invocation of 128 methods in production across the three applications and captures their behavior. Based on this captured data, RICK generates test cases that include realistic initial states and test inputs, as well as mocks and stubs. All the generated test cases are executable, and 52.4% of them successfully mimic the complete execution context of the target methods observed in production. The mock-based oracles are also effective at detecting regressions within the target methods, complementing each other in their fault-finding ability. We interview 5 developers from the industry who confirm the relevance of using production observations to design mocks and stubs. Our experimental findings clearly demonstrate the feasibility and added value of generating mocks from production interactions.

연구 동기 및 목표

  • 단위 테스트를 위한 현실적인 모의 객체와 테스트 입력을 생성하는 데 도전하는 문제를 해결하기 위해, 실제 시스템 동작이 아닌 가정에 기반한 경우가 많은 문제를 해결한다.
  • 실제 생산 환경 상호작용을 반영하지 못할 수 있는 합성 또는 수동으로 설계된 모의 객체의 한계를 극복한다.
  • 외부 종속성과의 상호작용을 검증하는 오라클을 생성하기 위해 실제 세계 실행 데이터를 활용해 테스트의 효과성을 향상시킨다.
  • 개발자가 실제로 생산 환경에서 관찰한 맥락과 동작을 유지하는 자동화된 실행 가능한 테스트 생성을 가능하게 한다.
  • 개발자들이 실제 사용 패턴을 반영한 테스트 케이스를 제공하여, 회귀 테스트 탐지 능력과 테스트 유지보수성을 향상시킨다.

제안 방법

  • 생산 환경에서 대상 메서드와 그 종속성(모의 가능 메서드 호출)을 인스트루먼트하여 런타임 데이터 수집을 수행한다.
  • 생산 실행 중에 메서드 매개변수, 반환값, 호출 순서와 같은 맥락 데이터를 모니터링하고 로그로 기록한다.
  • 오프라인에서 캡처된 데이터를 분석하여 현실적인 초기 상태, 입력값, 스텁 모의 객체를 포함한 테스트 케이스를 생성한다.
  • 메서드 상호작용을 검증하기 위해 출력 오라클(OO), 매개변수 오라클(PO), 호출 순서 오라클(CO)의 세 가지 유형의 모의 기반 오라클을 구성한다.
  • 생산 환경에서 복잡한 객체 상태를 직렬화하여 단위 테스트에서 현실적인 테스트 환경을 재현한다.
  • 오픈소스 rick 도구를 사용해 인스트루먼트에서 테스트 생성에 이르는 전체 파이프라인을 자동화한다.

실험 결과

연구 질문

  • RQ1RQ1: rick은 관찰된 생산 환경 동작을 실행 가능한 테스트 케이스로 성공적으로 변환할 수 있는가?
  • RQ2RQ2: 캡처된 생산 환경 데이터가 생성된 테스트에서 현실적인 입력값, 모의 객체, 오라클로 표현되는 정도는 어느 정도인가?
  • RQ3RQ3: 생성된 테스트는 생산 환경에서 관찰된 전체 실행 맥락을 얼마나 잘 재현하는가?
  • RQ4RQ4: 세 가지 모의 기반 오라클(OO, PO, CO)은 회귀 버그를 탐지하는 데 얼마나 효과적인가, 상호보완적인가?
  • RQ5RQ5: 전문 개발자들이 생성된 테스트와 오라클을 관련성 있고 이해하기 쉬운 것으로 평가하는가?

주요 결과

  • rick는 세 개의 실제 오픈소스 자바 애플리케이션에서 128개의 대상 메서드에 대해 총 294개의 테스트 케이스를 성공적으로 생성했다.
  • 생성된 테스트 중 52.4%가 실제 생산 환경에서 관찰된 전체 실행 맥락을 성공적으로 재현하였으며, 이는 현실적인 입력값, 모의 객체, 오라클을 포함한다.
  • 출력(OO), 매개변수(PO), 호출 순서(CO)의 세 가지 모의 기반 오라클은 대상 메서드 내에서 회귀 버그 탐지에 상호보완적으로 기여한다.
  • 다섯 명의 전문 개발자가 실시한 정성적 설문 조사에서 생성된 테스트는 관련성 있고 이해하기 쉽다고 평가되었다.
  • 이 방법은 캡처-재생 기법이 암묵적 오라클에 의존하는 것과 달리, 직접적으로 생산 환경 동작에서 파생된 명시적 오라클을 갖춘 자동 실행 가능한 테스트를 생성할 수 있도록 한다.
  • 본 연구는 생산 환경 데이터로부터 고립되고 현실적인 단위 테스트를 생성하는 것이 가능함을 입증하며, 개발자의 가정과 실제 시스템 동작 사이의 격차를 메운다.

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

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

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

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