Skip to main content
QUICK REVIEW

[논문 리뷰] Concurrency-related Flaky Test Detection in Android apps

Zhen Dong, Abhishek Tiwari|arXiv (Cornell University)|2020. 05. 21.
Software Testing and Debugging Techniques참고 문헌 27인용 수 11
한 줄 요약

이 논문은 Android 앱에서 UI 스레드와 백그라운드 스레드 간의 실행 가능한 이벤트 순서를 체계적으로 탐색함으로써 동시성 관련 테스트의 불안정성(플래키 테스트)을 사전에 탐지하는 도구인 FlakeScanner을 제시한다. 이벤트 스케줄링 경계를 분석하고 문장별로 이벤트를 그룹화함으로써, 기존에 알려진 사례 외에도 245개의 새로운 플래키 테스트를 발견한 FlakyAppRepo 테스트 세트에서 높은 효과를 입증한다.

ABSTRACT

Validation of Android apps via testing is difficult owing to the presence of flaky tests. Due to non-deterministic execution environments, a sequence of events (a test) may lead to success or failure in unpredictable ways. In this work, we present an approach and tool FlakeShovel for detecting flaky tests through systematic exploration of event orders. Our key observation is that for a test in a mobile app, there is a testing framework thread which creates the test events, a main User-Interface (UI) thread processing these events, and there may be several other background threads running asynchronously. For any event e whose execution involves potential non-determinism, we localize the earliest (latest) event after (before) which e must happen.We then efficiently explore the schedules between the upper/lower bound events while grouping events within a single statement, to find whether the test outcome is flaky. We also create a suite of subject programs called DroidFlaker to study flaky tests in Android apps. Our experiments on subject-suite DroidFlaker demonstrate the efficacy of our flaky test detection. Our work is complementary to existing flaky test detection tools like Deflaker which check only failing tests. FlakeShovel can detect flaky tests among passing tests, as shown by our approach and experiments.

연구 동기 및 목표

  • 플래키 테스트가 회귀 테스팅의 신뢰성과 개발자 생산성을 떨어뜨리는 심각한 문제를 해결하기 위해.
  • 일반적인 실행에서 통과하지만 특정 비결정적 실행 순서에서는 실패하는 플래키 테스트를 사전에 탐지하기 위해.
  • 기존 도구인 DeFlaker와 같이 실패하는 테스트만 분석하는 데에 국한되어 있어 통과하는 플래키 테스트를 놓치는 한계를 극복하기 위해.
  • 실제 Android 애플리케이션에서 플래키 테스트 행동을 연구하기 위해, FlakyAppRepo라는 종합적인 벤치마크 세트를 구축하기 위해.
  • 완전하지 않은 happens-before 관계에 의존하는 방법에 비해 거짓 경고를 줄이기 위해 정밀한 이벤트 종속성과 시스템 수준의 동적 분석을 제공하기 위해.

제안 방법

  • FlakeScanner는 Android의 단일 UI 스레드와 비동기 백그라운드 스레드를 모델링하여 각 테스트 이벤트의 이벤트 스케줄링 경계를 식별한다.
  • 비결정적일 수 있는 각 이벤트에 대해 스레드 종속성에 기반하여 반드시 이전 또는 이후에 실행되어야 할 최소 및 최대 이벤트를 계산한다.
  • 이 경계 내에서 이벤트 순서를 체계적으로 탐색하고, 동일한 문장에서 온 이벤트를 그룹화하여 상태 공간을 줄인다.
  • 도구는 다양한 실행 환경을 시뮬레이션하기 위해 동적 분석을 사용하여, 어떤 이벤트 순서가 테스트 실패로 이어지는지 탐지한다.
  • 에스프레소 테스팅 프레임워크의 이벤트 큐 세미틱스를 활용하여 현실적인 스레드 혼합 및 이벤트 경쟁 상황을 모델링한다.
  • 이 방법은 FlakyAppRepo라는, 평균 2.5k개의 GitHub 스타를 확보한 28개의 유명한 Android 앱으로 구성된 정제된 테스트 세트를 함께 구축함으로써 보완된다.

실험 결과

연구 질문

  • RQ1표준 실행에서 통과하지만 특정 실행 순서에서는 실패하는 동시성 관련 플래키 테스트를 사전 탐지할 수 있는 접근 방식은 가능한가?
  • RQ2기존의 재실행 기반 또는 커버리지 기반 방법에 비해, 이벤트 순서 탐색의 체계적 탐색은 플래키 테스트 탐지에 얼마나 효과적인가?
  • RQ3실제 Android 애플리케이션에서 플래키 테스트의 발생 빈도는 얼마나 높은가, 특히 통과하지만 여전히 불안정한 테스트는 어떤가?
  • RQ4정밀한 이벤트 종속성 모델링은 플래키 테스트 탐지에서 거짓 긍정을 얼마나 줄일 수 있는가?
  • RQ5DeFlaker나 이벤트 레이스 탐지기와 같은 기존 도구에 비해 제안된 방법은 정확도와 확장성 측면에서 어떻게 비교되는가?

주요 결과

  • FlakeScanner는 기존에 알려지지 않은 245개의 플래키 테스트를 FlakyAppRepo 세트에서 성공적으로 탐지하여 숨겨진 불안정성도 발견할 수 있음을 입증했다.
  • 도구는 표준 실행에서 통과하는 테스트들 중에서도 플래키 테스트를 탐지하여, 기존 도구가 실패하는 테스트만 분석하는 데서 벗어나 사전 탐지 능력을 입증했다.
  • 28개의 널리 사용되는 Android 앱(평균 2.5k개의 GitHub 스타)을 포함한 FlakyAppRepo 벤치마크 세트는 플래키 테스트를 연구하기 위한 현실적이고 대표적인 테스트 환경을 제공한다.
  • 연구는 동시성과 비동기 대기 처리가 플래키 테스트의 주요 원인임을 확인하였으며, 이는 이전의 경험적 연구 결과와 일치한다.
  • 정밀한 이벤트 종속성 모델링을 통한 FlakeScanner의 동적 분석은 완전하지 않은 happens-before 관계에 의존하는 방법보다 거짓 긍정을 줄였다.
  • 결과는 플래키 테스트가 널리 퍼져 있다는 것을 보여주며, 회귀 테스팅에서의 통과에서 실패로의 전환의 84%가 플래키 테스트 때문임을 시사하여 사전 탐지의 필요성을 강조한다.

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

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

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

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