{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,1,15]],"date-time":"2026-01-15T14:26:25Z","timestamp":1768487185256,"version":"3.49.0"},"reference-count":44,"publisher":"Springer Science and Business Media LLC","issue":"1","license":[{"start":{"date-parts":[[2020,1,27]],"date-time":"2020-01-27T00:00:00Z","timestamp":1580083200000},"content-version":"tdm","delay-in-days":0,"URL":"https:\/\/creativecommons.org\/licenses\/by\/4.0"},{"start":{"date-parts":[[2020,1,27]],"date-time":"2020-01-27T00:00:00Z","timestamp":1580083200000},"content-version":"vor","delay-in-days":0,"URL":"https:\/\/creativecommons.org\/licenses\/by\/4.0"}],"content-domain":{"domain":["link.springer.com"],"crossmark-restriction":false},"short-container-title":["J Braz Comput Soc"],"published-print":{"date-parts":[[2020,12]]},"abstract":"<jats:title>Abstract<\/jats:title><jats:p>Exception handling is a well-known technique used to improve software robustness. However, recent studies report that developers typically neglect exception handling (mostly novice ones). We believe the quality of exception handling code in a software project is directly affected (i) by the absence, or lack of awareness, of an explicit exception handling policy and guidelines and (ii) by a silent rising of exception handling anti-patterns. In this paper, we investigate this phenomenon in a case study of a long-lived large-scale Java Web system in a Public Education Institution, trying to better understand the relationship between (i) and (ii), and the impact of developers\u2019 turnover, skills, and guidance in (ii). Our case study takes into account the technical and human aspects. As a first step, we surveyed 21 developers regarding their perception of exception handling in the system\u2019s institution. Next, we analysed the evolution of exception handling anti-patterns across 15 releases of the target system. We conducted a semi-structured interview with three senior software engineers, representatives of the development team, to present partial results of the case and raise possible causes for the found problems. The interviewed professionals and a second analysis of the code identified the high team turnover as the source of this phenomenon, since the public procurement process for hiring new developers has mostly attracted novice ones. These findings suggest that the absence of an explicit exception handling policy impacts negatively in the developers\u2019 perception and implementation of exception handling. Furthermore, the absence of such policy has been leading developers to replicate existing anti-patterns and spread them through new features added during system evolution. We also observed that most developers have low skills regarding exception handling in general and low knowledge regarding the design and implementation of exception handling in the system. The system maintainer now has a diagnosis of the major causes of the quality problems in the exception handling code and was able to lead the required measures to repair this technical debt.<\/jats:p>","DOI":"10.1186\/s13173-019-0095-5","type":"journal-article","created":{"date-parts":[[2020,1,27]],"date-time":"2020-01-27T10:04:08Z","timestamp":1580119448000},"update-policy":"https:\/\/doi.org\/10.1007\/springer_crossmark_policy","source":"Crossref","is-referenced-by-count":5,"title":["Studying the evolution of exception handling anti-patterns in a long-lived large-scale project"],"prefix":"10.1186","volume":"26","author":[{"given":"D\u00eamora B C","family":"de Sousa","sequence":"first","affiliation":[]},{"given":"Paulo Henrique M.","family":"Maia","sequence":"additional","affiliation":[]},{"given":"Lincoln S","family":"Rocha","sequence":"additional","affiliation":[]},{"ORCID":"https:\/\/orcid.org\/0000-0002-8627-0823","authenticated-orcid":false,"given":"Windson","family":"Viana","sequence":"additional","affiliation":[]}],"member":"297","published-online":{"date-parts":[[2020,1,27]]},"reference":[{"issue":"2","key":"95_CR1","doi-asserted-by":"publisher","first-page":"197","DOI":"10.1016\/S0164-1212(01)00062-0","volume":"59","author":"AF Garcia","year":"2001","unstructured":"Garcia AF, Rubira CM, Romanovsky A, Xu J (2001) A comparative study of exception handling mechanisms for building dependable object-oriented software. J Syst Softw 59(2):197\u2013222.","journal-title":"J Syst Softw"},{"issue":"1","key":"95_CR2","doi-asserted-by":"publisher","first-page":"1","DOI":"10.1016\/j.infsof.2012.06.002","volume":"55","author":"A Shahrokni","year":"2013","unstructured":"Shahrokni A, Feldt R (2013) A systematic review of software robustness. Inf Softw Technol 55(1):1\u201317.","journal-title":"Inf Softw Technol"},{"key":"95_CR3","doi-asserted-by":"publisher","first-page":"820","DOI":"10.1109\/32.877844","volume":"26","author":"PA Buhr","year":"2000","unstructured":"Buhr PA, Mok WYR (2000) Advanced exception handling mechanisms. IEEE Trans Softw Eng 26:820\u2013836.","journal-title":"IEEE Trans Softw Eng"},{"key":"95_CR4","doi-asserted-by":"publisher","unstructured":"Cacho N, Barbosa EA, Araujo J, Pranto F, Garcia A, Cesar T, Soares E, Cassio A, Filipe T, Garcia I (2014) How does exception handling behavior evolve? An exploratory study in Java and C# applications In: 2014 IEEE International Conference on Software Maintenance and Evolution.. IEEE. https:\/\/doi.org\/10.1109\/icsme.2014.25.","DOI":"10.1109\/icsme.2014.25"},{"issue":"2","key":"95_CR5","doi-asserted-by":"publisher","first-page":"150","DOI":"10.1109\/TSE.2010.7","volume":"36","author":"H Shah","year":"2010","unstructured":"Shah H, Gorg C, Harrold MJ (2010) Understanding exception handling: viewpoints of novices and experts. IEEE Trans Softw Eng 36(2):150\u2013161.","journal-title":"IEEE Trans Softw Eng"},{"key":"95_CR6","doi-asserted-by":"publisher","first-page":"312","DOI":"10.1145\/2597073.2597089","volume-title":"Proceedings of the 11th Working Conference on Mining Software Repositories, MSR 2014","author":"M Kechagia","year":"2014","unstructured":"Kechagia M, Spinellis D (2014) Undocumented and unchecked: exceptions that spell trouble In: Proceedings of the 11th Working Conference on Mining Software Repositories, MSR 2014, 312\u2013315.. ACM, New York."},{"issue":"C","key":"95_CR7","doi-asserted-by":"publisher","first-page":"1","DOI":"10.1016\/j.infsof.2016.05.003","volume":"77","author":"B-M Chang","year":"2016","unstructured":"Chang B-M, Choi K (2016) A review on exception analysis. Inf Softw Technol 77(C):1\u201316.","journal-title":"Inf Softw Technol"},{"issue":"Supplement C","key":"95_CR8","doi-asserted-by":"publisher","first-page":"1","DOI":"10.1016\/j.jss.2017.10.032","volume":"136","author":"J Oliveira","year":"2018","unstructured":"Oliveira J, Borges D, Silva T, Cacho N, Castor F (2018) Do android developers neglect error handling? A maintenance-centric study on the relationship between android abstractions and uncaught exceptions. J Syst Softw 136(Supplement C):1\u201318.","journal-title":"J Syst Softw"},{"key":"95_CR9","doi-asserted-by":"publisher","unstructured":"Osman H, Chi\u015f A, Corrodi C, Ghafari M, Nierstrasz O (2017) Exception evolution in long-lived Java systems In: 2017 IEEE\/ACM 14th International Conference on Mining Software Repositories (MSR).. IEEE. https:\/\/doi.org\/10.1109\/msr.2017.21.","DOI":"10.1109\/msr.2017.21"},{"key":"95_CR10","volume-title":"Preventing erosion in exception handling design using static-architecture conformance checking","year":"2017","unstructured":"Filho JLM, Rocha L, Andrade R, Britto R (2017) Preventing erosion in exception handling design using static-architecture conformance checking (Lopes A, de Lemos R, eds.). Springer, Cham."},{"key":"95_CR11","doi-asserted-by":"publisher","unstructured":"Cacho N, C\u00e9sar T, Filipe T, Soares E, Cassio A, Souza R, Garcia I, Barbosa EA, Garcia A (2014) Trading robustness for maintainability: an empirical study of evolving C# programs In: Proceedings of the 36th International Conference on Software Engineering \u2013 ICSE 2014.. ACM Press. https:\/\/doi.org\/10.1145\/2568225.2568308.","DOI":"10.1145\/2568225.2568308"},{"key":"95_CR12","doi-asserted-by":"publisher","first-page":"82","DOI":"10.1016\/j.jss.2015.04.066","volume":"106","author":"F Ebert","year":"2015","unstructured":"Ebert F, Castor F, Serebrenik A (2015) An exploratory study on exception handling bugs in Java programs. J Syst Softw 106:82\u2013101.","journal-title":"J Syst Softw"},{"key":"95_CR13","doi-asserted-by":"publisher","unstructured":"Sawadpong P, Allen EB (2016) Software defect prediction using exception handling call graphs: a case study In: 2016 IEEE 17th International Symposium on High Assurance Systems Engineering (HASE).. IEEE. https:\/\/doi.org\/10.1109\/hase.2016.13.","DOI":"10.1109\/hase.2016.13"},{"key":"95_CR14","doi-asserted-by":"publisher","unstructured":"Sena D, Coelho R, Kulesza U, Bonif\u00e1cio R (2016) Understanding the exception handling strategies of Java libraries: an empirical study In: Proceedings of the 13th International Workshop on Mining Software Repositories \u2013 MSR \u201916.. IEEE. https:\/\/doi.org\/10.1145\/2901739.2901757.","DOI":"10.1145\/2901739.2901757"},{"key":"95_CR15","doi-asserted-by":"publisher","unstructured":"de P\u00e1dua GB, Shang W (2017) Studying the prevalence of exception handling anti-patterns In: 2017 IEEE\/ACM 25th International Conference on Program Comprehension (ICPC).. IEEE Press. https:\/\/doi.org\/10.1109\/icpc.2017.1.","DOI":"10.1109\/icpc.2017.1"},{"issue":"6","key":"95_CR16","doi-asserted-by":"publisher","first-page":"559","DOI":"10.1109\/TSE.2015.2506164","volume":"42","author":"EA Barbosa","year":"2016","unstructured":"Barbosa EA, Garcia A, Robillard MP, Jakobus B (2016) Enforcing exception handling policies with a domain-specific language. IEEE Trans Softw Eng 42(6):559\u2013584.","journal-title":"IEEE Trans Softw Eng"},{"issue":"99","key":"95_CR17","doi-asserted-by":"publisher","first-page":"1","DOI":"10.1109\/TSE.2017.2716925","volume":"PP","author":"EA Barbosa","year":"2017","unstructured":"Barbosa EA, Garcia A (2017) Global-aware recommendations for repairing violations in exception handling. IEEE Trans Softw Eng PP(99):1\u20131. https:\/\/doi.org\/10.1109\/TSE.2017.2716925.","journal-title":"IEEE Trans Softw Eng"},{"key":"95_CR18","doi-asserted-by":"publisher","first-page":"73","DOI":"10.1145\/3267183.3267191","volume-title":"Proceedings of the VII Brazilian Symposium on Software Components, Architectures, and Reuse, SBCARS \u201918","author":"DBC de Sousa","year":"2018","unstructured":"de Sousa DBC, Maia PH, Rocha LS, Viana W (2018) Analysing the evolution of exception handling anti-patterns in large-scale projects: a case study In: Proceedings of the VII Brazilian Symposium on Software Components, Architectures, and Reuse, SBCARS \u201918, 73\u201382.. ACM, New York. https:\/\/doi.org\/10.1145\/3267183.3267191."},{"key":"95_CR19","doi-asserted-by":"publisher","unstructured":"Barbosa EA, Garcia A, Barbosa SDJ (2014) Categorizing faults in exception handling: a study of open source projects In: 2014 Brazilian Symposium on Software Engineering.. IEEE. https:\/\/doi.org\/10.1109\/sbes.2014.19.","DOI":"10.1109\/sbes.2014.19"},{"key":"95_CR20","volume-title":"The Java tutorial: a short course on the basics, 6th edn. Java Series","author":"R Gallardo","year":"2014","unstructured":"Gallardo R, Hommel S, Kannan S, Gordon J, Zakhour S. B. (2014) The Java tutorial: a short course on the basics, 6th edn. Java Series. Addison-Wesley Professional, Boston."},{"key":"95_CR21","unstructured":"Yuan D, Luo Y, Zhuang X, Rodrigues GR, Zhao X, Zhang Y, Jain P, Stumm M (2014) Simple testing can prevent most critical failures: An analysis of production failures in distributed data-inte nsive systems In: 11th {USENIX} Symposium on Operating Systems Design and Implementation ({OSDI} 14), 249\u2013265."},{"key":"95_CR22","unstructured":"Sinha S, Orso A, Harrold MJ (2004) Automated support for development, maintenance, and testing in the presence of implicit control flow In: Proceedings of the 26th International Conference on Software Engineering, 336\u2013345.. IEEE Computer Society."},{"issue":"2","key":"95_CR23","doi-asserted-by":"publisher","first-page":"333","DOI":"10.1016\/j.jss.2008.06.035","volume":"82","author":"C-T Chen","year":"2009","unstructured":"Chen C-T, Cheng YC, Hsieh C-Y, Wu I-L (2009) Exception handling refactorings: directed by goals and driven by bug fixing. J Syst Softw 82(2):333\u2013345.","journal-title":"J Syst Softw"},{"key":"95_CR24","unstructured":"Coelho R, Rocha J, Melo H (2018) A catalogue of Java exception handling bad smells and refactorings In: Pattern Languages of Programs (PLoP), 2018 25th International Conference On.. The Hillside Group. http:\/\/www.hillside.net\/plop\/2018\/papers\/proceedings\/."},{"key":"95_CR25","doi-asserted-by":"publisher","first-page":"336","DOI":"10.1007\/978-3-540-44995-9_20","volume-title":"Software Reuse: Advances in Software Reusability","author":"Alexandre L. Correa","year":"2000","unstructured":"Correa AL, Werner CM, Zaverucha G (2000) Object oriented design expertise reuse: an approach based on heuristics, design patterns and anti-patterns In: Software Reuse: Advances in Software Reusability, 336\u2013352.. Springer. https:\/\/doi.org\/10.1007\/978-3-540-44995-9_20."},{"key":"95_CR26","doi-asserted-by":"publisher","DOI":"10.1002\/9781118181034","volume-title":"Case study research in software engineering: guidelines and examples, 1st edn.","author":"P Runeson","year":"2012","unstructured":"Runeson P, Host M, Rainer A, Regnell B (2012) Case study research in software engineering: guidelines and examples, 1st edn.. Wiley Publishing, Hoboken."},{"key":"95_CR27","volume-title":"Research design: qualitative, quantitative, and mixed methods approaches","author":"JW Creswell","year":"2014","unstructured":"Creswell JW (2014) Research design: qualitative, quantitative, and mixed methods approaches. Sage publications, California."},{"key":"95_CR28","doi-asserted-by":"publisher","unstructured":"Chatzipetrou P, \u0160mite D, van Solingen R (2018) When and who leaves matters: emerging results from an empirical study of employee turnover In: Proceedings of the 12th ACM\/IEEE International symposium on empirical software engineering and measurement, ESEM \u201918, 53\u20131534.. ACM, New York. https:\/\/doi.org\/10.1145\/3239235.3267431.","DOI":"10.1145\/3239235.3267431"},{"issue":"2","key":"95_CR29","doi-asserted-by":"publisher","first-page":"228","DOI":"10.1177\/001979391006300203","volume":"63","author":"VY Haines","year":"2010","unstructured":"Haines VY, Jalette P, Larose K (2010) The influence of human resource management practices on employee voluntary turnover rates in the canadian non governmental sector. ILR Review 63(2):228\u2013246. https:\/\/doi.org\/10.1177\/001979391006300203.","journal-title":"ILR Review"},{"issue":"5","key":"95_CR30","doi-asserted-by":"publisher","first-page":"60","DOI":"10.1109\/MS.2015.82","volume":"33","author":"Darja Smite","year":"2016","unstructured":"Smite D, van Solingen R (2016) What\u2019s the true hourly cost of offshoring?IEEE Softw 33(5):60\u201370. https:\/\/doi.org\/10.1109\/MS.2015.82.","journal-title":"IEEE Software"},{"key":"95_CR31","doi-asserted-by":"publisher","unstructured":"Palomba F, Bavota G, Di Penta M, Oliveto R, De Lucia A (2014) Do they really smell bad? A study on developers\u2019 perception of bad code smells In: 2014 IEEE International Conference on Software Maintenance and Evolution, 101\u2013110.. IEEE. https:\/\/doi.org\/10.1109\/icsme.2014.32.","DOI":"10.1109\/icsme.2014.32"},{"key":"95_CR32","doi-asserted-by":"publisher","unstructured":"Nogueira AF, Ribeiro JC, Zenha-Rela MA (2017) Trends on empty exception handlers for Java open source libraries In: 2017 IEEE 24th International Conference on Software Analysis, Evolution and Reengineering (SANER), 412\u2013416.. IEEE. https:\/\/doi.org\/10.1109\/saner.2017.7884644.","DOI":"10.1109\/saner.2017.7884644"},{"key":"95_CR33","doi-asserted-by":"publisher","unstructured":"Wohlin C (2014) Guidelines for snowballing in systematic literature studies and a replication in software engineering In: Proceedings of the 18th International Conference on Evaluation and Assessment in Software Engineering - EASE \u201914.. ACM Press. https:\/\/doi.org\/10.1145\/2601248.2601268.","DOI":"10.1145\/2601248.2601268"},{"key":"95_CR34","doi-asserted-by":"publisher","unstructured":"Ebert F, Castor F (2013) A study on developers\u2019 perceptions about exception handling bugs In: 2013 IEEE International Conference on Software Maintenance.. IEEE. https:\/\/doi.org\/10.1109\/icsm.2013.69.","DOI":"10.1109\/icsm.2013.69"},{"key":"95_CR35","doi-asserted-by":"publisher","unstructured":"Sawadpong P, Allen EB, Williams BJ (2012) Exception handling defects: an empirical study In: 2012 IEEE 14th International Symposium on High-Assurance Systems Engineering, 90\u201397.. IEEE. https:\/\/doi.org\/10.1109\/hase.2012.24.","DOI":"10.1109\/hase.2012.24"},{"key":"95_CR36","doi-asserted-by":"publisher","unstructured":"Bonif\u00e1cio R, Carvalho F, Ramos GN, Kulesza U, Coelho R (2015) The use of C++ exception handling constructs: a comprehensive study In: 2015 IEEE 15th International Working Conference on Source Code Analysis and Manipulation (SCAM), 21\u201330.. IEEE. https:\/\/doi.org\/10.1109\/scam.2015.7335398.","DOI":"10.1109\/scam.2015.7335398"},{"issue":"3","key":"95_CR37","doi-asserted-by":"publisher","first-page":"1264","DOI":"10.1007\/s10664-016-9443-7","volume":"22","author":"R Coelho","year":"2017","unstructured":"Coelho R, Almeida L, Gousios G, Van Deursen A, Treude C (2017) Exception handling bug hazards in Android. Empir Softw Eng 22(3):1264\u20131304.","journal-title":"Empir Softw Eng"},{"key":"95_CR38","doi-asserted-by":"publisher","unstructured":"Queiroz FD, Coelho R (2016) Characterizing the exception handling code of android apps In: 2016 X Brazilian Symposium on Software Components, Architectures and Reuse (SBCARS), 131\u2013140.. IEEE. https:\/\/doi.org\/10.1109\/sbcars.2016.25.","DOI":"10.1109\/sbcars.2016.25"},{"key":"95_CR39","doi-asserted-by":"publisher","unstructured":"Marinescu C (2011) Are the classes that use exceptions defect prone? In: Proceedings of the 12th international workshop and the 7th annual ERCIM workshop on Principles on software evolution and software evolution - IWPSE-EVOL \u201911.. ACM. https:\/\/doi.org\/10.1145\/2024445.2024456.","DOI":"10.1145\/2024445.2024456"},{"key":"95_CR40","doi-asserted-by":"publisher","unstructured":"Cassee N, Pinto G, Castor F, Serebrenik A (2018) How swift developers handle errors In: Proceedings of the 15th International Conference on Mining Software Repositories - MSR \u201918. https:\/\/doi.org\/10.1145\/3196398.3196428.","DOI":"10.1145\/3196398.3196428"},{"key":"95_CR41","doi-asserted-by":"publisher","unstructured":"Osman H, Chi\u015f A, Schaerer J, Ghafari M, Nierstrasz O (2017) On the evolution of exception usage in java projects In: 2017 IEEE 24th International Conference on Software Analysis, Evolution and Reengineering (SANER), 422\u2013426.. IEEE. https:\/\/doi.org\/10.1109\/saner.2017.7884646.","DOI":"10.1109\/saner.2017.7884646"},{"key":"95_CR42","doi-asserted-by":"publisher","unstructured":"Barbosa EA, Garcia A (2011) Analyzing exceptional interfaces on evolving frameworks In: 2011 Fifth Latin-American Symposium on Dependable Computing Workshops, 17\u201320.. IEEE. https:\/\/doi.org\/10.1109\/ladcw.2011.19.","DOI":"10.1109\/ladcw.2011.19"},{"key":"95_CR43","doi-asserted-by":"publisher","unstructured":"Marinescu C (2013) Should we beware the exceptions? An empirical study on the eclipse project In: 2013 15th International Symposium on Symbolic and Numeric Algorithms for Scientific Computing.. IEEE. https:\/\/doi.org\/10.1109\/synasc.2013.40.","DOI":"10.1109\/synasc.2013.40"},{"key":"95_CR44","doi-asserted-by":"publisher","unstructured":"Oliveira J, Cacho N, Borges D, Silva T, Castor F (2016) An exploratory study of exception handling behavior in evolving android and java applications In: Proceedings of the 30th Brazilian Symposium on Software Engineering - SBES \u201916.. ACM. https:\/\/doi.org\/10.1145\/2973839.2973843.","DOI":"10.1145\/2973839.2973843"}],"container-title":["Journal of the Brazilian Computer Society"],"original-title":[],"language":"en","link":[{"URL":"http:\/\/link.springer.com\/content\/pdf\/10.1186\/s13173-019-0095-5.pdf","content-type":"application\/pdf","content-version":"vor","intended-application":"text-mining"},{"URL":"http:\/\/link.springer.com\/article\/10.1186\/s13173-019-0095-5\/fulltext.html","content-type":"text\/html","content-version":"vor","intended-application":"text-mining"},{"URL":"http:\/\/link.springer.com\/content\/pdf\/10.1186\/s13173-019-0095-5.pdf","content-type":"application\/pdf","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2024,8,13]],"date-time":"2024-08-13T10:46:09Z","timestamp":1723545969000},"score":1,"resource":{"primary":{"URL":"https:\/\/journal-bcs.springeropen.com\/articles\/10.1186\/s13173-019-0095-5"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2020,1,27]]},"references-count":44,"journal-issue":{"issue":"1","published-print":{"date-parts":[[2020,12]]}},"alternative-id":["95"],"URL":"https:\/\/doi.org\/10.1186\/s13173-019-0095-5","relation":{},"ISSN":["0104-6500","1678-4804"],"issn-type":[{"value":"0104-6500","type":"print"},{"value":"1678-4804","type":"electronic"}],"subject":[],"published":{"date-parts":[[2020,1,27]]},"assertion":[{"value":"12 February 2019","order":1,"name":"received","label":"Received","group":{"name":"ArticleHistory","label":"Article History"}},{"value":"29 December 2019","order":2,"name":"accepted","label":"Accepted","group":{"name":"ArticleHistory","label":"Article History"}},{"value":"27 January 2020","order":3,"name":"first_online","label":"First Online","group":{"name":"ArticleHistory","label":"Article History"}},{"value":"The authors declare that they have no competing interests","order":1,"name":"Ethics","group":{"name":"EthicsHeading","label":"Competing interests"}}],"article-number":"1"}}