Skip to main content
Log in

Charting the API minefield using software telemetry data

  • Published:
Empirical Software Engineering Aims and scope Submit manuscript

Abstract

Programs draw significant parts of their functionality through the use of Application Programming Interfaces (APIs). Apart from the way developers incorporate APIs in their software, the stability of these programs depends on the design and implementation of the APIs. 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.

This is a preview of subscription content, log in via an institution to check access.

Access this article

Price excludes VAT (USA)
Tax calculation will be finalised during checkout.

Instant access to the full article PDF.

Institutional subscriptions

Fig. 1
Fig. 2
Fig. 3
Fig. 4
Fig. 5

Similar content being viewed by others

Notes

  1. http://developer.android.com/reference/packages.html (All URL references have been archived through http://www.webcitation.org/ and the archived URLs can be found in https://github.com/mkechagia/stack-traces.)

  2. http://en.wikipedia.org/wiki/Bugsense. Recently acquired by Splunk Inc. (http://www.splunk.com/)

  3. https://cloud.google.com/appengine/docs/python/datastore/

  4. http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html

  5. Our source codes can be found in: https://github.com/mkechagia/stack-traces. For the cleaning see parsing_st.py file

  6. http://docs.oracle.com/javase/7/docs/technotes/guides/javadoc/doclet/overview.html

  7. http://stackoverflow.com/

  8. http://code.google.com/p/android/issues/list

  9. http://developer.android.com/guide/components/index.html

  10. http://developer.android.com/guide/components/processes-and-threads.html

  11. http://developer.android.com/tools/debugging/ddms.html

  12. http://www.eclipse.org/mat/

  13. http://docs.oracle.com/javase/6/docs/technotes/tools/share/jhat.html

  14. http://developer.android.com/tools/debugging/debugging-tracing.html

  15. http://developer.android.com/tools/help/systrace.html

  16. http://www.ej-technologies.com/products/jprofiler/overview.html

  17. http://docs.oracle.com/cd/E19830-01/819-4721/beafp/index.html

  18. http://www-03.ibm.com/systems/z/os/zos/features/unix/tools/jinsightlive.html

  19. http://tools.android.com/recent/detailednetworkusageinddms

  20. http://www.linuxinsider.com/story/75780.html

  21. http://junit.org/

  22. http://developer.android.com/tools/help/monkeyrunner_concepts.html

  23. http://developer.android.com/tools/help/lint.html

References

  • Aftandilian EE, Kelley S, Gramazio C, Ricci N, Su SL, Guyer SZ (2010) Heapviz: interactive heap visualization for program understanding and debugging. In: Proceedings of the 5th international symposium on software visualization, ACM, New York, NY, USA, SOFTVIS ’10, pp 53–62

  • Agarwal R, Wang L, Stoller S (2006) Detecting potential deadlocks with static analysis and run-time monitoring. In: Ur S, Bin E, Wolfsthal Y (eds) Hardware and Software, Verification and Testing, Lecture Notes in Computer Science, vol 3875. Springer, Berlin Heidelberg, pp 191–207

    Google Scholar 

  • Alsallakh B, Bodesinsky P, Miksch S, Nasseri D (2012) Visualizing arrays in the Eclipse Java IDE. In: Proceedings of the 2012 16th European Conference on Software Maintenance and Reengineering, IEEE Computer Society, Washington, DC, USA, CSMR ’12, pp 541–544

  • Amalfitano D, Fasolino AR, Tramontana P (2011) A GUI crawling-based technique for Android mobile application testing. In: Proceedings of the 2011 IEEE Fourth International Conference on Software Testing, Verification and Validation Workshops, IEEE Computer Society, Washington, DC, USA, ICSTW ’11, pp 252–261

  • Amalfitano D, Fasolino AR, Tramontana P, De Carmine S, Memon AM (2012) Using GUI ripping for automated testing of Android applications. In: Proceedings of the 27th IEEE/ACM International Conference on Automated Software Engineering, ACM, New York, NY, USA, ASE, 2012

  • Artho C, Biere A (2001) Applying static analysis to large-scale multi-threaded Java programs. In: Proceedings of the 13th Australian Conference on Software Engineering, IEEE Computer Society, Washington, DC, USA, ASWEC ’01, pp 68–75

  • Avizienis A, Laprie JC, Randell B, Landwehr C (2004) Basic concepts and taxonomy of dependable and secure computing. Dependable and Secure Computing, IEEE Trans on 1(1):11–33. doi:10.1109/TDSC.2004.2

    Google Scholar 

  • Ayewah N, Hovemeyer D, Morgenthaler J, Penix J, Pugh W (2008) Using static analysis to find bugs. IEEE Softw 25 (5):22–29. 10.1109/MS.2008.130

    Article  Google Scholar 

  • Bacchelli A (2013). Mining challenge 2013: Stack overflow. In: The 10th Working Conference on Mining Software Repositories

  • Bacon DF, Cheng P, Grove D (2004) Garbage collection for embedded systems. In: Proceedings of the 4th ACM international conference on Embedded software, ACM, New York, NY, USA, EMSOFT ’04, pp 125–136

  • Beizer B (2003) Software Testing Techniques. Dreamtech Press

  • Bloch J (2006) How to design a good API and why it matters. In: Companion to the 21st ACM SIGPLAN symposium on Object-oriented programming systems, languages, and applications, ACM, New York, NY, USA, OOPSLA ’06, pp 506–507

  • Bond MD, McKinley KS (2008) Tolerating memory leaks. In: Proceedings of the 23rd ACM SIGPLAN conference on Object-oriented programming systems languages and applications, ACM, New York, NY, USA, OOPSLA ’08, pp 109–126

  • Bovet D, Cesati M (2005) Understanding The Linux Kernel. Oreilly & Associates Inc

  • Buse RPL, Weimer W (2012) Synthesizing API usage examples. In: Proceedings of the 2012 International Conference on Software Engineering, ICSE 2012. IEEE Press, Piscataway, pp 782–792. doi: 10.1109/ICSE.2012.6227140

    Google Scholar 

  • Candes E, Wakin M (2008) An introduction to compressive sampling. IEEE Signal Proc Mag 25(2):21–30. doi:10.1109/MSP.2007.914731

    Article  Google Scholar 

  • Chang TH, Yeh T, Miller RC (2010) GUI testing using computer vision. In: Proceedings of the SIGCHI Conference on Human Factors in Computing Systems. ACM, New York, NY, USA, CHI ’10, pp 1535–1544

  • Chen G, Kandemir M, Vijaykrishnan N, Irwin MJ, Mathiske B, Wolczko M (2003) Heap compression for memory-constrained Java environments. In: Proceedings of the 18th annual ACM SIGPLAN conference on Object-oriented programing, systems, languages, and applications, ACM, New York, NY, USA, OOPSLA ’03, pp 282–301. doi:10.1145/949305.949330

  • Chen MC, Chen JL, Chang TW (2011) Android/OSGi-based vehicular network management system. Comput Commun 34(2):169–183. doi: 10.1016/j.comcom.2010.03.032

    Article  Google Scholar 

  • Chillarege R, Bhandari IS, Chaar JK, Halliday MJ, Moebus DS, Ray BK, Wong MY (1992) Orthogonal defect classification—a concept for in-process measurements. IEEE Trans Softw Eng 18(11): 943–956

    Article  Google Scholar 

  • Choe H, Baek J, Jeong H, Park S (2011) MetaService: an object transfer platform between Android applications. In: Proceedings of the 2011 ACM Symposium on Research in Applied Computation, ACM, New York, NY, USA, RACS ’11, pp 56–60

  • Clarke S (2004) Measuring API usability. Dr Dobb’s Journal 29:S6–S9. http://www.drdobbs.com/windows/184405654

    Google Scholar 

  • Dang Y, Wu R, Zhang H, Zhang D, Nobel P (2012) ReBucket: a method for clustering duplicate crash reports based on call stack similarity. In: Proceedings of the 2012 International Conference on Software Engineering, ICSE 2012. IEEE Press, Piscataway, pp 1084–1093

    Google Scholar 

  • DeMillo RA, Mathur AP (1995) A grammar based fault classification scheme and its application to the classification of the errors of TEX. Tech. rep., Citeseer

  • Eisenstadt M (1997) My hairiest bug war stories. Commun ACM 40(4):30–37. 10.1145/248448.248456

    Article  Google Scholar 

  • Ellis B, Stylos J, Myers B (2007) The factory pattern in API design: a usability evaluation. In: Proceedings of the 29th international conference on Software Engineering, IEEE Computer Society, Washington, DC, USA, ICSE ’07, pp 302–312

  • Enck W, Ongtang M, McDaniel P (2009) Understanding Android security. IEEE Security Privacy 7 (1):50–57. doi:10.1109/MSP.2009.26

    Article  Google Scholar 

  • Endres A (1975) An analysis of errors and their causes in system programs. SIGPLAN Not 10(6):327–336. 10.1145/390016.808455

    Article  Google Scholar 

  • Engler D, Ashcraft K (2003) RacerX: effective, static detection of race conditions and deadlocks. SIGOPS Oper Syst Rev 37(5):237–252. doi:10.1145/1165389.945468

    Article  Google Scholar 

  • Faghri F, Bazarbayev S, Overholt M, Farivar R, Campbell RH, Sanders WH (2012) Failure scenario as a service (FSaaS) for Hadoop clusters. In: Proceedings of the Workshop on Secure and Dependable Middleware for Cloud Monitoring and Management, ACM, New York, NY, USA, SDMCMM ’12, pp 5:1–5:6

  • Farooq U, Welicki L, Zirkler D (2010) API usability peer reviews: a method for evaluating the usability of application programming interfaces. In: Proceedings of the 28th international conference on Human factors in computing systems, ACM, New York, NY, USA, CHI ’10, pp 2327–2336

  • Felt AP, Chin E, Hanna S, Song D, Wagner D (2011) Android permissions demystified. In: Proceedings of the 18th ACM conference on Computer and communications security, ACM, New York, NY, USA, CCS ’11, pp 627–638

  • Fraboulet A, Kodary K, Mignotte A (2001) Loop fusion for memory space optimization. In: Proceedings of the 14th international symposium on Systems synthesis, ACM, New York, NY, USA, ISSS ’01, pp 95–100

  • Ganapathi A, Patterson D (2005) Crash data collection: a Windows case study. In: Proceedings of the 2005 International Conference on Dependable Systems and Networks, IEEE Computer Society, Washington, DC, USA, DSN ’05, pp 280–285

  • Ganapathi A, Ganapathi V, Patterson DA (2006) Windows XP kernel crash analysis. In: LISA, vol 6, pp 49–159

  • Gavalas D, Economou D (2011) Development platforms for mobile applications: status and trends. IEEE Softw 28 (1):77–86. doi: 10.1109/MS.2010.155

    Article  Google Scholar 

  • Gerken J, Jetter HC, Zöllner M, Mader M, Reiterer H (2011) The concept maps method as a tool to evaluate the usability of APIs. In: Proceedings of the 2011 annual conference on Human factors in computing systems CHI ’11. ACM, New York, pp 3373–3382

    Google Scholar 

  • Gray J (1986) Why do computers stop and what can be done about it? In: Symposium on reliability in distributed software and database systems, Los Angeles, CA, USA, pp 3–12

  • Gross KC, Bhardwaj V, Bickford R (2002) Proactive detection of software aging mechanisms in performance critical computers. In: Proceedings of the 27th Annual NASA Goddard Software Engineering Workshop (SEW-27’02). IEEE Computer Society, Washington, pp 17–23

    Google Scholar 

  • Gross KC, Urmanov A, Votta LG, McMaster S, Porter A (2006) Towards dependability in everyday software using software telemetry. In: Proceedings of the Third IEEE International Workshop on Engineering of Autonomic & Autonomous Systems, EASE ’06. IEEE Computer Society, Washington, pp 9–18

    Book  Google Scholar 

  • Guo P, Zimmermann T, Nagappan N, Murphy B (2010) Characterizing and predicting which bugs get fixed: an empirical study of Microsoft Windows. In: ACM/IEEE 32nd International Conference on Software Engineering, vol 1, pp 495–504. doi:10.1145/1806799.1806871

  • Havelund K, Pressburger T (2000) Model checking Java programs using Java PathFinder. Int J Softw Tools Technol Transfer 2:366–381. doi:10.1007/s100090050043

    Article  MATH  Google Scholar 

  • Havelund K, Roşu G (2004) An overview of the runtime verification tool Java PathExplorer. Form Methods Syst Des 24(2):189–215. doi: 10.1023/B:FORM.0000017721.39909.4b

    Article  MATH  Google Scholar 

  • Henning M (2009) API design matters. Commun ACM 52(5):46–56. doi:10.1145/1506409.1506424

    Article  Google Scholar 

  • Hovemeyer D, Pugh W (2004) Finding bugs is easy. SIGPLAN Not 39(12):92–106. doi:10.1145/1052883.1052895

    Article  Google Scholar 

  • Johnson P M, Kou H, Paulding M, Zhang Q, Kagawa A, Yamashita T (2005) Improving software development management through software project telemetry. IEEE Softw 22(4):76–85

    Article  Google Scholar 

  • Jula H, Tralamazza D, Zamfir C, Candea G (2008) Deadlock immunity: enabling systems to defend against deadlocks. In: Proceedings of the 8th USENIX conference on Operating systems design and implementation, USENIX Association, Berkeley, CA, USA, OSDI’08, pp 295–308. http://dl.acm.org/citation.cfm?id=1855741.1855762

  • Jula H, Rensch T, Candea G (2011) Platform-wide deadlock immunity for mobile phones. In: IEEE/IFIP 41st International Conference on Dependable Systems and Networks Workshops (DSN-W), pp 205–210. doi:10.1109/DSNW.2011.5958814

  • Kähkönen K, Launiainen T, Saarikivi O, Kauttio J, Heljanko K, Niemelä I (2011) LCT: an open source concolic testing tool for Java programs. In: Proceedings of the 6th Workshop on Bytecode Semantics, Verification, Analysis and Transformation (BYTECODE’2011), Saarbrücken, Germany, pp 75–80

  • Kawrykow D, Robillard M (2009) Detecting inefficient API usage. In: 31st International Conference on Software Engineering - Companion (ICSE-Companion 2009), pp 183–186 doi:10.1109/ICSE-COMPANION.2009.5070977

  • Kim D, Wang X, Kim S, Zeller A, Cheung S, Park S (2011a) Which crashes should I fix first?: Predicting top crashes at an early stage to prioritize debugging efforts. IEEE Trans Softw Eng 37(3):430–447. doi:10.1109/TSE.2011.20

    Article  Google Scholar 

  • Kim H, Lee M, Han W, Lee K, Shin I (2011b) Aciom: application characteristics-aware disk and network I/O management on Android platform. In: Proceedings of the ninth ACM international conference on Embedded software EMSOFT ’11. ACM, New York, pp 49–58

    Book  Google Scholar 

  • Kim H, Agrawal N, Ungureanu C (2012) Revisiting storage for smartphones. ACM Trans on Storage 8(4):14:1–14:25. doi: 10.1145/2385603.2385607

    Article  Google Scholar 

  • Kim K (2006) A non-blocking buffer mechanism for real-time event message communication. Real-Time Systems 32:197–211. doi: 10.1007/s11241-005-4680-7

    Article  MATH  Google Scholar 

  • Kim S, Zimmermann T, Nagappan N (2011c) Crash graphs: an aggregated view of multiple crashes to improve crash triage. In: Proceedings of the 2011 IEEE/IFIP 41st International Conference on Dependable Systems & Networks DSN ’11. IEEE Computer Society, Washington, pp 486–493

  • Knuth DE (1989) The Errors of TeX. Software: Practice and Experience 19(7):607–685. doi:10.1002/spe.4380190702

    MATH  Google Scholar 

  • Lee I, Iyer R (1995) Software dependability in the tandem guardian system. IEEE Trans Softw Eng 21(5):455–467. doi:10.1109/32.387474

    Article  Google Scholar 

  • Li Z, Tan L, Wang X, Lu S, Zhou Y, Zhai C (2006) Have things changed now? An empirical study of bug characteristics in modern open source software. In: Proceedings of the 1st workshop on Architectural and system support for improving software dependability, ACM, New York, NY, USA, ASID ’06, pp 25–33

  • Liblit B, Aiken A (2002) Building a better backtrace: techniques for postmortem program analysis. Tech. rep., Berkeley

  • Linares-Vásquez M, Bavota G, Bernal-Cárdenas C, Di Penta M, Oliveto R, Poshyvanyk D (2013) API change and fault proneness: a threat to the success of Android apps. In: Proceedings of the 2013 9th Joint Meeting on Foundations of Software Engineering ESEC/FSE 2013. ACM, New York, pp 477–487. doi:10.1145/2491411.2491428

  • Long B, Hoffman D, Strooper P (2003) Tool support for testing concurrent Java components. IEEE Trans Softw Eng 29(6):555–566. doi:10.1109/TSE.2003.1205182

    Article  Google Scholar 

  • Maalej W, Robillard MP (2013) Patterns of knowledge in API reference documentation. IEEE Trans Softw Eng 99 (PrePrints):1. doi:10.1109/TSE.2013.12

    Google Scholar 

  • Maia C, Nogueira LM, Pinho LM (2010) Evaluating Android OS for embedded real-time systems. In: Petters SM, Zijlstra P (eds) 6th International Workshop on Operating Systems Platforms for Embedded Real-Time Applications (OSPERT 2010), Politécnico do Porto, pp 63–70

  • Maji AK, Hao K, Sultana S, Bagchi S (2010) Characterizing failures in mobile OSes: a case study with Android and Symbian. In: Proceedings of the 2010 IEEE 21st International Symposium on Software Reliability Engineering ISSRE ’10. IEEE Computer Society, Washington, pp 249–258

  • Mandelin D, Xu L, Bodík R, Kimelman D (2005) Jungloid mining: helping to navigate the API jungle. SIGPLAN Not 40(6):48–61. doi:10.1145/1064978.1065018

    Article  Google Scholar 

  • McKinley KS, Carr S, Tseng CW (1996) Improving data locality with loop transformations. ACM Trans Program Lang Syst 18(4):424–453. doi:10.1145/233561.233564

    Article  Google Scholar 

  • Meijer E, Beckman B, Bierman G (2006) LINQ: reconciling object, relations and XML in the NET framework. In: Proceedings of the 2006 ACM SIGMOD international conference on Management of data SIGMOD ’06. ACM, New York, pp 706–706. doi:10.1145/1142473.1142552

  • Mernik M, Heering J, Sloane AM (2005) When and how to develop domain-specific languages. ACM Comput Surv 37(4):316–344. doi:10.1145/1118890.1118892

    Article  Google Scholar 

  • van der Merwe H, van der Merwe B, Visse W (2012) Verifying Android applications using Java PathFinder. SIGSOFT Softw Eng Notes 37(6):1–5. doi:10.1145/2382756.2382797

    Article  Google Scholar 

  • Michael MM, Scott ML (1996) Simple, fast, and practical non-blocking and blocking concurrent queue algorithms. In: Proceedings of the fifteenth annual ACM symposium on Principles of distributed computing PODC ’96. ACM, New York, pp 267–275. doi:10.1145/248052.248106

    Book  Google Scholar 

  • Ongtang M, Butler K, McDaniel P (2010) Porscha: policy oriented secure content handling in Android. In: Proceedings of the 26th Annual Computer Security Applications Conference ACSAC ’10. ACM, New York, pp 221–230. doi:10.1145/1920261.1920295

    Book  Google Scholar 

  • Panda PR, Catthoor F, Dutt ND, Danckaert K, Brockmeyer E, Kulkarni C, Vandercappelle A, Kjeldsberg PG (2001) Data and memory optimization techniques for embedded systems. ACM Trans Des Autom Electron Syst 6(2):149–206. doi:10.1145/375977.375978

    Article  Google Scholar 

  • Payet T, Spoto F (2012) Static analysis of Android programs. Inf Softw Technol 54(11):1192–1201. doi:10.1016/j.infsof.2012.05.003

    Article  Google Scholar 

  • Pheatt C (2008) Intel threading building blocks. J Comput Sci Coll 23(4):298–298. http://dl.acm.org/citation.cfm?id=1352079.1352134

    Google Scholar 

  • Ploski J, Rohr M, Schwenkenberg P, Hasselbring W (2007) Research issues in software fault categorization. ACM SIGSOFT Softw Eng Notes 32(6). doi:10.1145/1317471.1317478

  • Podgurski A, Leon D, Francis P, Masri W, Minch M, Sun J, Wang B (2003) Automated support for classifying software failure reports. In: Proceedings of the 25th International Conference on Software Engineering 2003. IEEE Computer Society, Washington, pp 465–475. doi:10.1109/ICSE.2003.1201224

    Book  Google Scholar 

  • Robillard M, DeLine R (2011) A field study of API learning obstacles. Empir Softw Eng 16(6):703–732. doi:10.1007/s10664-010-9150-8

    Article  Google Scholar 

  • Robillard M, Bodden E, Kawrykow D, Mezini M, Ratchford T (2013) Automated API property inference techniques. IEEE Trans Softw Eng 39(5):613–637. doi:10.1109/TSE.2012.63

    Article  Google Scholar 

  • Robillard MP (2009) What makes APIs hard to learn? Answers from developers. IEEE Softw 26(6):27–34. doi:10.1109/MS.2009.193

    Article  Google Scholar 

  • Schoeberl M (2004) Restrictions of Java for embedded real-time systems. In: Proceedings of the Seventh IEEE International Symposium on Object-Oriented Real-Time Distributed Computing, 2004, pp 93–100. doi:10.1109/ISORC.2004.1300334

  • Sen K, Agha G (2006) CUTE and jCUTE: concolic unit testing and explicit path model-checking tools In: CAV. Springer, pp 419–423

  • Seo J, Choi B, Yang S (2011) A profiling method by PCB hooking and its application for memory fault detection in embedded system operational test. Inf Softw Technol 53(1):106–119. doi:10.1016/j.infsof.2010.09.003

    Article  Google Scholar 

  • Shabtai A, Fledel Y, Kanonov U, Elovici Y, Dolev S, Glezer C (2010) Google Android: a comprehensive security assessment. IEEE Security Privacy 8(2):35–44. doi:10.1109/MSP.2010.2

    Article  Google Scholar 

  • Shabtai A, Kanonov U, Elovici Y, Glezer C, Weiss Y (2012) “Andromaly”: a behavioral malware detection framework for Android devices. J Intell Inf Syst 38(1):161–190. doi:10.1007/s10844-010-0148-x

    Article  Google Scholar 

  • Shelton C, Koopman P, Devale K (2000) Robustness testing of the Microsoft Win32 API. In: Proceedings of the International Conference on Dependable Systems and Networks. DSN 2000, pp 261–270 10.1109/ICDSN.2000.857548

  • Shi L, Zhong H, Xie T, Li M (2011) An empirical study on evolution of API documentation. In: Giannakopoulou D, Orejas F (eds) Fundamental Approaches to Software Engineering, Lecture Notes in Computer Science, vol 6603. Springer, Berlin, pp 416–431. doi:10.1007/978-3-642-19811-3%5F29

    Google Scholar 

  • Shihab E, Kamei Y, Bhattacharya P (2012) Mining challenge 2012: The Android platform. In: The 9th Working Conference on Mining Software Repositories

  • de Souza C, Bentolila D (2009) Automatic evaluation of API usability using complexity metrics and visualizations. In: 31st International Conference on Software Engineering - Companion, (ICSE-Companion 2009), pp 299–302. doi:10.1109/ICSE-COMPANION.2009.5071006

  • Sproull R, Waldo J (2014) The API performance contract. Queue 12(1):10:10–10:20. doi:10.1145/2576966.2576968 10.1145/2576966.2576968

    Article  Google Scholar 

  • Stylos J (2009) Making APIs More Usable with Improved API Designs, Documentation and Tools. Carnegie Mellon University. http://books.google.co.uk/books?id=MQYoWv0nsy8C

  • Stylos J, Clarke S (2007) Usability implications of requiring parameters in objects’ constructors. In: Proceedings of the 29th international conference on Software Engineering ICSE ’07. IEEE Computer Society, Washington, pp 529–539>. doi:10.1109/ICSE.2007.92

    Google Scholar 

  • Stylos J, Myers BA (2008) The implications of method placement on API learnability. In: Proceedings of the 16th ACM SIGSOFT International Symposium on Foundations of software engineering SIGSOFT ’08/FSE-16. ACM, New York, pp 105–112. doi:10.1145/1453101.1453117

    Book  Google Scholar 

  • Sullivan M, Chillarege R (1991) Software defects and their impact on system availability—a study of field failures in operating systems. In: 21st International Symposium Fault-Tolerant Computing, FTCS-21. Digest of Papers, p 29. doi:10.1109/FTCS.1991.146625

  • Tan L, Liu C, Li Z, Wang X, Zhou Y, Zhai C (2013) Bug characteristics in open source software. Empirical Software Engineering pp 1–41

  • Tulach J (2012) Practical API Design: Confessions of a Java Framework Architect. Apressus Series, Apress. http://books.google.co.uk/books?id=5DmYpwAACAAJ

  • Vallina-Rodriguez N, Crowcroft J (2013) Energy management techniques in modern mobile handsets. IEEE Communications Surveys Tutorials 15(1):179–198. doi:10.1109/SURV.2012.021312.00045

    Article  Google Scholar 

  • Valois J D (1995) Lock-free linked lists using compare-and-swap. In: Proceedings of the fourteenth annual ACM symposium on Principles of distributed computing PODC ’95. ACM, New York, pp 214–222. doi:10.1145/224964.224988

  • Vaughan-Nichols SJ (2001) Technology news. Computer 34(12):22–24. doi:10.1109/2.970549

    Article  Google Scholar 

  • Xie T, Pei J (2006) MAPO: mining API usages from open source repositories. In: Proceedings of the 2006 international workshop on Mining software repositories MSR ’06. ACM, New York, pp 54–57

    Book  Google Scholar 

  • Yang L, Dick R P, Lekatsas H, Chakradhar S (2010) Online memory compression for embedded systems. ACM Trans Embed Comput Syst 9(3):27:1–27:30. doi:10.1145/1698772.1698785

    Article  Google Scholar 

  • Yang T, Hertz M, Berger ED, Kaplan SF, Moss JEB (2004) Automatic heap sizing: taking real memory into account. In: Proceedings of the 4th international symposium on Memory management ISMM ’04. ACM, New York, pp 61–72. doi:10.1145/1029873.1029881

    Google Scholar 

Download references

Acknowledgments

We would like to thank the founders of BugSense Inc. Panos Papadopoulos and John Vlachogiannis for the data and information they provided us, as well as Alexandros Kompotis, who downloaded and gave us the data set. In addition, we would like to thank Konstantinos Polychronis and Antonis Lilis for the valuable information they gave us regarding Android application development. Also, we want to thank Panos Louridas, Georgios Gousios, Marios Fragkoulis, and Vassilios Karakoidas for their suggestions and internal reviews.

This research has been co-financed by the European Union (European Social Fund—esf) and Greek national funds through the Operational Program “Education and Lifelong Learning” of the National Strategic Reference Framework (nsrf)—Research Funding Program: Thalis—Athens University of Economics and Business—Software Engineering Research Platform.

Author information

Authors and Affiliations

Authors

Corresponding author

Correspondence to Maria Kechagia.

Additional information

Communicated by: Andreas Zeller

Appendix:

Appendix:

Here we provide examples of cleaned stack traces that cover cases from the formulae in Section 3.3.

Table 13 Example of Case 4
Table 14 Example of Case 5

In the following graphs, we present the diagrams for the distribution of the signatures (total and unique frequencies) among the crash cause categories for each of the examined APIs.

Fig. 6
figure 6

Total signatures for Android APIs

Fig. 7
figure 7

Unique signatures for Android APIs

Fig. 8
figure 8

Total signatures for Java APIs

Fig. 9
figure 9

Unique signatures for Java APIs

Fig. 10
figure 10

Total signatures for third-party library APIs

Fig. 11
figure 11

Unique signatures for third-party library APIs

Rights and permissions

Reprints and permissions

About this article

Check for updates. Verify currency and authenticity via CrossMark

Cite this article

Kechagia, M., Mitropoulos, D. & Spinellis, D. Charting the API minefield using software telemetry data. Empir Software Eng 20, 1785–1830 (2015). https://doi.org/10.1007/s10664-014-9343-7

Download citation

  • Published:

  • Issue Date:

  • DOI: https://doi.org/10.1007/s10664-014-9343-7

Keywords

Navigation