Abstract
Frameworks are widely used in modern software development to reduce development costs. They are accessed through their Application Programming Interfaces (APIs), which specify the contracts with client programs. When frameworks evolve, API backward-compatibility cannot always be guaranteed and client programs must upgrade to use the new releases. Because framework upgrades are not cost-free, observing API changes and usages together at fine-grained levels is necessary to help developers understand, assess, and forecast the cost of each framework upgrade. Whereas previous work studied API changes in frameworks and API usages in client programs separately, we analyse and classify API changes and usages together in 22 framework releases from the Apache and Eclipse ecosystems and their client programs. We find that (1) missing classes and methods happen more often in frameworks and affect client programs more often than the other API change types do, (2) missing interfaces occur rarely in frameworks but affect client programs often, (3) framework APIs are used on average in 35 % of client classes and interfaces, (4) most of such usages could be encapsulated locally and reduced in number, and (5) about 11 % of APIs usages could cause ripple effects in client programs when these APIs change. Based on these findings, we provide suggestions for developers and researchers to reduce the impact of API evolution through language mechanisms and design strategies.


















Similar content being viewed by others
Notes
References
Ali N, Sharafi Z, Guéhéneuc Y-G, Antoniol G (2012) An empirical study on requirements traceability using eye-tracking. In: Proceedings of the International Conference on Software Maintenance, ser. ICSM 2012
Bavota G, Canfora G, Penta MD, Oliveto R, Panichella S (2013) The evolution of project inter-dependencies in a software ecosystem: the case of apache. In: Proceedings of the 2013 IEEE International Conference on Software Maintenance, ser. ICSM ’13. Washington, DC, USA: IEEE Computer Society, pp 280–289
Bloch J (2008) Effective Java (2nd Edition) (The Java Series), 2nd ed. Upper Saddle River, NJ. Prentice Hall PTR
Bracha G, Cook W (1990) Mixin-based inheritance. In: Proceedings of the European Conference on Object-oriented Programming and on Object-oriented Programming Systems, Languages, and Applications, ser. OOPSLA/ECOOP. New York, NY, USA: ACM Press, 1990, pp. 303–311. [Online]. Available. doi:10.1145/97945.97982
Businge J, Serebrenik A, van den Brand M (2013) Eclipse api usage: the good and the bad. Softw Qual J 1–35
Businge J, Serebrenik A, van den Brand M (2010) An empirical study of the evolution of eclipse third-party plug-ins. In: Proceedings of the Joint ERCIM Workshop on Software Evolution (EVOL) and International Workshop on Principles of Software Evolution (IWPSE), ser. IWPSE-EVOL ’10. New York, NY, USA: ACM, pp 63–72
Cossette BE, Walker RJ (2012) Seeking the ground truth: a retroactive study on the evolution and migration of software libraries. In: Proceedings of the ACM SIGSOFT 20th International Symposium on the Foundations of Software Engineering, ser. FSE ’12. New York, NY, USA: ACM, pp 55:1–55:11
Dagenais B, Robillard MP (2011) Recommending adaptive changes for framework evolution. ACM Trans Softw Eng Methodol 20(4):19:1–19:35
De Roover C, Lämmel R, Pek E (2013) Multi-dimensional exploration of api usage. In: ICPC, pp 152–161
Dig D, Comertoglu C, Marinov D, Johnson R (2006) Automated detection of refactorings in evolving components. In: ECOOP ’06: Proceedings of the 20th European Conference on Object-Oriented Programming. Springer Berlin / Heidelberg
Dietrich J, Jezek K, Brada P (2014) Broken promises: an empirical study into evolution problems in java programs caused by library upgrades. In: CSMR-WCRE, pp 64–73
Dig D, Johnson R (2006) How do apis evolve? A story of refactoring: Research articles. J Softw Maint Evol 18(2):83–107
Dig D, Manzoor K, Johnson R, Nguyen TN (2007) Refactoring-aware configuration management for object-oriented programs. In: ICSE ’07: Proceedings of the 29th international conference on Software Engineering. Washington, DC, USA: IEEE Computer Society, pp 427–436
Espinha T, Zaidman A, Gross H-G (2014) Web api growing pains: stories from client developers and their code. In: CSMR-WCRE, pp 84–93
Fisher RA (1922) On the interpretation of χ 2 from contingency tables, and the calculation of p. J R Stat Soc 85(1):87–94
Fokaefs M, Tsantalis N, Stroulia E, Chatzigeorgiou A (2011) Jdeodorant: identification and application of extract class refactorings. In: Proceedings of the 33rd International Conference on Software Engineering, ICSE 2011, Waikiki, Honolulu, HI, USA, May 21-28, 2011, pp 1037–1039
Fowler M, Beck K, Brant J, Opdyke W, Roberts D (1999) Refactoring: Improving the Design of Existing Code. Addison-Wesley
Gamma E, Helm R, Johnson RE, Vlissides J (1995) Design patterns: elements of reusable object-oriented software. Addison-Wesley
Godfrey MW, Zou L (2005) Using origin analysis to detect merging and splitting of source code entities. IEEE Trans Softw Eng 31(2):166–181
Hou D, Mo L (2013) Content categorization of api discussions. In: ICSM, pp 60–69
Hou D, Yao X (2011) Exploring the intent behind api evolution: a case study. In: WCRE, pp 131–140
Kawrykow D, Robillard MP (2009) Improving api usage through automatic detection of redundant code. In: Proceedings of the 2009 IEEE/ACM International Conference on Automated Software Engineering, ser. ASE ’09. Washington, DC, USA: IEEE Computer Society, pp 111–122
Kim M, Cai D, Kim S (2011) An empirical investigation into the role of api-level refactorings during software evolution. In: Proceedings of the 33rd International Conference on Software Engineering, ser. ICSE ’11. New York, NY, USA: ACM, pp 151–160
Kim M, Notkin D, Grossman D (2007) Automatic inference of structural changes for matching across program versions. In: ICSE ’07: Proceedings of the 29th international conference on Software Engineering.Washington, DC, USA: IEEE Computer Society, pp 333–343
Kpodjedo S, Ricca F, Galinier P, Antoniol G, Guéhéneuc Y-G (2013) Madmatch: Many-to-many approximate diagram matching for design comparison. IEEE Trans Softw Eng 39(8):1090–1111
Lämmel R, Pek E, Starek J (2011) Large-scale, ast-based api-usage analysis of open-source java projects. In: Proceedings of the 2011 ACM Symposium on Applied Computing, ser. SAC ’11. New York, NY, USA: ACM, pp 1317–1324
Linares-Vásquez M, Bavota G, Di Penta M, Oliveto R, Poshyvanyk D (2014) How do api changes trigger stack overflow discussions? A study on the android sdk. In: Proceedings of the 22Nd International Conference on Program Comprehension, ser. ICPC 2014. New York, NY, USA: ACM, pp 83–94
Maalej W, Robillard MP (2013) Patterns of knowledge in api reference documentation. IEEE Trans Softw Eng 39(9):1264–1282
McDonnell T, Ray B, Kim M (2013) An empirical study of api stability and adoption in the android ecosystem. In: Proceedings of the 2013 IEEE International Conference on Software Maintenance, ser. ICSM ’13. Washington, DC, USA: IEEE Computer Society, pp 70–79
Meng S, Wang X, Zhang L, Mei H (2012) A history-based matching approach to identification of framework evolution. In: Proceedings of 34th International Conference on Software Engineering, ser. ICSE 2012, pp 353–363
Mikhajlov L., Sekerinski E (1998) A study of the fragile base class problem. In: EUROPEAN CONFERENCE ON OBJECT-ORIENTED PROGRAMMING, ser. ECOOP’98. Springer, pp 355–382
Montandon JE, Borges H, Felix D, Valente MT (2013) Documenting apis with examples: Lessons learned with the apiminer platform. In: WCRE, IEEE, pp 401–408
Moritz E, Vásquez ML, Poshyvanyk D, Grechanik M, McMillan C, Gethers M (2013) Export: detecting and visualizing api usages in large source code repositories. In: ASE, pp 646–651
Nguyen HA, Nguyen TT, Wilson Jr.G., Nguyen AT, Kim M, Nguyen TN (2010) A graph-based approach to api usage adaptation. In: Proceedings of the ACM international conference on Object oriented programming systems languages and applications, ser. OOPSLA ’10. New York, NY, USA: ACM, pp 302–321
Pearson K (1922) On the criterion that a given system of deviations from the probable in the case of a correlated system of variables is such that it can be reasonably supposed to have arisen from random sampling. Philosophical Magazine Series 5 50 (302):157–175
Raemaekers S, van Deursen A, Visser J (2012) Measuring software library stability through historical version analysis. In: Proceedings of the, 2012, IEEE International Conference on Software Maintenance (ICSM), ser. ICSM ’12. Washington, DC, USA: IEEE Computer Society, pp 378–387
Raemaekers S, van Deursen A, Visser J (2014) Semantic versioning versus breaking changes: a study of the maven repository. In: 14th IEEE International Working Conference on Source Code Analysis and Manipulation (SCAM 2014). Victoria (Canada), 28-29 Sept. 2014 IEEE Computer Society
Robbes R, Lungu M, Röthlisberger D (2012) How do developers react to api deprecation?: The case of a smalltalk ecosystem. In: Proceedings of the ACM SIGSOFT 20th International Symposium on the Foundations of Software Engineering, ser. FSE ’12. New York, NY, USA: ACM, pp 56:1–56:11
Robillard MP, DeLine R (2011) A field study of api learning obstacles. Empir Softw Eng 16(6):703–732
Tempero E, Anslow C, Dietrich J, Han T, Li J, Lumpe M, Melton H, Noble J (2010) Qualitas corpus: a curated collection of java code for empirical studies. In: 2010 Asia Pacific Software Engineering Conference (APSEC2010), pp 336–345
Schärli N, Ducasse S, Nierstrasz O, Black A (2003) Traits: Composable units of behaviour. In: CardellLucai L (ed) Proceedings of the European Conference on Object-oriented Programming. [Online]. Available. doi:10.1007/978-3-540-45070-2_12. Springer, pp 248–274
Schäfer T, Jonas J, Mezini M (2008) Mining framework usage changes from instantiation code. In: ICSE ’08: Proceedings of the 30th international conference on Software engineering. New York, NY, USA: ACM, pp 471–480
Shah SMA, Dietrich J, McCartin C (2013) On the automation of dependency-breaking refactorings in java. In: Proceedings of the 2013 IEEE International Conference on Software Maintenance, ser. ICSM ’13. Washington, DC, USA: IEEE Computer Society, pp 160–169
Sheskin DJ (2007) Handbook of parametric and nonparametric statistical procedures, 4th edn. Chapman & All
Shi L, Zhong H, Xie T, Li M (2011) An empirical study on evolution of API documentation. In: Proceedings International Conference on Fundamental Approaches to Software Engineering (FASE 2011), pp 416–431
Thummalapenta S, Xie T (2008) Spotweb: Detecting framework hotspots and coldspots via mining open source code on the web. In: Proceedings of the 2008 23rd IEEE/ACM International Conference on Automated Software Engineering, ser. ASE ’08. Washington, DC, USA: IEEE Computer Society, pp 327–336
Tonelli T, Czarnecki K, Lämmel R (2010) Swing to SWT and back: Patterns for API migration by wrapping. In: 26th IEEE International Conference on Software Maintenance (ICSM 2010), September 12-18, 2010, Timisoara, Romania. IEEE Computer Society, pp 1–10
Wohlin C, Runeson P, Höst M (1999) Experimentation in software engineering: an introduction. Springer
Wu W, Adams B, Guéhéneuc Y-G, Antoniol G (2014) Acua: Api change and usage auditor. In: 4th IEEE International Working Conference on Source Code Analysis and Manipulation (SCAM), ser. SCAM’14
Wu W, Guéhéneuc Y-G, Antoniol G, Kim M (2010) Aura: a hybrid approach to identify framework evolution. In: Proceedings of the 32nd ACM/IEEE International Conference on Software Engineering - Volume 1, ser. ICSE ’10. New York, NY, USA: ACM, pp 325–334
Wu W, Serveaux A, Guéhéneuc Y-G, Antoniol G (2014) The impact of imperfect change rules on framework api evolution identi cation:an empirical study, Empirical Software Engineering, vol. In Press
Xing Z, Stroulia E (2007) Differencing logical uml models. Autom Softw Eng 14(2):215–259
Xing Z, Stroulia E (2007) API-evolution support with diff-CatchUp. IEEE Trans Softw Eng 33(12):818–836
Zhong H, Thummalapenta S, Xie T, Zhang L, Wang Q (2010) Mining api mapping for language migration. In: Proceedings of the 32nd ACM/IEEE International Conference on Software Engineering - Volume 1, ser. ICSE ’10. New York, NY, USA: ACM, pp 195–204
Acknowledgments
We thank Daniel German for providing the Maven central repository snapshots. This work has been partly funded by FQRNT, NSERC, and the Canada Research Chair on Patterns in Mixed-language Systems. We thank the anonymous reviewers for their invaluable comments on previous versions of this paper.
Author information
Authors and Affiliations
Corresponding author
Additional information
Communicated by: Emerson Murphy-Hill
Rights and permissions
About this article
Cite this article
Wu, W., Khomh, F., Adams, B. et al. An exploratory study of api changes and usages based on apache and eclipse ecosystems. Empir Software Eng 21, 2366–2412 (2016). https://doi.org/10.1007/s10664-015-9411-7
Published:
Issue Date:
DOI: https://doi.org/10.1007/s10664-015-9411-7