skip to main content
article

On the reaction to deprecation of clients of 4 + 1 popular Java APIs and the JDK

Published: 01 August 2018 Publication History

Abstract

Application Programming Interfaces (APIs) are a tremendous resource--that is, when they are stable. Several studies have shown that this is unfortunately not the case. Of those, a large-scale study of API changes in the Pharo Smalltalk ecosystem documented several findings about API deprecations and their impact on API clients. We extend this study, by analyzing clients of both popular third-party Java APIs and the JDK API. This results in a dataset consisting of more than 25,000 clients of five popular Java APIs on GitHub, and 60 clients of the JDK API from Maven Central. This work addresses several shortcomings of the previous study, namely: a study of several distinct API clients in a popular, statically-typed language, with more accurate version information. We compare and contrast our findings with the previous study and highlight new ones, particularly on the API client update practices and the startling similarities between reaction behavior in Smalltalk and Java. We make a comparison between reaction behavior for third-party APIs and JDK APIs, given that language APIs are a peculiar case in terms of wide-spread usage, documentation, and support from IDEs. Furthermore, we investigate the connection between reaction patterns of a client and the deprecation policy adopted by the API used.

References

[1]
Asm bytecode manipulator. http://asm.ow2.org/. Accessed on 7 April 2016.
[2]
Bavota G, Linares-Vasquez M, Bernal-Cardenas CE, Penta MD, Oliveto R, Poshyvanyk D (2015) The impact of api change-and fault-proneness on the user ratings of android apps. IEEE Trans Softw Eng (TSE) 41(4):384-407.
[3]
Begel A, Zimmermann T (2014) Analyze this! 145 questions for data scientists in software engineering. In: Proceedings of the 36th ACM/IEEE international conference on software engineering, ICSE '14. ACM, pp 12-23.
[4]
Black A, Ducasse S, Nierstrasz O, Pollet D, Cassou D, Denker M (2009) Pharo by example. Square Bracket Associates.
[5]
Bogart C, Kästner C, Herbsleb JD, Thung F (2016) How to break an API: cost negotiation and community values in three software ecosystems. In: Proceedings of the 24th ACM SIGSOFT international symposium on foundations of software engineering (FSE), pp 109-120.
[6]
Brito G, Hora A, Valente MT, Robbes R (2016) Do developers deprecate apis with replacement messages? a large-scale analysis on java systems. In: 23nd IEEE international conference on software analysis, evolution, and reengineering, SANER 2016, Osaka, Japan, March 14-18, 2016, p to appear.
[7]
Brooks FP (1975) No silver bullet. Software state-of-the-art, pp 14-29.
[8]
Businge J, Serebrenik A, van den Brand MG (2013a) Eclipse api usage: the good and the bad. Softw Qual J 23(1):107-141.
[9]
Businge J, Serebrenik A, van den Brand M (2013b) Analyzing the eclipse API usage: putting the developer in the loop. In: Proceedings of the 17th european conference on software maintenance and reengineering, CSMR, pp 37-46.
[10]
Chacon S (2009) Pro git. Apress.
[11]
Chow K, Notkin D (1996) Semi-automatic update of applications in response to library changes. In: Proceedings of international conference on software maintenance (ICSM), pp 359-368.
[12]
Cossette BE, Walker RJ (2012) Seeking the ground truth: a retroactive study on the evolution and migration of software libraries. In: Proceedings of 20th international symposium on the foundations of software engineering (FSE). ACM, p 55.
[13]
Dagenais B, Hendren L (2008) Enabling static analysis for partial java programs. ACM Sigplan Notices 43(10):313-328.
[14]
Dagenais B, Robillard MP (2008) Recommending adaptive changes for framework evolution. In: Proceedings of 30th international conference on software engineering (ICSE), pp 481-490.
[15]
Decan A, Mens T, Claes M, Grosjean P (2016) When github meets CRAN: an analysis of inter-repository package dependency problems. In: Proceedings of the 23rd IEEE international conference on software analysis, evolution, and reengineering (SANER), pp 493-504.
[16]
Decan A, Mens T, Claes M (2017) An empirical comparison of dependency issues in OSS packaging ecosystems. In: Proceedings of the 24th IEEE international conference on software analysis, evolution and reengineering (SANER), pp 2-12.
[17]
Dig D, Johnson RE (2005) The role of refactorings in api evolution. In: ICSM 2005: proceedings Of the 21st international conference on software maintenance, pp 389-398.
[18]
Dig D, Johnson R (2006) How do apis evolve? A story of refactoring. J Softw Maint Evol Res Pract 18(2):83-107.
[19]
Dig D, Manzoor K, Johnson R, Nguyen TN (2007) Refactoring-aware configuration management for object-oriented programs. In: 29th international conference on software engineering, pp 427-436.
[20]
Easymock api repository. https://github.com/easymock/easymock. Accessed on 7 April 2016.
[21]
Espinha T, Zaidman A, Gross H-G (2015) Web api fragility: how robust is your mobile application? In: Proceedings of the 2nd international conference on mobile software engineering and systems (MOBILESoft). IEEE, pp 12-21.
[22]
Fraser SD, Brooks Jr FP, Fowler M, Lopez R, Namioka A, Northrop L, Parnas DL, Thomas D (2007) No silver bullet reloaded: retrospective on essence and accidents of software engineering. In: Proceedings of 22nd ACM SIGPLAN conference on object-oriented programming systems and applications (OOPSLA). ACM, pp 1026-1030.
[23]
Gousios G (2013) The ghtorrent dataset and tool suite. In: Proceedings of the 10th working conference on mining software repositories, MSR 2013, pp 233-236.
[24]
Gousios G, Vasilescu B, Serebrenik A, Zaidman A (2014) Lean GHTorrent: Github data on demand. In: Proceedings of the 11th working conference on mining software repositories, pp 384-387.
[25]
Guava api repository. https://github.com/google/guava. Accessed on 7 April 2016.
[26]
Guice api repository. https://github.com/google/guice. Accessed on 7 April 2016.
[27]
Henkel J, Diwan A (2005) Catchup!: capturing and replaying refactorings to support API evolution. In: Proceedings of 27th international conference on software engineering (ICSE), pp 274-283.
[28]
Hibernate api repository. https://github.com/hibernate/hibernate-orm. Accessed on 7 April 2016.
[29]
http://www.github.com. Last Accessed February 2017.
[30]
http://www.oracle.com/technetwork/java/javase/compatibility-417013.html#incompatibilities. Last Accessed February 2017.
[31]
Holmes R, Walker RJ (2010) Customized awareness: recommending relevant external change events. In: Proceedings of the 32nd ACM/IEEE international conference on software engineering, vol 1. ACM, pp 465-474.
[32]
Hora A, Robbes R, Anquetil N, Etien A, Ducasse S, Valente MT (2015) How do developers react to api evolution? The pharo ecosystem case. In: IEEE international conference on software maintenance and evolution (ICSME), 2015. IEEE, pp 251-260.
[33]
Hora AC, Valente MT, Robbes R, Anquetil N (2016) When should internal interfaces be promoted to public? In: Proceedings of the 24th ACM SIGSOFT international symposium on foundations of software engineering (FSE), pp 278-289.
[34]
Hou D, Pletcher DM (2010) Towards a better code completion system by api grouping, filtering, and popularity-based ranking. In: Proceedings of the 2nd international workshop on recommendation systems for software engineering, RSSE '10. ACM, pp 26-30.
[35]
Hou D, Pletcher DM (2011) An evaluation of the strategies of sorting, filtering, and grouping API methods for code completion. In: IEEE 27th international conference on software maintenance, ICSM 2011, Williamsburg, VA, USA, September 25-30, 2011, pp 233-242.
[36]
Hou D, Yao X (2011) Exploring the intent behind API evolution: a case study. In: Proceedings of the 18th working conference on reverse engineering (WCRE), pp 131-140.
[37]
Ingalls D, Kaehler T, Maloney J, Wallace S, Kay A (1997) Back to the future: the story of squeak, a practical smalltalk written in itself. In: Proceedings of the 12th ACM SIGPLAN conference on object-oriented programming (OOPSLA) 1997, pp 318-326.
[38]
Johnson RE, Foote B (1988) Designing reusable classes. Journal of Object-Oriented Programming 1(2):22-35.
[39]
Juzgado NJ, Vegas S (2011) The role of non-exact replications in software engineering experiments. Empir Softw Eng 16(3):295-324.
[40]
Kalliamvakou E, Gousios G, Blincoe K, Singer L, German DM, Damian D (2014) The promises and perils of mining github. In: Proceedings of the 11th working conference on mining software repositories. ACM, pp 92-101.
[41]
Lämmel R, Pek E, Starek J (2011) Large-scale, ast-based api-usage analysis of open-source java projects. In: Proceedings of ACM symposium on applied computing (SAC), p 1317.
[42]
Lienhard A, Renggli L (2005) SqueakSource-Smart Monticello Repository. European Smalltalk User Group Innovation Technology Award, August.
[43]
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 22nd international conference on program comprehension (ICPC). ACM, pp 83-94.
[44]
Lloyd S (1982) Least squares quantization in pcm. IEEE Trans Inf Theory 28(2):129-137.
[45]
Lungu M, Robbes R, Lanza M (2010) Recovering inter-project dependencies in software ecosystems. In: ASE'10: proceedings of the 25th IEEE/ACM international conference on automated software engineering, ASE '10, pp 309-312.
[46]
McDonnell T, Ray B, Kim M (2013) An empirical study of API stability and adoption in the android ecosystem. In: Proceedings of 29th IEEE international conference on software maintenance (ICSM). IEEE, pp 70-79.
[47]
Mileva YM, Dallmeier V, Zeller A (2010) Mining api popularity. In: Testing-practice and research techniques. Springer, pp 173-180.
[48]
Mooi E, Sarstedt M (2010) Cluster analysis. Springer.
[49]
Nagappan M, Zimmermann T, Bird C (2013) Diversity in software engineering research. In: Proceedings of the 2013 9th joint meeting on foundations of software engineering. ACM, pp 466-476.
[50]
Nguyen HA, Nguyen TT, Wilson G. Jr., Nguyen AT, Kim M, Nguyen TN (2010) A graph-based approach to api usage adaptation. In: Proceedings of ACM international conference on object oriented programming systems languages and applications, pp 302-321.
[51]
PYPL popularity of programming language. http://pypl.github.io. Accessed on 19 Feb 2017.
[52]
Raemaekers S, van Deursen A, Visser J (2012) Measuring software library stability through historical version analysis. In: 28th IEEE international conference on software maintenance (ICSM). IEEE, pp 378-387.
[53]
Raemaekers S, van Deursen A, Visser J (2014) Semantic versioning versus breaking changes: a study of the maven repository. In: IEEE 14th international working conference on source code analysis and manipulation (SCAM), 2014. IEEE, pp 215-224.
[54]
Robbes R, Lungu M, Röthlisberger D (2012) How do developers react to api deprecation?: the case of a smalltalk ecosystem. In: Proceedings of 20th international symposium on the foundations of software engineering (FSE). ACM, p 56.
[55]
Sawant AA, Bacchelli A (2015) A dataset for api usage. In: Proceedings of 12th IEEE working conference on mining software repositories (MSR). IEEE, pp 506-509.
[56]
Sawant AA, Bacchelli A (2016) Fine-grape: fine-grained api usage extractor - an approach and dataset to investigate api usage. Empir Softw Eng 22(3):1348-1371.
[57]
Schäfer T, Jonas J, Mezini M (2008) Mining framework usage changes from instantiation code. In: Proceedings of 30th international conference on software engineering (ICSE), pp 471-480.
[58]
Spring api repository. https://github.com/spring-projects/spring-framework. Accessed on 7 April 2016.
[59]
Tiobe index. http://www.tiobe.com/tiobe_index. Accessed on 19 Feb 2017.
[60]
Wang S, Keivanloo I, Zou Y (2014) How do developers react to restful api evolution? Service-Oriented Computing pp 245-259.
[61]
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, vol 1. ACM, pp 325-334.
[62]
Xavier L, Brito A, Hora AC, Valente MT (2017) Historical and impact analysis of API breaking changes: a large-scale study. In: Proceedings of the 24th IEEE international conference on software analysis, evolution and reengineering, (SANER), pp 138-147.
[63]
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). ACM, pp 54-57.

Cited By

View all
  • (2024)Availability and Usage of Platform-Specific APIs: A First Empirical StudyProceedings of the 21st International Conference on Mining Software Repositories10.1145/3643991.3644925(27-31)Online publication date: 15-Apr-2024
  • (2023)Automatically Detecting Incompatible Android APIsACM Transactions on Software Engineering and Methodology10.1145/362473733:1(1-33)Online publication date: 23-Nov-2023
  • (2023)Plumber: Boosting the Propagation of Vulnerability Fixes in the npm EcosystemIEEE Transactions on Software Engineering10.1109/TSE.2023.324326249:5(3155-3181)Online publication date: 1-May-2023
  • Show More Cited By

Recommendations

Comments

Please enable JavaScript to view thecomments powered by Disqus.

Information & Contributors

Information

Published In

cover image Empirical Software Engineering
Empirical Software Engineering  Volume 23, Issue 4
August 2018
649 pages

Publisher

Kluwer Academic Publishers

United States

Publication History

Published: 01 August 2018

Author Tags

  1. API popularity
  2. API usage
  3. Application programming interface
  4. Dataset

Qualifiers

  • Article

Contributors

Other Metrics

Bibliometrics & Citations

Bibliometrics

Article Metrics

  • Downloads (Last 12 months)0
  • Downloads (Last 6 weeks)0
Reflects downloads up to 04 Sep 2024

Other Metrics

Citations

Cited By

View all
  • (2024)Availability and Usage of Platform-Specific APIs: A First Empirical StudyProceedings of the 21st International Conference on Mining Software Repositories10.1145/3643991.3644925(27-31)Online publication date: 15-Apr-2024
  • (2023)Automatically Detecting Incompatible Android APIsACM Transactions on Software Engineering and Methodology10.1145/362473733:1(1-33)Online publication date: 23-Nov-2023
  • (2023)Plumber: Boosting the Propagation of Vulnerability Fixes in the npm EcosystemIEEE Transactions on Software Engineering10.1109/TSE.2023.324326249:5(3155-3181)Online publication date: 1-May-2023
  • (2022)Automatically detecting API-induced compatibility issues in Android apps: a comparative analysis (replicability study)Proceedings of the 31st ACM SIGSOFT International Symposium on Software Testing and Analysis10.1145/3533767.3534407(617-628)Online publication date: 18-Jul-2022
  • (2022)Towards automatically repairing compatibility issues in published Android appsProceedings of the 44th International Conference on Software Engineering10.1145/3510003.3510128(2142-2153)Online publication date: 21-May-2022
  • (2022)API beauty is in the eye of the clientsJournal of Systems and Software10.1016/j.jss.2021.111134184:COnline publication date: 1-Feb-2022
  • (2022)AndroEvolve: automated Android API update with data flow analysis and variable denormalizationEmpirical Software Engineering10.1007/s10664-021-10096-027:3Online publication date: 1-May-2022
  • (2021)A Systematic Review of API Evolution LiteratureACM Computing Surveys10.1145/347013354:8(1-36)Online publication date: 4-Oct-2021
  • (2021)Helping or not helping? Why and how trivial packages impact the npm ecosystemEmpirical Software Engineering10.1007/s10664-020-09904-w26:2Online publication date: 1-Mar-2021
  • (2020)Fine-Grained Network Analysis for Modern Software EcosystemsACM Transactions on Internet Technology10.1145/341820921:1(1-14)Online publication date: 10-Dec-2020
  • Show More Cited By

View Options

View options

Get Access

Login options

Media

Figures

Other

Tables

Share

Share

Share this Publication link

Share on social media