Abstract
In software development, issue tracker systems are widely used to manage bug reports. In such a system, a bug report can be filed, diagnosed, assigned, and fixed. In the standard process, a bug can be resolved as fixed, invalid, duplicated, or won’t fix. Although the above resolutions are well-defined and easy to understand, a bug report can end with a less -known resolution, i.e., a workaround. Compared with other resolutions, the definition of workarounds is more ambiguous. Besides the problem that is reported in a bug report, the resolution of a workaround raises more questions. Some questions are important for users, especially those programmers who build their projects upon others (e.g., libraries). Although some early studies have been conducted to analyze API workarounds, many research questions on workarounds are still open. For example, which bugs are resolved as workarounds? Why is a bug report resolved as a workaround? What are the repairs and impacts of workarounds? In this paper, we conduct the first empirical study to explore the above research questions. In particular, we analyzed 200 real workarounds that were collected from 81 Apache projects. Our results lead to eight findings and answers to all the above questions. For example, if bug reports are resolved as workarounds, their problems often either arise in external projects (40%) or reside in programming environments (23.5%). Although the problems of some workarounds (38.5%) reside in the project where they are reported, it is difficult to fix them fully and perfectly. Our findings are useful to understand workarounds, and to improve software projects and issue trackers.
Access this article
We’re sorry, something doesn't seem to be working properly.
Please try refreshing the page. If that doesn't work, please contact support so we can address the problem.
Similar content being viewed by others
Data Availability
The data of this study have been deposited in the following public repository: https://github.com/tetradecane/Workaround_journal_website
References
Agrawal R, Srikant R (1995) Mining sequential patterns. In: Proc. ICDE, pp. 3–14
Ammons G, Bodík R, Larus JR (2002) Mining specifications. In: Proc. POPL, pp. 4–16
Anvik J, Hiew L, Murphy GC (2006) Who should fix this bug? In: Proc. ICSE, pp. 361–370
Bettenburg N, Just S, Schröter A, Weiss C, Premraj R, Zimmermann T (2008) What makes a good bug report? In: Proc. ESEC/FSE, pp. 308–318
Bettenburg N, Premraj R, Zimmermann T, Kim S (2008) Duplicate bug reports considered harmful? really? In: Proc. ICSM, pp. 337–345
Bhattacharya P, Ulanova L, Neamtiu I, Koduru SC (2013) An empirical analysis of bug reports and bug fixing in open source android apps. In: Proc. CSMR, pp. 133–143
Bogart C, Kästner C, Herbsleb J, Thung F (2016) How to break an API: cost negotiation and community values in three software ecosystems. In: Proc. ESEC/FSE, pp. 109–120
Dallmeier V, Knopp N, Mallon C, Hack S, Zeller A (2010) Generating test cases for specification mining. In: Proc. ISSTA, pp. 85–96
Dehaghani SMH, Hajrahimi N (2013) Which factors affect software projects maintenance cost more? Acta Informatica Medica 21(1):63
Endrikat S, Hanenberg S, Robbes R, Stefik A (2014) How do API documentation and static typing affect API usability? In: Proc. ICSE, pp. 632–642
Engler DR, Chen DY, Chou A (2001) Bugs as inconsistent behavior: A general approach to inferring errors in systems code. In: Proc. SOSP, pp. 57–72
Erlikh L (2000) Leveraging legacy system dollars for e-business. IT professional 2(3):17–23
Ernst MD, Perkins JH, Guo PJ, McCamant S, Pacheco C, Tschantz MS, Xiao C (2007) The daikon system for dynamic detection of likely invariants. Sci Comput Program 69(1–3):35–45
Francalanci C, Merlo F (2008) Empirical analysis of the bug fixing process in open source projects. In: Proc. OSS, pp. 187–196
Gabel M, Su Z (2008) Javert: fully automatic mining of general temporal properties from dynamic traces. In: Proc. ESEC/FSE, pp. 339–349
Guo PJ, Zimmermann T, Nagappan N, Murphy B (2010) Characterizing and predicting which bugs get fixed: an empirical study of microsoft windows. In: Proc. ICSE, pp. 495–504
Guo PJ, Zimmermann T, Nagappan N, Murphy B (2011) Not my bug! and other reasons for software bug report reassignments. In: Proc. CSCW, pp. 395–404
Han J, Kamber M, Pei J (2011) Data Mining: Concepts and Techniques. Morgan Kaufmann Publishers
Herzig K, Just S, Zeller A (2013) It’s not a bug, it’s a feature: how misclassification impacts bug prediction. In: Proc. ICSE, pp. 392–401
Hora AC, Robbes R, Anquetil N, Etien A, Ducasse S, Valente MT (2015) How do developers react to API evolution? the pharo ecosystem case. In: Proc. ICSME, pp. 251–260
Jeong G, Kim S, Zimmermann T (2009) Improving bug triage with bug tossing graphs. In: Proc. ESEC/FSE, p. 111–120
Jia L, Zhong H, Wang X, Huang L, Lu X (2020) An empirical study on bugs inside tensorflows. In: Proc. DASFAA, p. to appear
Kazman R, Cai Y, Mo R, Feng Q, Xiao L, Haziyev S, Fedak V, Shapochka A (2015) A case study in locating the architectural roots of technical debt. Proc. ICSE 2:179–188
Krippendorff K (2011) Computing Krippendorff’s alpha-reliability
Lamothe M, Guéhéneuc YG, Shang W (2021) A systematic review of api evolution literature. ACM Computing Surveys 54(8):1–36
Lamothe M, Shang W (2020) When APIs are intentionally bypassed: An exploratory study of API workarounds. In: Proc. ICSE, p. to appear
Le Goues C, Nguyen T, Forrest S, Weimer W (2011) Genprog: A generic method for automatic software repair. IEEE transactions on software engineering 38(1):54–72
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: Proc. ASID, pp. 25–33
Li Z, Zhong H (2021) An empirical study on obsolete issue reports. In: Proc. ASE, p. to eappear
Li Z, Zhou Y (2005) Pr-miner: automatically extracting implicit programming rules and detecting violations in large software code. In: Proc. ESEC/FSE, pp. 306–315
Lin Z, Shu F, Yang Y, Hu C, Wang Q (2009) An empirical study on bug assignment automation using chinese bug data. In: Proc. ESEM, pp. 451–455
Lorenzoli D, Mariani L, Pezzè M (2008) Automatic generation of software behavioral models. In: Proc. ICSE, pp. 501–510
Monperrus M, Eichberg M, Tekes E, Mezini M (2012) What should developers be aware of? an empirical study on the directives of API documentation. Empir Softw Eng 17(6):703–737
Nadi S, Krüger S, Mezini M, Bodden E (2016) Jumping through hoops: why do java developers struggle with cryptography apis? In: Proc. ICSE, pp. 935–946
Nawaz A (2012) A comparison of card-sorting analysis methods. In: APCHI, pp. 28–31
Nguyen TT, Nguyen HA, Pham NH, Al-Kofahi JM, Nguyen TN (2009) Graph-based mining of multiple object usage patterns. In: Proc. ESEC/FSE, pp. 383–392
Okur S, Dig D (2012) How do developers use parallel libraries? In: Proc. ESEC/FSE, p. 54
Pandita R, Xiao X, Zhong H, Xie T, Oney S, Paradkar AM (2012) Inferring method specifications from natural language API descriptions. In: Proc. ICSE, pp. 815–825
Potdar A, Shihab E (2014) An exploratory study on self-admitted technical debt. In: Proc. ICSME, pp. 91–100
Qiu D, Li B, Leung H (2016) Understanding the API usage in Java. Inf Softw Technol 73:81–100
Ramasubbu N, Kemerer CF (2019) Integrating technical debt management and software quality management processes: A normative framework and field tests. IEEE Trans Softw Eng 45(3):285–300
Robbes R, Lungu M, Röthlisberger D (2012) How do developers react to API deprecation?: the case of a smalltalk ecosystem. In: Proc. ESEC/FSE, p. 56
Robillard MP, Bodden E, Kawrykow D, Mezini M, Ratchford T (2013) Automated API property inference techniques. IEEE Trans. Softw. Eng. 39(5):613–637
Robillard MP, DeLine R (2011) A field study of API learning obstacles. Empir Softw Eng 16(6):703–732
Seacord RC, Plakosh D, Lewis GA (2003) Modernizing legacy systems: software technologies, engineering processes, and business practices. Addison-Wesley Professional
Shi L, Zhong H, Xie T, Li M (2011) An empirical study on evolution of API documentation. In: Proc. ETAPS/FASE, pp. 416–431
Tan L, Liu C, Li Z, Wang X, Zhou Y, Zhai C (2014) Bug characteristics in open source software. Empir Softw Eng 19(6):1665–1705
Tang Y, Khatchadourian R, Bagherzadeh M, Singh R, Stewart A, Raja A (2021) An empirical study of refactorings and technical debt in machine learning systems. In: Proc. ICSE, pp. 238–250
Thung F, Wang S, Lo D, Jiang L(2012) An empirical study of bugs in machine learning systems. In: Proc. ISSRE, pp. 271–280
Tom E, Aurum A, Vidgen R (2013) An exploration of technical debt. J Syst Softw 86(6):1498–1516
Vásquez ML, Bavota G, Bernal-Cárdenas C, Penta MD, Oliveto R, Poshyvanyk D (2013) API change and fault proneness: a threat to the success of android apps. In: Proc. ESEC/FSE, pp. 477–487
Vásquez ML, Bavota G, Penta MD, Oliveto R, Poshyvanyk D (2014) How do API changes trigger stack overflow discussions? a study on the android SDK. In: Proc. ICPC, pp. 83–94
Vetró A (2012) Using automatic static analysis to identify technical debt. In: Proc. ICSE, pp. 1613–1615. https://doi.org/10.1109/ICSE.2012.6227226
Xia X, Lo D, Wen M, Shihab E, Zhou B (2014) An empirical study of bug report field reassignment. In: Proc. CSMR-WCRE, pp. 174–183
Yan A, Zhong H, Song D, Jia L (2022) The symptoms, causes, and repairs of workarounds in apache issue trackers. In: Proc. ICSE
Yan M, Xia X, Shihab E, Lo D, Yin J, Yang X (2018) Automating change-level self-admitted technical debt determination. IEEE Trans Softw Eng 45(12):1211–1229
Zeller A (2006) Why Programs Fail: A Guide to Systematic Debugging. Elsevier
Zhang F, Khomh F, Zou Y, Hassan AE (2012) An empirical study on factors impacting bug fixing time. In: Proc. WCRE, pp. 225–234
Zhang H, Gong L, Versteeg S (2013) Predicting bug-fixing time: an empirical study of commercial software projects. In: Proc. ICSE, pp. 1042–1051
Zhang Y, Chen Y, Cheung S, Xiong Y, Zhang L (2018) An empirical study on TensorFlow program bugs. In: Proc. ISSTA, pp. 129–140
Zhong H (2022) Enriching compiler testing with real program from bug report. In: Proc. ASE, pp. 1–12
Zhong (2022) H Which exception shall we throw? In: Proc. ASE, p. to appear
Zhong H, Mei H (2018) An empirical study on API usages. IEEE Trans Softw Eng 45:319–334
Zhong H, Wang X (2023) An empirical study on API usages from code search engine and local library. Empirical Software Engineering p. to appear
Zimmermann T, Premraj R, Bettenburg N, Just S, Schroter A, Weiss C (2010) What makes a good bug report? IEEE Trans Softw Eng 36(5):618–643
Acknowledgements
We appreciate reviewers for their insightful comments. This work is sponsored by the National Nature Science Foundation of China No. 62232003 and 62272295.
Funding
This work is sponsored by the National Nature Science Foundation of China No. 62232003 and 62272295.
Author information
Authors and Affiliations
Corresponding author
Additional information
Communicated by: Eric Bodden.
Publisher's Note
Springer Nature remains neutral with regard to jurisdictional claims in published maps and institutional affiliations.
Rights and permissions
Springer Nature or its licensor (e.g. a society or other partner) holds exclusive rights to this article under a publishing agreement with the author(s) or other rightsholder(s); author self-archiving of the accepted manuscript version of this article is solely governed by the terms of such publishing agreement and applicable law.
About this article
Cite this article
Yan, A., Zhong, H., Song, D. et al. How do programmers fix bugs as workarounds? An empirical study on Apache projects. Empir Software Eng 28, 96 (2023). https://doi.org/10.1007/s10664-023-10318-7
Accepted:
Published:
DOI: https://doi.org/10.1007/s10664-023-10318-7