一句话:提出 FlakeScanner,通过探索事件顺序检测 Android 应用中的 flaky test,并发布 FlakyAppRepo 数据集。
Android 应用测试因非确定性执行环境而存在 flaky test:同一事件序列可能时而成功时而失败。本文提出 FlakeScanner,通过探索事件顺序检测 flaky test。方法观察到测试涉及测试框架线程、主 UI 线程和异步后台线程;对执行中涉及潜在非确定性的事件 e,先定位其必须发生的最早/最晚边界事件,再在边界事件之间高效探索调度,并将同一语句内的事件分组,以判断测试结果是否 flaky。作者还构建了包含 33 个常用 Android 项目的 FlakyAppRepo。实验在 52 个已知 flaky test 中检测出 45 个,并在 1444 个测试中发现 245 个未知 flaky test。
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 FlakeScanner for detecting flaky tests through 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 FlakyAppRepo (containing 33 widely-used Android projects) to study flaky tests in Android apps. Our experiments on the subject-suite FlakyAppRepo show FlakeScanner detected 45 out of 52 known flaky tests as well as 245 previously unknown flaky tests among 1444 tests.