This repository contains artifacts for VET: Identifying and Avoiding UI Exploration Tarpits, published at ESEC/FSE 2021.
VET stands for veterinarian. Think about tool names in our experiments: Monkey and Ape.
We're in the process of populating this repository. If you don't see something you're looking for, please check back later.
We assume that you are using a Unix-like environment throughout this guide. All experiments were conducted on Ubuntu 16.04.
- For Exploration Space Partition regions, VET prevents the action that is observed immediately before the region on the trace, by instructing TOLLER to disable the UI element on which the action is exerted during testing.
- For Excessive Local Exploration regions, apart from the action disablement, VET additionally finds the most frequently occurring screen in each region, and instructs TOLLER to restart the target app when the screen is observed during testing.
- Additionally, TOLLER automatically restarts the target app when no action is observed within 30 seconds to cover the cases where the tool stops working (such situations cannot be covered using techniques from the first two points).
All raw traces (UI hierarchies + actions) are available here.
Each Bzip2 tarball represents data for a single trace, with filenames in the form of {TOOL_NAME}-{APP_NAME}-{RUN_ID}.tar.bz2
. The {RUN_ID}
is encoded in the following fashion:
1
,2
, and3
: the initial runs for each tool-app pair.4
,5
, and6
: the comparison runs, using exactly the same settings as initial runs.vXdY
: VET-enhanced runs by addressing top-X
ranked regions on the respective tool-app pair. These regions are all from initial runs.Y
is any of1
,2
, and3
.
Within each trace the meanings of files are as follows:
./{TIMESTAMP}.json
represents the full UI hierarchy of each screen in the trace. Within each file:- Each JSON object is a UI element. Child elements are stored as JSON arrays in the
ch
field. - The UI element that the tool acts on is marked with
is_source: true
. Note that it is possible to act without involving any UI element (e.g., pressing Back on the device). act_id
denotes Activity ID.ua_type
denotes what kind of action triggers TOLLER to record this step. The values have the following meanings:- 0: short click
- 1: long click
- 2: touch
- 3: context click
- 7: menu click
- 100: back
en
: whether the UI element is enabled.vclk
,vlclk
,vcclk
: class names of short click handlers, long click handlers, and context click handlers, respectively. If one field is not present for some object, the corresponding UI element does not respond to the corresponding event.bound
: UI element boundary.class
: Class name of the type of the UI element.ucls
: Unified class name, must be a super class ofandroid.view.View
, either starts withandroid.widget.
or isandroid.webkit.WebView
. Might not exist in some cases.id
: Resolved resource ID in strings if the UI element has one.idn
: Resource ID in numbers,-1
if the UI element does not have an associated resource ID.hash
: Internal unique representation of the object supporting the corresponding UI element in the app's internal UI data structures.
- Each JSON object is a UI element. Child elements are stored as JSON arrays in the
./crash.log
: Logcat entries that capture the app's crash logs../tool.log
: logs produced by the testing tool../minitrace/cov-{TIMESTAMP}.log
: Coverage information produced by MiniTrace throughout the test run.
Additionally, regions.tar.bz2
contains JSON files recording VET's identified exploration tarpit regions. Each file is in the form of {TOOL_NAME}-{APP_NAME}-{RUN_ID}.json
. The format of these files is explained as follows:
- When
{RUN_ID}
is any of1
,2
,3
, the JSON file contains a list of region start timestamps and end timestamps. - When
{RUN_ID}
istop3
, wheretop3
indicates the aggregated results for all three traces from the initial runs of the tool-app pair, the file contains a list of list-of-actions to address the identified regions, sorted by the ranks of regions. Each list-of-action is a JSON array of strings, each being in the following form:{TOOL_NAME}-{APP_NAME}-{RUN_ID}/{TIMESTAMP}.json
: disable the UI element involved in this step in enhanced runs. If no UI element is involved in this step, restart the app when this screen is seen during enhanced runs.!{TOOL_NAME}-{APP_NAME}-{RUN_ID}/{TIMESTAMP}.json
: Simply restart the app when this screen is seen during enhanced runs.
See here for all screenshots. Each gzipped tarball corresponds to one trace and contains multiple JPEG files with names in the format of {TIMESTAMP}.jpg
, corresponding to the UI hierarchy in {TIMESTAMP}.json
.
Please see this repo for TOLLER's on-device agent.
Available here. If you want to record traces during testing using TOLLER's experiment framework, place this repo in the test-recorder
folder in the root directory of TOLLER's repo.
See this repo for our modified version of minicap, which efficiently captures screenshots along with traces. We added timestamps in its output for better synchronization.
If you want to record screenshots during testing using TOLLER's experiment framework, place and build this repo in the minicap
folder in the root directory of TOLLER's repo.
Please see here for the emulator image and configurations.
Please see useful-scripts-vet/. If you want to use these scripts with TOLLER's experiment framework, place this folder in the root directory of TOLLER's repo.
See here for all APKs.
Please direct your questions to Wenyu Wang.