Charting the API minefield using software telemetry data
Programs draw significant parts of their functionality through the use of Application Programming Interfaces ( API s). Apart from the way developers incorporate API s in their software, the stability of these programs depends on the design and implementation of the API s. In this work, we report how...
Gespeichert in:
Veröffentlicht in: | Empirical software engineering : an international journal 2015-12, Vol.20 (6), p.1785-1830 |
---|---|
Hauptverfasser: | , , |
Format: | Artikel |
Sprache: | eng |
Schlagworte: | |
Online-Zugang: | Volltext |
Tags: |
Tag hinzufügen
Keine Tags, Fügen Sie den ersten Tag hinzu!
|
Zusammenfassung: | Programs draw significant parts of their functionality through the use of Application Programming Interfaces (
API
s). Apart from the way developers incorporate
API
s in their software, the stability of these programs depends on the design and implementation of the
API
s. In this work, we report how we used software telemetry data to analyze the causes of
API
failures in Android applications. Specifically, we got 4.9
gb
worth of crash data that thousands of applications sent to a centralized crash report management service. We processed that data to extract approximately a million stack traces, stitching together parts of chained exceptions, and established heuristic rules to draw the border between applications and the
API
calls. We examined a set of more than a half million stack traces associated with risky
API
calls to map the space of the most common application failure reasons. Our findings show that the top ones can be attributed to memory exhaustion, race conditions or deadlocks, and missing or corrupt resources. Given the classes of the crash causes we identified, we recommend
API
design and implementation choices, such as specific exceptions, default resources, and non-blocking algorithms, that can eliminate common failures. In addition, we argue that development tools like memory analyzers, thread debuggers, and static analyzers can prevent crashes through early code testing and analysis. Finally, some execution platform and framework designs for process and memory management can also eliminate some application crashes. |
---|---|
ISSN: | 1382-3256 1573-7616 |
DOI: | 10.1007/s10664-014-9343-7 |