Empirical Study

In our empirical study, we studied 220 real-world FIC issues to:

  1. Understand the FIC issue types and root causes (Issue type and root cause).
  2. Identify the common symptoms of the FIC issues (Issue symptom).
  3. Understand how app developers fix FIC issues and identify common patches (Issue fixing).
We release the data set of our empirical study for research purposes. Should you find any inconsistencies or errors please contact us. We may modify the data set accordingly.

Subject Apps

We collected five subject Android apps from three open source Android app hosting websites: Google Code, F-Droid, GitHub. The 5 subjects were selected from 27 candidate apps (Download the full list). We collected 220 FIC issues from the subject apps. The information of the subject apps is as follows:


App Name Category Rating Downloads KLOC # FIC Issues
CSipSimple Communication 4.3/5.0 1M - 5M 59.3 80
AnkiDroid Education 4.5/5.0 1M - 5M 50.8 44
K-9 Mail Communication 4.2/5.0 5M - 10M 93.7 40
VLC Media & Video 4.4/5.0 10M - 50M 151.1 36
AnySoftKeyboard Tools 4.4/5.0 1M - 5M 38.9 20

Detailed information of the data set in our empirical study: Download

The dataset is updated with 31 more recent FIC issues that were not included in the ASE paper

We highlight some key findings of our empirical study. For more information, please refer to our research paper.

Issue Type and Root Cause

We categorized the FIC issues into two types: device-specific and non-device-specific issues.

Summary: We observed two types and five major root causes of FIC issues in Android apps, of which the platform API evolution and problematic hardware drive implementation are most prominent. It is challenging to ensure app compatibility on various device models with diverse software and hardware environments.

Issue Symptom

Summary: FIC issues can cause both functional and non-functional consequences such as app crashing, app not functioning, performance and user experience degradation. Their symptoms can be app-specific, making it difficult to define oracles in compatibility testing.

Issue Fix

Common Patching Patterns

We studied the common patching patterns of the FIC issues:

  1. Device information checking: The majority (70.0%) of the issues are fixed by adding a guarding condition to check the device information (device model, API level, device brand, etc.) before the invocation of an issue-inducing API.
  2. Component availability checking: Some (6.4%) of the issues are fixed by checking the availability of certain software or hardware component before the invocation of a issue-inducing API.
The rest of the issues in our data set are fixed by some specific workarounds, which do not exhibit common patterns.

Patching Complexity

The patch of FIC issues are usually simple and of small size. However, identifying the valid patch is a difficult task. As the causes of FIC issues lie on the device side, without adequate information, it is difficult to locate the root cause and fix FIC issues.

Summary: Locating the root cause of FIC issues is difficult in practice. Whereas, issue fixes are usually simple and demonstrate common patterns: checking device information and availability of software/hardware components before invoking issue-inducing APIs/methods.

Interview and Survey Design

We conducted interviews with five experienced Android practitioners and an online survey among over 200 Android developers to learn common challenges and practices in real practices.

Survey information can be found on call for participation page.

The interview questions are available: interview questions