Abstract
Code smells tend to compromise software quality and also demand more effort by developers to maintain and evolve the application throughout its life-cycle. They have long been catalogued with corresponding mitigating solutions called refactoring operations. Researchers have argued that due to the subjectiveness of the code smells detection process, proposing an effective use of automatic support for this end is a non trivial task. This systematic literature review (SLR) has a twofold goal: the first is to identify the main code smells detection techniques and tools discussed in the literature, and the second is to analyze to which extent visual techniques have been applied to support the former. Over eighty primary studies indexed in major scientific repositories were identified by our search string in this SLR. Then, following existing best practices for secondary studies, we applied inclusion/exclusion criteria to select the most relevant works, extract their features and classify them. We found that the most commonly used approaches to code smells detection are search-based (30.1%), metric-based (24.1%), and symptom-based approaches (19.3%). Most of the studies (83.1%) use open-source software, with the Java language occupying the first position (77.1%). In terms of code smells, God Class (51.8%), Feature Envy (33.7%), and Long Method (26.5%) are the most covered ones. Machine learning (ML) techniques are used in 35% of the studies, with genetic programming, decision tree, support vector machines and association rules being the most used algorithms. Around 80% of the studies only detect code smells, without providing visualization techniques. In visualization-based approaches several methods are used, such as: city metaphors, 3D visualization techniques, interactive ambient visualization, polymetric views, or graph models. This paper presents an up-to-date review on the state-of-the-art techniques and tools used for code smells detection and visualization. We confirm that the detection of code smells is a non trivial task, and there is still a lot of work to be done in terms of: reducing the subjectivity associated with the definition and detection of code smells; increasing the diversity of detected code smells and of supported programming languages; constructing and sharing oracles and datasets to facilitate the replication of code smells detection and visualization techniques validation experiments.
Similar content being viewed by others
Notes
Data obtained in 22/09/2019.
Weka is a collection of ML algorithms for data mining tasks (http://www.cs.waikato.ac.nz/ml/weka/).
References
Abreu FB, Goulão M, Esteves R (1995) Toward the design quality evaluation of object-oriented software systems. In: 5th International Conference on Software Quality. American Society for Quality, American Society for Quality, Austin, Texas, EUA, pp 44–57
Al Dallal J (2015) Identifying refactoring opportunities in object-oriented code: a systematic literature review. Inf Softw Technol 58:231–249. https://doi.org/10.1016/j.infsof.2014.08.002, http://arxiv.org/abs/1011.1669v3arXiv:1011.1669v3
Alkharabsheh K, Crespo Y, Manso E, Taboada JA (2018) Software design smell detection: a systematic mapping study. Softw Qual J. https://doi.org/10.1007/s11219-018-9424-8
Azeem MI, Palomba F, Shi L, Wang Q (2019) Machine learning techniques for code smell detection: a systematic literature review and meta-analysis. Inf Softw Technol 108:115–138. https://doi.org/10.1016/j.infsof.2018.12.009
Belikov A, Belikov V (2015) A citation-based, author- and age-normalized, logarithmic index for evaluation of individual researchers independently of publication counts [version 1; peer review: 2 approved]. F1000Research 4:884. https://doi.org/10.12688/f1000research.7070.1
Brereton P, Kitchenham BA, Budgen D, Turner M, Khalil M (2007) Lessons from applying the systematic literature review process within the software engineering domain. J Syst Softw 80(4):571–583
Brown WH, Malveau RC, McCormick HWS, Mowbray TJ (1998) AntiPatterns: refactoring software, architectures, and projects in crisis, 1st edn. Wiley, Hoboken
Carver JC (2010) Towards reporting guidelines for experimental replications: a proposal. In: 1st international workshop on replication in empirical software engineering. Citeseer
Carver JC, Juristo N, Baldassarre MT, Vegas S (2014) Replications of software engineering experiments. Empir Softw Eng 19(2):267–276. https://doi.org/10.1007/s10664-013-9290-8
Chen L, Babar MA (2011) A systematic review of evaluation of variability management approaches in software product lines. Inf Softw Technol 53(4):344–362
Chen Z, Chen L, Ma W, Xu B (2016) Detecting code smells in Python programs. In: 2016 international conference on Software Analysis, Testing and Evolution (SATE), pp 18–23. https://doi.org/10.1109/SATE.2016.10
dos Reis JP, e Abreu FB, de F Carneiro G (2017) Code smells detection 2.0: crowdsmelling and visualization. In: 2017 12th Iberian Conference on Information Systems and Technologies (CISTI), pp 1–4. https://doi.org/10.23919/CISTI.2017.7975961
Dyba T, Dingsøyr T (2008) Empirical studies of agile software development: a systematic review. Inf Softw Technol 50(9–10):833–859. https://doi.org/10.1016/j.infsof.2008.01.006
Fard AM, Mesbah A (2013) JSNOSE: detecting JavaScript code smells. In: 2013 IEEE 13th international working conference on Source Code Analysis and Manipulation (SCAM), pp 116–125. https://doi.org/10.1109/SCAM.2013.6648192
Fernandes E, Oliveira J, Vale G, Paiva T, Figueiredo E (2016) A review-based comparative study of bad smell detection tools. In: Proceedings of the 20th international conference on evaluation and assessment in software engineering. ACM, Limerick, Ireland. https://doi.org/10.1145/2915970.2915984
Fleiss JL, Levin B, Paik MC (2013) Statistical methods for rates and proportions, 3rd edn. Wiley, Hoboken
Fokaefs M, Tsantalis N, Chatzigeorgiou A (2007) Jdeodorant: identification and removal of feature envy bad smells. In: 2007 IEEE international conference on software maintenance, pp 519–520. https://doi.org/10.1109/ICSM.2007.4362679
Fowler M, Beck K, Brant J, Opdyke W, Roberts D (1999) Refactoring: improving the design of existing code. Addison-Wesley Longman Publishing Co., Inc, Boston
Gerlitz T, Tran QM, Dziobek C (2015) Detection and handling of model smells for matlab/simulink models. In: MASE@MoDELS
Gupta A, Suri B, Misra S (2017) A systematic literature review: code bad smells in Java Source Code. In: ICCSA 2017, vol 10409, pp 665–682. https://doi.org/10.1007/978-3-319-62407-5
Gupta A, Suri B, Kumar V, Misra S, Blažauskas T, Damaševičius R (2018) Software code smell prediction model using Shannon, Rényi and Tsallis entropies. Entropy 20(5):1–20. https://doi.org/10.3390/e20050372
Hammad M, Basit HA, Jarzabek S, Koschke R (2020) A systematic mapping study of clone visualization. Comput Sci Rev 37:100266
Kaur A (2019) A systematic literature review on empirical analysis of the relationship between code smells and software quality attributes. Arch Comput Methods Eng. https://doi.org/10.1007/s11831-019-09348-6
Kessentini M, Ouni A (2017) Detecting android smells using multi-objective genetic programming. In: 2017 IEEE/ACM 4th international conference on Mobile Software Engineering and Systems (MOBILESoft), pp 122–132. https://doi.org/10.1109/MOBILESoft.2017.29
Kessentini W, Kessentini M, Sahraoui H, Bechikh S, Ouni A (2014) A cooperative parallel search-based software engineering approach for code-smells detection. IEEE Trans Software Eng 40(9):841–861. https://doi.org/10.1109/TSE.2014.2331057
Khomh F, Penta MD, Guéhéneuc YG, Antoniol G (2012) An exploratory study of the impact of antipatterns on class change- and fault-proneness. Empir Softw Eng 17(3):243–275. https://doi.org/10.1007/s10664-011-9171-y
Kitchenham B (2008) The role of replications in empirical software engineering—a word of warning. Empir Softw Eng 13(2):219–221. https://doi.org/10.1007/s10664-008-9061-0
Kitchenham B, Charters S (2007) Guidelines for performing systematic literature reviews in software engineering. Tech. rep., Keele University and Durham University
Kreimer J (2005) Adaptive detection of design flaws. In: Electronic notes in theoretical computer science, Research Group Programming Languages and Compilers, Department of Computer Science, University of Paderborn, Germany, vol 141, pp 117–136. https://doi.org/10.1016/j.entcs.2005.02.059
Lacerda G, Petrillo F, Pimenta M, Guéhéneuc YG (2020) Code smells and refactoring: a tertiary systematic review of challenges and observations. J Syst Softw 167:110610. https://doi.org/10.1016/j.jss.2020.110610
Landis JR, Koch GG (1977) The measurement of observer agreement for categorical data. Biometrics 33(1):159–174. https://doi.org/10.2307/2529310
Lanza M, Marinescu R (2006) Object-oriented metrics in practice, vol 1. Springer. https://doi.org/10.1017/CBO9781107415324.004, http://arxiv.org/abs/1011.1669v3arXiv:1011.1669v3
Mantyla M, Vanhanen J, Lassenius C (2004) Bad smells—humans as code critics. In: 20th IEEE international conference on software maintenance, 2004 Proceedings, pp 399–408. https://doi.org/10.1109/ICSM.2004.1357825
Marinescu C, Marinescu R, Mihancea PF, Wettel R (2005) iplasma: an integrated platform for quality assessment of object-oriented design. In: In ICSM (industrial and tool volume). Society Press, pp 77–80
Martin RC (2002) Agile software development: principles, patterns, and practices, 1st edn. Prentice Hall, Upper Saddle River
McHugh ML (2012) Interrater reliability: the kappa statistic. Biochem Med 22(3):276–282
Merino L, Ghafari M, Anslow C, Nierstrasz O (2018) A systematic literature review of software visualization evaluation. J Syst Softw 144:165–180. https://doi.org/10.1016/j.jss.2018.06.027
Moha N, Guéhéneuc YG, Duchien L, Le Meur AF (2010) DECOR: a method for the specification and detection of code and design smells. IEEE Trans Softw Eng 36(1):20–36. https://doi.org/10.3390/e200503720
Monperrus M, Bruch M, Mezini M (2010) Detecting missing method calls in object-oriented software. In: D’Hondt T (ed) ECOOP 2010—object-oriented programming. Springer, Berlin, pp 2–25
Noblit G, Hare R (1988) Meta-ethnography: synthesizing qualitative studies. Qualitative research methods. SAGE Publications, Thousand Oaks
Olbrich SM, Cruzes DS, Sjøberg DIK (2010) Are all code smells harmful? A study of god classes and brain classes in the evolution of three open source systems. In: 2010 IEEE international conference on software maintenance, pp 1–10
Palomba F, Panichella A, Lucia AD, Oliveto R, Zaidman A (2016) A textual-based technique for smell detection. In: IEEE 24th International Conference on Program Comprehension (ICPC), pp 1–10. https://doi.org/10.1109/ICPC.2016.7503704
Palomba F, Nucci DD, Panichella A, Zaidman A, Lucia AD (2017) Lightweight detection of android-specific code smells: the adoctor project. In: 2017 IEEE 24th international conference on Software Analysis, Evolution and Reengineering (SANER), pp 487–491. https://doi.org/10.1109/SANER.2017.7884659
Rasool G, Arshad Z (2015) A review of code smell mining techniques. J Softw Evol Process 27(11):867–895. https://doi.org/10.3390/e200503721
Rattan D, Bhatia R, Singh M (2013) Software clone detection: a systematic review. Inf Softw Technol 55(7):1165–1199. https://doi.org/10.3390/e200503722
Sabir F, Palma F, Rasool G, Guéhéneuc YG, Moha N (2019) A systematic literature review on the detection of smells and their evolution in object-oriented and service-oriented systems. Softw Pract Exp 49(1):3–39
Santos JAM, Rocha-Junior JB, Prates LCL, do Nascimento RS, Freitas MF, de Mendonça MG (2018) A systematic review on the code smell effect. J Syst Softw 144:450–477. https://doi.org/10.1016/j.jss.2018.07.035
Shull FJ, Carver JC, Vegas S, Juristo N (2008) The role of replications in empirical software engineering. Empir Softw Eng 13(2):211–218. https://doi.org/10.1007/s10664-008-9060-1
Singh S, Kaur S (2017) A systematic literature review: refactoring for disclosing code smells in object oriented software. Ain Shams Eng J. https://doi.org/10.1016/j.asej.2017.03.002
Sirikul K, Soomlek C (2016) Automated detection of code smells caused by null checking conditions in Java programs. In: 2016 13th International Joint Conference on Computer Science and Software Engineering (JCSSE), pp 1–7. https://doi.org/10.1109/JCSSE.2016.7748884
Travassos G, Shull F, Fredericks M, Basili VR (1999) Detecting defects in object-oriented designs: using reading techniques to increase software quality. In: Proceedings of the 14th ACM SIGPLAN conference on object-oriented programming, systems, languages, and applications. ACM, New York, NY, USA, OOPSLA ’99, pp 47–56. https://doi.org/10.1145/320384.320389
Tsantalis N, Chaikalis T, Chatzigeorgiou A (2008) JDeodorant: identification and removal of type-checking bad smells. In: CSMR 2008—12th European conference on software maintenance and reengineering, pp 329–331. https://doi.org/10.1109/CSMR.2008.4493342
van Emden E, Moonen L (2002) Java quality assurance by detecting code smells. In: Ninth working conference on reverse engineering, 2002. Proceedings, pp 97–106. https://doi.org/10.1109/WCRE.2002.1173068
Wake WC (2003) Refactoring workbook. Addison-Wesley Longman Publishing Co., Inc, Boston
Wasylkowski A, Zeller A, Lindig C (2007) Detecting object usage anomalies. In: Proceedings of the the 6th joint meeting of the European software engineering conference and the ACM SIGSOFT symposium on the foundations of software engineering. ACM, Dubrovnik, Croatia. https://doi.org/10.1145/1287624.1287632
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 ’14, pp 1–10. https://doi.org/10.1145/2601248.2601268, http://arxiv.org/abs/1011.1669v3arXiv:1011.1669v3
Yamashita A, Moonen L (2012) Do code smells reflect important maintainability aspects? In: IEEE International Conference on Software Maintenance, ICSM, pp 306–315. https://doi.org/10.1109/ICSM.2012.6405287
Yamashita A, Moonen L (2013) To what extent can maintenance problems be predicted by code smell detection? An empirical study. Inf Softw Technol 55(12):2223–2242. https://doi.org/10.1016/j.infsof.2013.08.002
Zhang H, Babar MA, Tell P (2011) Identifying relevant studies in software engineering. Inf Softw Technol 53(6):625–637
Zhang M, Hall T, Baddoo N (2010) Code Bad Smells: a review of current knowledge. J Softw Maint Evol 26(12):1172–1192
Acknowledgements
This work was partially funded by the Portuguese Foundation for Science and Technology, under ISTAR’s projects UIDB/ 04466/2020 and UIDP/04466/2020.
Author information
Authors and Affiliations
Corresponding author
Additional information
Publisher's Note
Springer Nature remains neutral with regard to jurisdictional claims in published maps and institutional affiliations.
Appendices
Appendices
1.1 Appendix 1: Studies included in the review
ID | Title | Authors | Year | Publish type | Source title |
---|---|---|---|---|---|
S1 | Java quality assurance by detecting code smells | E. van Emden; L. Moonen | 2002 | Conference | 9th Working Conference on Reverse Engineering (WCRE) |
S2 | Insights into system-wide code duplication | Rieger, M., Ducasse, S., Lanza, M. | 2004 | Conference | Working Conference on Reverse Engineering, IEEE Computer Society Press |
S3 | Detection strategies: Metrics-based rules for detecting design flaws | R. Marinescu | 2004 | Conference | 20th International Conference on Software Maintenance (ICSM). IEEE Computer Society Press |
S4 | Product metrics for automatic identification of “bad smell” design problems in Java source-code | M. J. Munro | 2005 | Conference | 11th IEEE International Software Metrics Symposium (METRICS’05) |
S5 | Multi-criteria detection of bad smells in code with UTA method | Walter B., Pietrzak B. | 2005 | Conference | International Conference on Extreme Programming and Agile Processes in Software Engineering (XP) |
S6 | Adaptive detection of design flaws | Kreimer J. | 2005 | Conference | Fifth Workshop on Language Descriptions, Tools, and Applications (LDTA) |
S7 | Visualization-Based Analysis of Quality for Large-Scale Software Systems | G. Langelier, H.A. Sahraoui,; P. Poulin | 2005 | Conference | 20th International Conference on Automated Software Engineering (ASE) |
S8 | Automatic generation of detection algorithms for design defects | Moha N., Guéhéneuc Y.-G., Leduc P. | 2006 | Conference | 21st IEEE/ACM International Conference on Automated Software Engineering (ASE) |
S9 | Object-Oriented Metrics in Practice | M. Lanza; R. Marinescu | 2006 | Book | Springer-Verlag |
S10 | Detecting Object Usage Anomalies | Andrzej Wasylkowski; Andreas Zeller; Christian Lindig | 2007 | Conference | 6th Joint Meeting of the European Software Engineering Conference and the ACM SIGSOFT Symposium on the Foundations of Software Engineering (ESEC/FSE) |
S11 | Empirically evaluating the usefulness of software visualization techniques in program comprehension activities | De F. Carneiro G., Orrico A.C.A., De Mendonça Neto M.G. | 2007 | Conference | VI Jornadas Iberoamericanas de Ingenieria de Software e Ingenieria del Conocimiento (JIISIC) |
S12 | A Catalogue of Lightweight Visualizations to Support Code Smell Inspection | Chris Parnin; Carsten Gorg; Ogechi Nnadi | 2008 | Conference | 4th ACM Symposium on Software Visualization (SoftVis) |
S13 | A domain analysis to specify design defects and generate detection algorithms | Moha N., Guéhéneuc Y.-G., Le Meur A.-F., Duchien L. | 2008 | Conference | International Conference on Fundamental Approaches to Software Engineering (FASE) |
S14 | JDeodorant: Identification and removal of type-checking bad smells | Tsantalis N., Chaikalis T., Chatzigeorgiou A. | 2008 | Conference | European Conference on Software Maintenance and Reengineering (CSMR) |
S15 | Empirical evaluation of clone detection using syntax suffix trees | Raimar Falk, Pierre Frenzel, Rainer Koschke | 2008 | Journal | Empirical Software Engineering |
S16 | Visual Detection of Design Anomalies | K. Dhambri, H. Sahraoui,; P. Poulin | 2008 | Conference | 12th European Conference on Software Maintenance and Reengineering (CSMR) |
S17 | Visually localizing design problems with disharmony maps | Richard Wettel; Michele Lanza | 2008 | Conference | 4th ACM Symposium on Software Visualization (SoftVis) |
S18 | A Bayesian Approach for the Detection of Code and Design Smells | F. Khomh; S. Vaucher; Y. G. Gueheneuc; H. Sahraoui | 2009 | Conference | 9th International Conference on Quality Software (QSIC) |
S19 | An Interactive Ambient Visualization for Code Smells | Emerson Murphy-Hill; Andrew P. Black | 2010 | Conference | 5th International Symposium on Software Visualization (SoftVis) |
S20 | Learning from 6,000 Projects: Lightweight Cross-project Anomaly Detection | Natalie Gruska; Andrzej Wasylkowski; Andreas Zeller | 2010 | Conference | 19th International Symposium on Software Testing and Analysis |
S21 | Identifying Code Smells with Multiple Concern Views | G. d. F. Carneiro; M. Silva; L. Mara; E. Figueiredo; C. Sant’Anna; A. Garcia; M. Mendonca | 2010 | Conference | Brazilian Symposium on Software Engineering (SBES) |
S22 | Reducing Subjectivity in Code Smells Detection: Experimenting with the Long Method | S. Bryton; F. Brito e Abreu; M. Monteiro | 2010 | Conference | 7th International Conference on the Quality of Information and Communications Technology (QUATIC) |
S23 | DECOR: A method for the specification and detection of code and design smells | Moha N., Guéhéneuc Y.-G., Duchien L., Le Meur A.-F. | 2010 | Journal | IEEE Transactions on Software Engineering |
S24 | IDS: An immune-inspired approach for the detection of software design smells | Hassaine S., Khomh F., Guéhéneucy Y.-G., Hamel S. | 2010 | Conference | 7th International Conference on the Quality of Information and Communications Technology (QUATIC) |
S25 | Detecting Missing Method Calls in Object-Oriented Software | Martin Monperrus Marcel Bruch Mira Mezini | 2010 | Conference | European Conference on Object-Oriented Programming (ECOOP) |
S26 | From a domain analysis to the specification and detection of code and design smells | Naouel Moha, Yann-Gaël Guéhéneuc, Anne-Françoise Le Meur, Laurence Duchien, Alban Tiberghien | 2010 | Journal | Formal Aspects of Computing |
S27 | BDTEX: A GQM-based Bayesian approach for the detection of antipatterns | Khomh F., Vaucher S., Guéhéneuc Y.-G., Sahraoui H. | 2011 | Journal | Journal of Systems and Software |
S28 | IDE-based Real-time Focused Search for Near-miss Clones | Minhaz F. Zibran; Chanchal K. Roy | 2012 | Conference | 27th Annual ACM Symposium on Applied Computing (SAC) |
S29 | Detecting Bad Smells with Weight Based Distance Metrics Theory | J. Dexun; M. Peijun; S. Xiaohong; W. Tiantian | 2012 | Conference | 2nd International Conference on Instrumentation, Measurement, Computer, Communication and Control (IMCCC) |
S30 | Analytical learning based on a meta-programming approach for the detection of object-oriented design defects | Mekruksavanich S., Yupapin P.P., Muenchaisri P. | 2012 | Journal | Information Technology Journal |
S31 | A New Design Defects Classification: Marrying Detection and Correction | Rim Mahouachi, Marouane Kessentini, Khaled Ghedira | 2012 | Conference | Fundamental Approaches to Software Engineering |
S32 | Clones in Logic Programs and How to Detect Them | Céline Dandois, Wim Vanhoof | 2012 | Conference | Logic-Based Program Synthesis and Transformation |
S33 | Smurf: A svm-based incremental anti-pattern detection approach | Maiga, A., Ali, N., Bhattacharya, N., Sabane, A., Guéhéneuc, Y-G, & Aimeur, E | 2012 | Conference | 19th Working Conference on Reverse Engineering (WCRE) |
S34 | Support vector machines for anti- pattern detection | Maiga A, Ali N, Bhattacharya N, Sabané A, Guéhéneuc Y-G, Antoniol G, Aïmeur E | 2012 | Conference | 27th IEEE/ACM International Conference on Automated Software Engineering (ASE) |
S35 | Detecting Missing Method Calls As Violations of the Majority Rule | Martin Monperrus; Mira Mezini | 2013 | Journal | ACM Transactions on Software Engineering Methodology |
S36 | Code Smell Detection: Towards a Machine Learning-Based Approach | F. A. Fontana; M. Zanoni; A. Marino; M. V. Mantyla; | 2013 | Conference | 29th IEEE International Conference on Software Maintenance (ICSM) |
S37 | Identification of Refused Bequest Code Smells | E. Ligu; A. Chatzigeorgiou; T. Chaikalis; N. Ygeionomakis | 2013 | Conference | 29th IEEE International Conference on Software Maintenance (ICSM) |
S38 | JSNOSE: Detecting JavaScript Code Smells | A. M. Fard; A. Mesbah | 2013 | Conference | 13th International Working Conference on Source Code Analysis and Manipulation (SCAM) |
S39 | Interactive ambient visualizations for soft advice | Murphy-Hill E., Barik T., Black A.P. | 2013 | Journal | Information Visualization |
S40 | A novel approach to effective detection and analysis of code clones | Rajakumari K.E., Jebarajan T. | 2013 | Conference | 3rd International Conference on Innovative Computing Technology (INTECH) |
S41 | Competitive coevolutionary code-smells detection | Boussaa M., Kessentini W., Kessentini M., Bechikh S., Ben Chikha S. | 2013 | Conference | International Symposium on Search Based Software Engineering (SSBSE) |
S42 | Detecting bad smells in source code using change history information | Palomba F., Bavota G., Di Penta M., Oliveto R., De Lucia A., Poshyvanyk D. | 2013 | Conference | 28th International Conference on Automated Software Engineering (ASE). IEEE/ACM |
S43 | Code-Smell Detection As a Bilevel Problem | Dilan Sahin; Marouane Kessentini; Slim Bechikh; Kalyanmoy Deb | 2014 | Journal | ACM Transactions on Software Engineering Methodology |
S44 | Two level dynamic approach for Feature Envy detection | S. Kumar; J. K. Chhabra | 2014 | Conference | International Conference on Computer and Communication Technology (ICCCT). |
S45 | A Cooperative Parallel Search-Based Software Engineering Approach for Code-Smells Detection | Kessentini W., Kessentini M., Sahraoui H., Bechikh S., Ouni A. | 2014 | Journal | IEEE Transactions on Software Engineering |
S46 | SourceMiner: Towards an Extensible Multi-perspective Software Visualization Environment | Glauco de Figueiredo Carneiro, Manoel Gomes de Mendonça Neto | 2014 | Conference | International Conference on Enterprise Information Systems (ICEIS) |
S47 | Including Structural Factors into the Metrics-based Code Smells Detection | Bartosz Walter; Błażej Matuszyk; Francesca Arcelli Fontana | 2015 | Conference | XP’2015 Workshops |
S48 | Textual Analysis for Code Smell Detection | Fabio Palomba | 2015 | Conference | 37th International Conference on Software Engineering |
S49 | Using Developers’ Feedback to Improve Code Smell Detection | Mario Hozano; Henrique Ferreira; Italo Silva; Baldoino Fonseca; Evandro Costa | 2015 | Conference | 30th Annual ACM Symposium on Applied Computing (SAC) |
S50 | Code Bad Smell Detection through Evolutionary Data Mining | S. Fu; B. Shen | 2015 | Conference | 2015 ACM/IEEE International Symposium on Empirical Software Engineering and Measurement (ESEM) |
S51 | Mining Version Histories for Detecting Code Smells | F. Palomba; G. Bavota; M. D. Penta; R. Oliveto; D. Poshyvanyk; A. De Lucia | 2015 | Conference | IEEE Transactions on Software Engineering |
S52 | Detection and handling of model smells for MATLAB/simulink models | Gerlitz T., Tran Q.M., Dziobek C. | 2015 | Conference | CEUR Workshop Proceedings |
S53 | Experience report: Evaluating the effectiveness of decision trees for detecting code smells | Amorim L., Costa E., Antunes N., Fonseca B., Ribeiro M. | 2015 | Conference | 26th International Symposium on Software Reliability Engineering (ISSRE) |
S54 | Detecting software design defects using relational association rule mining | Gabriela Czibula, Zsuzsanna Marian, Istvan Gergely Czibula | 2015 | Journal | Knowledge and Information Systems |
S55 | A Graph-based Approach to Detect Unreachable Methods in Java Software | Simone Romano; Giuseppe Scanniello; Carlo Sartiani; Michele Risi | 2016 | Conference | 31st Annual ACM Symposium on Applied Computing (SAC) |
S56 | Comparing and experimenting machine learning techniques for code smell detection | Arcelli Fontana F., Mäntylä M.V., Zanoni M., Marino A. | 2016 | Journal | Empirical Software Engineering |
S57 | A Lightweight Approach for Detection of Code Smells | Ghulam Rasool, Zeeshan Arshad | 2016 | Journal | Arabian Journal for Science and Engineering |
S58 | Multi-objective code-smells detection using good and bad design examples | Usman Mansoor, Marouane Kessentini, Bruce R. Maxim, Kalyanmoy Deb | 2016 | Journal | Software Quality Journal |
S59 | Continuous Detection of Design Flaws in Evolving Object-oriented Programs Using Incremental Multi-pattern Matching | Sven Peldszus; Géza Kulcsár; Malte Lochau; Sandro Schulze | 2016 | Conference | 31st IEEE/ACM International Conference on Automated Software Engineering (ASE) |
S60 | Metric and rule based automated detection of antipatterns in object-oriented software systems | M. T. Aras, Y. E. Selçuk | 2016 | Conference | 2016 7th International Conference on Computer Science and Information Technology (CSIT) |
S61 | Automated detection of code smells caused by null checking conditions in Java programs | K. Sirikul, C. Soomlek | 2016 | Conference | 2016 13th International Joint Conference on Computer Science and Software Engineering (JCSSE) |
S62 | A textual-based technique for Smell Detection | F. Palomba, A. Panichella, A. De Lucia, R. Oliveto, A. Zaidman | 2016 | Conference | 24th International Conference on Program Comprehension (ICPC) |
S63 | Detecting Code Smells in Python Programs | Z. Chen, L. Chen, W. Ma, B. Xu | 2016 | Conference | 2016 International Conference on Software Analysis; Testing and Evolution (SATE) |
S64 | Interactive Code Smells Detection: An Initial Investigation | Mkaouer, Mohamed Wiem | 2016 | Conference | Symposium on Search-Based Software Engineering (SSBSE) |
S65 | Detecting shotgun surgery bad smell using similarity measure distribution model | Saranya G., Khanna Nehemiah H., Kannan A., Vimala S. | 2016 | Journal | Asian Journal of Information Technology |
S66 | Detecting Android Smells Using Multi-objective Genetic Programming | Marouane Kessentini; Ali Ouni | 2017 | Conference | 4th International Conference on Mobile Software Engineering and Systems (MOBILESoft) |
S67 | Smells Are Sensitive to Developers!: On the Efficiency of (Un)Guided Customized Detection | Mario Hozano; Alessandro Garcia; Nuno Antunes; Baldoino Fonseca; Evandro Costa | 2017 | Conference | 25th International Conference on Program Comprehension (ICPC) |
S68 | An automated code smell and anti-pattern detection approach | S. Velioglu, Y. E. Selçuk | 2017 | Conference | 2017 IEEE 15th International Conference on Software Engineering Research; Management and Applications (SERA) |
S69 | Lightweight detection of Android-specific code smells: The aDoctor project | Palomba F., Di Nucci D., Panichella A., Zaidman A., De Lucia A. | 2017 | Conference | 24th IEEE International Conference on Software Analysis, Evolution, and Reengineering (SANER) |
S70 | On the Use of Smelly Examples to Detect Code Smells in JavaScript | Ian Shoenberger, Mohamed Wiem Mkaouer, Marouane Kessentini | 2017 | Conference | European Conference on the Applications of Evolutionary Computation (EvoApplications) |
S71 | A Support Vector Machine Based Approach for Code Smell Detection | A. Kaur; S. Jain; S. Goel | 2017 | Conference | International Conference on Machine Learning and Data Science (MLDS) |
S72 | c-JRefRec: Change-based identification of Move Method refactoring opportunities | N. Ujihara; A. Ouni; T. Ishio; K. Inoue | 2017 | Conference | 24th International Conference on Software Analysis, Evolution and Reengineering (SANER) |
S73 | A Feature Envy Detection Method Based on Dataflow Analysis | W. Chen; C. Liu; B. Li | 2018 | Conference | 42nd Annual Computer Software and Applications Conference (COMPSAC) |
S74 | A Hybrid Approach To Detect Code Smells using Deep Learning | Hadj-Kacem, M; Bouassida, N | 2018 | Conference | 13th International Conference on Evaluation of Novel Approaches to Software Engineering (ENASE) |
S75 | Deep Learning Based Feature Envy Detection | Hui Liu and Zhifeng Xu and Yanzhen Zou | 2018 | Conference | 33rd ACM/IEEE International Conference on Automated Software Engineering (ASE) |
S76 | Detecting Bad Smells in Software Systems with Linked Multivariate Visualizations | H. Mumtaz; F. Beck; D. Weiskopf | 2018 | Conference | Working Conference on Software Visualization (VisSoft) |
S77 | Detecting code smells using machine learning techniques: Are we there yet? | D. Di Nucci; F. Palomba; D. A. Tamburri; A. Serebrenik; A. De Lucia | 2018 | Conference | 25th International Conference on Software Analysis, Evolution and Reengineering (SANER) |
S78 | Exploring the Use of Rapid Type Analysis for Detecting the Dead Method Smell in Java Code | S. Romano; G. Scanniello | 2018 | Conference | 44th Euromicro Conference on Software Engineering and Advanced Applications (SEAA) |
S79 | Model level code smell detection using EGAPSO based on similarity measures | Saranya, G; Nehemiah, HK; Kannan, A; Nithya, V | 2018 | Journal | Alexandria Engineering Journal |
S80 | Software Code Smell Prediction Model Using Shannon, Renyi and Tsallis Entropies | Gupta, A; Suri, B; Kumar, V; Misra, S; Blazauskas, T; Damasevicius, R | 2018 | Journal | Entropy |
S81 | Towards Feature Envy Design Flaw Detection at Block Level | Ã. Kiss; P. F. Mihancea | 2018 | Conference | International Conference on Software Maintenance and Evolution (ICSME) |
S82 | Understanding metric-based detectable smells in Python software: A comparative study | Chen, ZF; Chen, L; Ma, WWY; Zhou, XY; Zhou, YM; Xu, BW | 2018 | Journal | Information and Software Technology |
S83 | SP-J48: a novel optimization and machine-learning-based approach for solving complex problems: special application in software engineering for detecting code smells | Amandeep Kaur, Sushma Jain, Shivani Goel | 2019 | Journal | Neural Computing and Applications |
1.2 Appendix 2: Studies after applying inclusion and exclusion criteria (phase 3)
ID | Title | Authors | Year | Publish type | Source title |
---|---|---|---|---|---|
1 | Java quality assurance by detecting code smells | E. van Emden; L. Moonen | 2002 | Conference | 9th Working Conference on Reverse Engineering (WCRE) |
2 | Insights into system-wide code duplication | Rieger, M., Ducasse, S., Lanza, M. | 2004 | Conference | 11th Working Conference on Reverse Engineering (WCRE) |
3 | Detection strategies: Metrics-based rules for detecting design flaws | R. Marinescu | 2004 | Conference | 20th International Conference on Software Maintenance (ICSM) |
4 | Product metrics for automatic identification of “bad smell” design problems in Java source-code | M. J. Munro | 2005 | Conference | 11th IEEE International Software Metrics Symposium (METRICS’05) |
5 | Multi-criteria detection of bad smells in code with UTA method | Walter B., Pietrzak B. | 2005 | Conference | International Conference on Extreme Programming and Agile Processes in Software Engineering (XP) |
6 | Adaptive detection of design flaws | Kreimer J. | 2005 | Conference | Fifth Workshop on Language Descriptions, Tools, and Applications (LDTA) |
7 | Visualization-Based Analysis of Quality for Large-Scale Software Systems | G. Langelier, H.A. Sahraoui,; P. Poulin | 2005 | Conference | 20th International Conference on Automated Software Engineering (ASE) |
8 | Automatic generation of detection algorithms for design defects | Moha N., Guéhéneuc Y.-G., Leduc P. | 2006 | Conference | 21st IEEE/ACM International Conference on Automated Software Engineering (ASE) |
9 | Object-Oriented Metrics in Practice | M. Lanza; R. Marinescu | 2006 | Book | Springer-Verlag |
10 | Detecting Object Usage Anomalies | Andrzej Wasylkowski; Andreas Zeller; Christian Lindig | 2007 | Conference | 6th Joint Meeting of the European Software Engineering Conference and the ACM SIGSOFT Symposium on the Foundations of Software Engineering (ESEC/FSE) |
11 | Using Concept Analysis to Detect Co-change Patterns | Tudor Girba; Stephane Ducasse; Adrian Kuhn; Radu Marinescu; Ratiu Daniel | 2007 | Conference | 9th International Workshop on Principles of Software Evolution: In Conjunction with the 6th ESEC/FSE Joint Meeting |
12 | Empirically evaluating the usefulness of software visualization techniques in program comprehension activities | De F. Carneiro G., Orrico A.C.A., De Mendonça Neto M.G. | 2007 | Conference | VI Jornadas Iberoamericanas de Ingenieria de Software e Ingenieria del Conocimiento (JIISIC) |
13 | A Catalogue of Lightweight Visualizations to Support Code Smell Inspection | Chris Parnin; Carsten Gorg; Ogechi Nnadi | 2008 | Conference | 4th ACM Symposium on Software Visualization (SoftVis) |
14 | A domain analysis to specify design defects and generate detection algorithms | Moha N., Guéhéneuc Y.-G., Le Meur A.-F., Duchien L. | 2008 | Conference | Lecture Notes in Computer Science (including subseries Lecture Notes in Artificial Intelligence and Lecture Notes in Bioinformatics) |
15 | JDeodorant: Identification and removal of type-checking bad smells | Tsantalis N., Chaikalis T., Chatzigeorgiou A. | 2008 | Conference | European Conference on Software Maintenance and Reengineering (CSMR) |
16 | A Survey about the Intent to Use Visual Defect Annotations for Software Models | Jörg Rech, Axel Spriestersbach | 2008 | Conference | Model Driven Architecture – Foundations and Applications |
17 | Empirical evaluation of clone detection using syntax suffix trees | Raimar Falk, Pierre Frenzel, Rainer Koschke | 2008 | Journal | Empirical Software Engineering |
18 | Visual Detection of Design Anomalies | K. Dhambri, H. Sahraoui, P. Poulin | 2008 | Conference | 12th European Conference on Software Maintenance and Reengineering (CSMR) |
19 | Detecting bad smells in object oriented design using design change propagation probability matrix | A. Rao; K. Raddy | 2008 | Conference | International MultiConference of Engineers and Computer Scientists (IMECS) |
20 | Visually localizing design problems with disharmony maps | Richard Wettel; Michele Lanza | 2008 | Conference | 4th ACM Symposium on Software visualization (SoftVis) |
21 | A Bayesian Approach for the Detection of Code and Design Smells | F. Khomh; S. Vaucher; Y. G. Gueheneuc; H. Sahraoui | 2009 | Conference | 2009 Ninth International Conference on Quality Software |
22 | A Flexible Framework for Quality Assurance of Software Artefacts with Applications to Java, UML, and TTCN-3 Test Specifications | J. Nodler; H. Neukirchen; J. Grabowski | 2009 | Conference | 2009 International Conference on Software Testing Verification and Validation (ICST) |
23 | An Interactive Ambient Visualization for Code Smells | Emerson Murphy-Hill; Andrew P. Black | 2010 | Conference | 5th International Symposium on Software Visualization (SoftVis) |
24 | Learning from 6,000 Projects: Lightweight Cross-project Anomaly Detection | Natalie Gruska; Andrzej Wasylkowski; Andreas Zeller | 2010 | Conference | 19th International Symposium on Software Testing and Analysis (ISSTA) |
25 | Identifying Code Smells with Multiple Concern Views | G. d. F. Carneiro; M. Silva; L. Mara; E. Figueiredo; C. Sant’Anna; A. Garcia; M. Mendonca | 2010 | Conference | Brazilian Symposium on Software Engineering (SBES) |
26 | Reducing Subjectivity in Code Smells Detection: Experimenting with the Long Method | S. Bryton; F. Brito e Abreu; M. Monteiro | 2010 | Conference | 7th International Conference on the Quality of Information and Communications Technology (QUATIC) |
27 | DECOR: A method for the specification and detection of code and design smells | Moha N., Guéhéneuc Y.-G., Duchien L., Le Meur A.-F. | 2010 | Journal | IEEE Transactions on Software Engineering |
28 | IDS: An immune-inspired approach for the detection of software design smells | Hassaine S., Khomh F., Guéhéneucy Y.-G., Hamel S. | 2010 | Conference | 7th International Conference on the Quality of Information and Communications Technology (QUATIC) |
29 | Detecting Missing Method Calls in Object-Oriented Software | Martin Monperrus Marcel Bruch Mira Mezini | 2010 | Conference | European Conference on Object-Oriented Programming (ECOOP) |
30 | From a domain analysis to the specification and detection of code and design smells | Naouel Moha, Yann-Gaël Guéhéneuc, Anne-Françoise Le Meur, Laurence Duchien, Alban Tiberghien | 2010 | Journal | Formal Aspects of Computing |
31 | BDTEX: A GQM-based Bayesian approach for the detection of antipatterns | Khomh F., Vaucher S., Guéhéneuc Y.-G., Sahraoui H. | 2011 | Journal | Journal of Systems and Software |
32 | An Approach for Source Code Classification Using Software Metrics and Fuzzy Logic to Improve Code Quality with Refactoring Techniques | Pornchai Lerthathairat, Nakornthip Prompoon | 2011 | Conference | 2nd International Conference on Software Engineering and Computer Systems (ICSECS) |
33 | IDE-based Real-time Focused Search for Near-miss Clones | Minhaz F. Zibran; Chanchal K. Roy | 2012 | Conference | 27th Annual ACM Symposium on Applied Computing (SAC) |
34 | Detecting Bad Smells with Weight Based Distance Metrics Theory | J. Dexun; M. Peijun; S. Xiaohong; W. Tiantian | 2012 | Conference | Second International Conference on Instrumentation, Measurement, Computer, Communication and Control (IMCCC) |
35 | Analytical learning based on a meta-programming approach for the detection of object-oriented design defects | Mekruksavanich S., Yupapin P.P., Muenchaisri P. | 2012 | Journal | Information Technology Journal |
36 | Automatic identification of the anti-patterns using the rule-based approach | Polášek I., Snopko S., Kapustík I. | 2012 | Conference | 10th Jubilee International Symposium on Intelligent Systems and Informatics (SISY) |
37 | A New Design Defects Classification: Marrying Detection and Correction | Rim Mahouachi, Marouane Kessentini, Khaled Ghedira | 2012 | Conference | International Conference on Fundamental Approaches to Software Engineering (FASE) |
38 | Clones in Logic Programs and How to Detect Them | Céline Dandois, Wim Vanhoof | 2012 | Conference | International Symposium on Logic-Based Program Synthesis and Transformation (LOPSTR) |
39 | Smurf: A svm-based incremental anti-pattern detection approach | Maiga, A., Ali, N., Bhattacharya, N., Sabane, A., Guéhéneuc, Y. G., & Aimeur, E | 2012 | Conference | 19th Working Conference on Reverse Engineering (WCRE) |
40 | Support vector machines for anti- pattern detection | Maiga A, Ali N, Bhattacharya N, Sabané A, Guéhéneuc Y-G, Antoniol G, Aïmeur E | 2012 | Conference | 27th IEEE/ACM International Conference on Automated Software Engineering (ASE) |
41 | Detecting Missing Method Calls As Violations of the Majority Rule | Martin Monperrus; Mira Mezini | 2013 | Journal | ACM Transactions on Software Engineering Methodology |
42 | Code Smell Detection: Towards a Machine Learning-Based Approach | F. A. Fontana; M. Zanoni; A. Marino; M. V. Mantyla; | 2013 | Conference | 29th IEEE International Conference on Software Maintenance (ICSM) |
43 | Identification of Refused Bequest Code Smells | E. Ligu; A. Chatzigeorgiou; T. Chaikalis; N. Ygeionomakis | 2013 | Conference | 29th IEEE International Conference on Software Maintenance (ICSM) |
44 | JSNOSE: Detecting JavaScript Code Smells | A. M. Fard; A. Mesbah | 2013 | Conference | 13th International Working Conference on Source Code Analysis and Manipulation (SCAM) |
45 | Interactive ambient visualizations for soft advice | Murphy-Hill E., Barik T., Black A.P. | 2013 | Journal | Information Visualization |
46 | A novel approach to effective detection and analysis of code clones | Rajakumari K.E., Jebarajan T. | 2013 | Conference | 3rd International Conference on Innovative Computing Technology (INTECH) |
47 | Competitive coevolutionary code-smells detection | Boussaa M., Kessentini W., Kessentini M., Bechikh S., Ben Chikha S. | 2013 | Conference | Lecture Notes in Computer Science (including subseries Lecture Notes in Artificial Intelligence and Lecture Notes in Bioinformatics) |
48 | Detecting bad smells in source code using change history information | Palomba F., Bavota G., Di Penta M., Oliveto R., De Lucia A., Poshyvanyk D. | 2013 | Conference | 28th IEEE/ACM International Conference on Automated Software Engineering (ASE) |
49 | Code-Smell Detection As a Bilevel Problem | Dilan Sahin; Marouane Kessentini; Slim Bechikh; Kalyanmoy Deb | 2014 | Journal | ACM Trans. Softw. Eng. Methodol. |
50 | Two level dynamic approach for Feature Envy detection | S. Kumar; J. K. Chhabra | 2014 | Conference | International Conference on Computer and Communication Technology (ICCCT) |
51 | A Cooperative Parallel Search-Based Software Engineering Approach for Code-Smells Detection | Kessentini W., Kessentini M., Sahraoui H., Bechikh S., Ouni A. | 2014 | Journal | IEEE Transactions on Software Engineering |
52 | SourceMiner: Towards an Extensible Multi-perspective Software Visualization Environment | Glauco de Figueiredo Carneiro, Manoel Gomes de Mendonça Neto | 2014 | Conference | International Conference on Enterprise Information Systems (ICEIS) |
53 | Including Structural Factors into the Metrics-based Code Smells Detection | Bartosz Walter; Błażej Matuszyk; Francesca Arcelli Fontana | 2015 | Conference | XP’2015 Workshops |
54 | Textual Analysis for Code Smell Detection | Fabio Palomba | 2015 | Conference | 37th International Conference on Software Engineering (ICSE) |
55 | Using Developers’ Feedback to Improve Code Smell Detection | Mario Hozano; Henrique Ferreira; Italo Silva; Baldoino Fonseca; Evandro Costa | 2015 | Conference | 30th Annual ACM Symposium on Applied Computing (SAC) |
56 | Code Bad Smell Detection through Evolutionary Data Mining | S. Fu; B. Shen | 2015 | Conference | 2015 ACM/IEEE International Symposium on Empirical Software Engineering and Measurement (ESEM) |
57 | JSpIRIT: a flexible tool for the analysis of code smells | S. Vidal; H. Vazquez; J. A. Diaz-Pace; C. Marcos; A. Garcia; W. Oizumi | 2015 | Conference | 34th International Conference of the Chilean Computer Science Society (SCCC) |
58 | Mining Version Histories for Detecting Code Smells | F. Palomba; G. Bavota; M. D. Penta; R. Oliveto; D. Poshyvanyk; A. De Lucia | 2015 | Conference | IEEE Transactions on Software Engineering |
59 | Detection and handling of model smells for MATLAB/simulink models | Gerlitz T., Tran Q.M., Dziobek C. | 2015 | Conference | CEUR Workshop Proceedings |
60 | Experience report: Evaluating the effectiveness of decision trees for detecting code smells | Amorim L., Costa E., Antunes N., Fonseca B., Ribeiro M. | 2015 | Conference | 26th International Symposium on Software Reliability Engineering (ISSRE) |
61 | Detecting software design defects using relational association rule mining | Gabriela Czibula, Zsuzsanna Marian, Istvan Gergely Czibula | 2015 | Journal | Knowledge and Information Systems |
62 | A Graph-based Approach to Detect Unreachable Methods in Java Software | Simone Romano; Giuseppe Scanniello; Carlo Sartiani; Michele Risi | 2016 | Conference | 31st Annual ACM Symposium on Applied Computing (SAC) |
63 | Comparing and experimenting machine learning techniques for code smell detection | Arcelli Fontana F., Mäntylä M.V., Zanoni M., Marino A. | 2016 | Journal | Empirical Software Engineering |
64 | A Lightweight Approach for Detection of Code Smells | Ghulam Rasool, Zeeshan Arshad | 2016 | Journal | Arabian Journal for Science and Engineering |
65 | Multi-objective code-smells detection using good and bad design examples | Usman Mansoor, Marouane Kessentini, Bruce R. Maxim, Kalyanmoy Deb | 2016 | Journal | Software Quality Journal |
66 | Continuous Detection of Design Flaws in Evolving Object-oriented Programs Using Incremental Multi-pattern Matching | Sven Peldszus; Géza Kulcsár; Malte Lochau; Sandro Schulze | 2016 | Conference | 31st IEEE/ACM International Conference on Automated Software Engineering (ASE) |
67 | Metric and rule based automated detection of antipatterns in object-oriented software systems | M. T. Aras, Y. E. Selçuk | 2016 | Conference | 7th International Conference on Computer Science and Information Technology (CSIT) |
68 | Automated detection of code smells caused by null checking conditions in Java programs | K. Sirikul, C. Soomlek | 2016 | Conference | 13th International Joint Conference on Computer Science and Software Engineering (JCSSE) |
69 | A textual-based technique for Smell Detection | F. Palomba, A. Panichella, A. De Lucia, R. Oliveto, A. Zaidman | 2016 | Conference | 24th International Conference on Program Comprehension (ICPC) |
70 | Detecting Code Smells in Python Programs | Z. Chen, L. Chen, W. Ma, B. Xu | 2016 | Conference | International Conference on Software Analysis, Testing and Evolution (SATE) |
71 | DT : a detection tool to automatically detect code smell in software project | Liu, Xinghua; Zhang, Cheng | 2016 | Conference | 4th International Conference on Machinery, Materials and Information Technology Applications |
72 | Interactive Code Smells Detection: An Initial Investigation | Mkaouer, Mohamed Wiem | 2016 | Conference | Symposium on Search-Based Software Engineering (SSBSE) |
73 | Automatic detection of bad smells from code changes | Hammad M., Labadi A. | 2016 | Journal | International Review on Computers and Software |
74 | Detecting shotgun surgery bad smell using similarity measure distribution model | Saranya G., Khanna Nehemiah H., Kannan A., Vimala S. | 2016 | Journal | Asian Journal of Information Technology |
75 | Detecting Android Smells Using Multi-objective Genetic Programming | Marouane Kessentini; Ali Ouni | 2017 | Conference | 4th International Conference on Mobile Software Engineering and Systems (MOBILESoft) |
76 | Smells Are Sensitive to Developers!: On the Efficiency of (Un)Guided Customized Detection | Mario Hozano; Alessandro Garcia; Nuno Antunes; Baldoino Fonseca; Evandro Costa | 2017 | Conference | 25th International Conference on Program Comprehension |
77 | An arc-based approach for visualization of code smells | M. Steinbeck | 2017 | Conference | 24th International Conference on Software Analysis; Evolution and Reengineering (SANER). IEEE |
78 | An automated code smell and anti-pattern detection approach | S. Velioglu, Y. E. Selçuk | 2017 | Conference | 15th International Conference on Software Engineering Research; Management and Applications (SERA) |
79 | Lightweight detection of Android-specific code smells: The aDoctor project | Palomba F., Di Nucci D., Panichella A., Zaidman A., De Lucia A. | 2017 | Conference | 24th IEEE International Conference on Software Analysis, Evolution, and Reengineering (SANER) |
80 | On the Use of Smelly Examples to Detect Code Smells in JavaScript | Ian Shoenberger, Mohamed Wiem Mkaouer, Marouane Kessentini | 2017 | Conference | European Conference on the Applications of Evolutionary Computation (EvoApplications) |
81 | A Support Vector Machine Based Approach for Code Smell Detection | A. Kaur; S. Jain; S. Goel | 2017 | Conference | International Conference on Machine Learning and Data Science (MLDS) |
82 | An ontology-based approach to analyzing the occurrence of code smells in software | Da Silva Carvalho, L.P., Novais, R., Do Nascimento Salvador, L., De Mendonça Neto, M.G. | 2017 | Conference | 19th International Conference on Enterprise Information Systems (ICEIS) |
83 | Automatic multiprogramming bad smell detection with refactoring | Verma, A; Kumar, A; Kaur, I | 2017 | Journal | International Journal of Advanced and Applied Sciences |
84 | c-JRefRec: Change-based identification of Move Method refactoring opportunities | N. Ujihara; A. Ouni; T. Ishio; K. Inoue | 2017 | Conference | 24th International Conference on Software Analysis, Evolution and Reengineering (SANER) |
85 | Finding bad code smells with neural network models | Kim, D.K. | 2017 | Journal | International Journal of Electrical and Computer Engineering |
86 | Metric based detection of refused bequest code smell | B. M. Merzah; Y. E. Selçuk | 2017 | Conference | 9th International Conference on Computational Intelligence and Communication Networks (CICN) |
87 | Systematic exhortation of code smell detection using JSmell for Java source code | M. Sangeetha; P. Sengottuvelan | 2017 | Conference | International Conference on Inventive Systems and Control (ICISC) |
88 | A Feature Envy Detection Method Based on Dataflow Analysis | W. Chen; C. Liu; B. Li | 2018 | Conference | 42nd Annual Computer Software and Applications Conference (COMPSAC) |
89 | A Hybrid Approach To Detect Code Smells using Deep Learning | Hadj-Kacem, M; Bouassida, N | 2018 | Conference | 13th International Conference on Evaluation of Novel Approaches to Software Engineering (ENASE) |
90 | Automatic detection of feature envy using machine learning techniques | Özkalkan, Z., Aydin, K., Tetik, H.Y., Sağlam, R.B. | 2018 | Conference | 12th Turkish National Software Engineering Symposium |
91 | Code-smells identification by using PSO approach | Ramesh, G., Mallikarjuna Rao, C. | 2018 | Journal | International Journal of Recent Technology and Engineering |
92 | Deep Learning Based Feature Envy Detection | Hui Liu and Zhifeng Xu and Yanzhen Zou | 2018 | Conference | 33rd ACM/IEEE International Conference on Automated Software Engineering (ASE) |
93 | Detecting Bad Smells in Software Systems with Linked Multivariate Visualizations | H. Mumtaz; F. Beck; D. Weiskopf | 2018 | Conference | Working Conference on Software Visualization (VisSoft) |
94 | Detecting code smells using machine learning techniques: Are we there yet? | D. Di Nucci; F. Palomba; D. A. Tamburri; A. Serebrenik; A. De Lucia | 2018 | Conference | 25th International Conference on Software Analysis, Evolution and Reengineering (SANER) |
95 | DT: An Upgraded Detection Tool to Automatically Detect Two Kinds of Code Smell: Duplicated Code and Feature Envy | Xinghua Liu and Cheng Zhang | 2018 | Conference | International Conference on Geoinformatics and Data Analysis |
96 | Exploring the Use of Rapid Type Analysis for Detecting the Dead Method Smell in Java Code | S. Romano; G. Scanniello | 2018 | Conference | 2018 44th Euromicro Conference on Software Engineering and Advanced Applications (SEAA) |
97 | Model level code smell detection using EGAPSO based on similarity measures | Saranya, G; Nehemiah, HK; Kannan, A; Nithya, V | 2018 | Journal | Alexandria Engineering Journal |
98 | Software Code Smell Prediction Model Using Shannon, Renyi and Tsallis Entropies | Gupta, A; Suri, B; Kumar, V; Misra, S; Blazauskas, T; Damasevicius, R | 2018 | Journal | Entropy |
99 | Towards Feature Envy Design Flaw Detection at Block Level | Ã. Kiss; P. F. Mihancea | 2018 | Conference | International Conference on Software Maintenance and Evolution (ICSME) |
100 | Understanding metric-based detectable smells in Python software: A comparative study | Chen, ZF; Chen, L; Ma, WWY; Zhou, XY; Zhou, YM; Xu, BW | 2018 | Journal | Information and Software Technology |
101 | SP-J48: a novel optimization and machine-learning-based approach for solving complex problems: special application in software engineering for detecting code smells | Amandeep Kaur, Sushma Jain, Shivani Goel | 2019 | Journal | Neural Computing and Applications |
102 | Visualizing code bad smells | Hammad, M., Alsofriya, S. | 2019 | Journal | International Journal of Advanced Computer Science and Applications |
1.3 Appendix 3: Quality assessment
Study | QC1 | QC2 | QC3 | QC4 | QC5 | QC6 | QC7 | QC8 | Total |
---|---|---|---|---|---|---|---|---|---|
Venue quality | Data collected | Findings | Recognized relevance | Validation | Replication | Evaluation | Visualization | ||
S1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | 1 | 6 |
S2 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 5 |
S3 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 6 |
S4 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 4 |
S5 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 4 |
S6 | 1 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | 5 |
S7 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 5 |
S8 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 6 |
S9 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 5 |
S10 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | 0 | 5 |
S11 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 3 |
S12 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 4 |
S13 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 4 |
S14 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 6 |
S15 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | 0 | 5 |
S16 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 3 |
S17 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 6 |
S18 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | 1 | 6 |
S19 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 3 |
S20 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 4 |
S21 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 7 |
S22 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 3 |
S23 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 4 |
S24 | 1 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | 5 |
S25 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 1 | 5 |
S26 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 4 |
S27 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 6 |
S28 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 6 |
S29 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | 0 | 5 |
S30 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 6 |
S31 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 7 |
S32 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 |
S33 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 6 |
S34 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 0 | 4 |
S35 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 6 |
S36 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 3 |
S37 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 6 |
S38 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 4 |
S39 | 1 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | 5 |
S40 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 6 |
S41 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | 0 | 5 |
S42 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | 0 | 5 |
S43 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 4 |
S44 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 7 |
S45 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 5 |
S46 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 4 |
S47 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 5 |
S48 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 6 |
S49 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 6 |
S50 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 5 |
S51 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 6 |
S52 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | 1 | 6 |
S53 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 5 |
S54 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 6 |
S55 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 6 |
S56 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 6 |
S57 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 2 |
S58 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 7 |
S59 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 0 | 4 |
S60 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 6 |
S61 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 5 |
S62 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 6 |
S63 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 7 |
S64 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 1 | 5 |
S65 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 6 |
S66 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 7 |
S67 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 5 |
S68 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | 4 |
S69 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 6 |
S70 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 0 | 4 |
S71 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 3 |
S72 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 5 |
S73 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 3 |
S74 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | 5 |
S75 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 5 |
S76 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 6 |
S77 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 2 |
S78 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 6 |
S79 | 0 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 5 |
S80 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 5 |
S81 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 5 |
S82 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 3 |
S83 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 2 |
S84 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 5 |
S85 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 3 |
S86 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 2 |
S87 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 |
S88 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | 5 |
S89 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 6 |
S90 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 3 |
S91 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 |
S92 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 6 |
S93 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 5 |
S94 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 5 |
S95 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 3 |
S96 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 6 |
S97 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 5 |
S98 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 0 | 4 |
S99 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | 6 |
S100 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 6 |
S101 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 6 |
S102 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 3 |
Total | 63 | 83 | 102 | 85 | 54 | 8 | 78 | 18 | 491 |
1.4 Appendix 4: Description of code smells detected in the studies, according to the authors
Code smell | Description | References |
---|---|---|
Alternative Classes with Different Interface | One class supports different classes, but their interface is different | |
AntiSingleton | A class that provides mutable class variables, which consequently could be used as global variables | [26] |
God Class (Large Class or Blob) | Class that has many responsibilities and consequently contains many methods and variables. The same Single Responsibility Principle (SRP) also applies in this case | |
Brain Class | Class that tends to centralize the functionality of the system and consequently complex. They are therefore assumed to be difficult to understand and maintain. However, unlike God Classes, Brain Classes do not use much data from foreign classes and are slightly more cohesive | |
Brain Method | Often a method starts out as a “normal” method, but due to more and more functionality being added gets out of control, making it difficult to understand or maintain. Brain methods tend to centralize the functionality of a class | [32] |
Careless Cleanup | The exception resource can be interrupted by another exception | [21] |
Class Data Should Be Private | A class that exposes its fields, thus violating the principle of encapsulation | [26] |
Closure Smells | Nested functions declared in JavaScript, are called closures. Closures make it possible to emulate object-oriented notions, such as public, private members, and privileged members. Inner functions have access to the parameters and variables—except for the this and argument variables—of the functions in which they are nested, even after the outer function has returned. Four smells related to the concept of function closures (long scope chaining, closures in loops, variable name conflict in closures, accessing the this reference in closures) | [14] |
Code clone/Duplicated code | Consists of equal or very similar passages in different fragments of the same code base | |
Comments | Comments should be used with care as they are generally not required. Whenever it is necessary to insert a comment, it is worth checking if the code cannot be more expressive | |
Complex Class | A class that has (at least) one large and complex method, in terms of cyclomatic complexity and LOCs | [26] |
Complex Container Comprehension | A container comprehension (including list comprehension, set comprehension, dictionary comprehension, and generator expression) that is too complex | [11] |
Complex List Comprehension | A list comprehension that is too complex. List comprehensions in Python provide a concise and efficient way to create new lists. However, when list comprehensions contain complex expressions, they are no longer clear. Apparently, it is hard to analyze control flows of complex list comprehensions | [11] |
Coupling between JavaScript, HTML, and CSS | In web applications, HTML is meant for presenting content and structure, CSS for styling, and JavaScript for functional behaviour. It is a well-established programming technique, known as division of concerns, to hold these three entities apart. Unfortunately, JavaScript code is frequently mixed with markup and styling code by web developers, which negatively affects software understanding, maintenance and debugging efforts in web applications | [14] |
Data class | A class that only acts as a data container, without any behaviour. Other classes are typically responsible for manipulating their data, which is the case of Feature Envy, | |
Data Clump | Data structures that always appear together, and the entire collection loses its sense when one of the elements is not present | |
Dead Code | Characterized by a variable, attribute, or code fragment that is not used anywhere. Typically it is a result of a change in code with insufficient cleaning | |
Delegator | Overuse of delegation or misuse of inheritance | [29] |
Dispersed Coupling | Refers to a method which is tied to many operations dispersed among many classes throughout the system | [32] |
Divergent Change | A single class needs to be changed for many reasons. This is a strong indication that it is not sufficiently cohesive and must be divided | |
Dummy Handler | Dummy handler is only used for viewing the exception but it will not handle the exception | [21] |
Empty Catch Block | When the catch block is left blank in the catch statement | [21] |
Exception thrown in the finally block | How to handle the exception thrown inside the finally block of another try catch statement | [21] |
Excessive Global Variables | Global variables can be accessed in the JavaScript code from anywhere, even if they are defined in different files loaded on the same page. As such, naming conflicts between global variables in different JavaScript source files is common, which affects program dependability and correctness. The higher the number of global variables in the code, the more dependent existing modules are likely to be; and dependency increases errorproneness, and maintainability efforts | [14] |
Feature Envy | When a method is more interested in members of other classes than its own, is a clear sign that it is in the wrong class | |
Functional Decomposition | A procedural code in a technology that implements the OO paradigm (usually the main function that calls many others), caused by the previous expertise of the developers in a procedural language and little experience in OO | |
God Package | A package that is too large. That knows too much or does too much | [35] |
Inappropriate Intimacy | A case where two classes are known too, characterizing a high level of coupling | |
Incomplete Library Class | The software uses a library that is not complete, and therefore extensions to that library are required | |
Instanceof | In Java, the instanceof operator is used to check that an object is an instance of a given class or implements a certain interface. These are considered CS aspects because a concentration of instanceof operators in the same block of code may indicate a place where the introduction of an inheritance hierarchy or the use of method overloading might be a better solution | [53] |
Intensive Coupling | Refers to a method that is tied to many other operations located in only a few classes within the system | [32] |
Introduce null object | Repeated null checking conditions are added into the code to prevent the null pointer exception problem. By doing so, the duplications of null checking conditions could have been placed in different locations of the software system | [50] |
Large object | An object with too many responsibilities. An object that is doing too much should be refactored. Large objects may be restructured or broken into smaller objects | [14] |
Lazy Class | Classes that do not have sufficient responsibilities and therefore should not exist | |
Lazy object | An object that does too little. An object that is not doing enough work should be refactored. Lazy objects maybe collapsed or combined into other classes | [14] |
Long Base Class List | A class definition with too many base classes. Python supports a limited form of multiple inheritance. If an attribute in Python is not found in the derived class during execution, it is searched recursively in the base classes declared in the base class list in sequence. Too long base class list will limit the speed of interpretive execution | [11] |
Long Element Chain | An expression that is accessing an object through a long chain of elements by the bracket operator. Long Element Chain is directly caused by nested arrays. It is unreadable especially when a deep level of array traversing is taking place | [11] |
Long Lambda Function | A lambda function that is overly long, in term of the number of its characters | [11] |
Long Message Chain | An expression that is accessing an object through a long chain of attributes or methods by the dot operator | [11] |
Long Method | Very large method/function and, therefore, difficult to understand, extend and modify. It is very likely that this method has too many responsibilities, hurting one of the principles of a good OO design (SRP: Single Responsibility Principle | |
Long Parameter List | Extensive parameter list, which makes it difficult to understand and is usually an indication that the method has too many responsibilities | |
Long Scope Chaining | A method or a function that is multiply-nested | [11] |
Long Ternary Conditional Expression | A ternary conditional expression (“X if C else Y”) that is overly long | [11] |
Message Chain | One object accesses another, to then access another object belonging to this second, and so on, causing a high coupling between classes | |
Method call sequences | The interplay of multiple methods, though–in particular, whether a specific sequence of method calls is allowed or not–is neither specified nor checked at compile time | [55] |
Middle Man | Identified how much a class has almost no logic, as it delegates almost everything to another class | |
Misplaced Class | Suggests a class that is in a package that contains other classes not related to it | [42] |
Missing method calls | Overlook certain important method calls that are required at particular places in code | [39] |
Multiply-Nested Container | A container (including set, list, tuple, dict) that is multiply-nested. It directly produces expressions accessing an object through a long chain of indexed elements | [11] |
Nested Callback | A callback is a function passed as an argument to another (parent) function. Using excessive callbacks, however, can result in hard to read and maintain code due to their nested anonymous (and usually asynchronous) nature | [14] |
Nested Try Statements | When one or more try statements are contained in the try statement | [21] |
Null checking in a string comparison problem | Null checking conditions are usually found in string comparison, particularly in an if statement. This form of defensive programming can be employed to prevent the null pointer exception error. The same null checking statement is repeatedly appeared when the same String object is compared, resulting in a marvellous number of duplicated null checking conditions | [50] |
Parallel Inheritance | Existence of two hierarchies of classes that are fully connected, that is, when adding a subclass in one of the hierarchies, it is required that a similar subclass be created in the other | |
Primitive Obsession | It represents the situation where primitive types are used in place of light classes | |
Promiscuous Package | A package can be considered as promiscuous if it contains classes implementing too many features, making it too hard to understand and maintain | [42] |
Refused Bequest | It indicates that a subclass does not use inherited data or behaviors | |
Shotgun Surgery | Opposite to Divergent Change, because when it happens a modification, several different classes have to be changed | |
Spaghetti Code | Use of classes without structures, long methods without parameters, use of global variables, in addition to not exploiting and preventing the application of OO principles such as inheritance and polymorphism | |
Speculative Generality | Code snippets are designed to support future software behavior that is not yet required | |
Swiss Army Knife | Exposes the high complexity to meet the predictable needs of a part of the system (usually utility classes with many responsibilities) | |
Switch Statement | It is not necessarily smells by definition, but when they are widely used, they are usually a sign of problems, especially when used to identify the behavior of an object based on its type | |
Temporary Field | Member-only used in specific situations, and that outside of it has no meaning | |
Tradition Breaker | This design disharmony strategy takes its name from the principle that the interface of a class should increase in an evolutionary fashion. This means that a derived class should not break the inherited “tradition” and provide a large set of services which are unrelated to those provided by its base class | [32] |
Type Checking | Type-checking code is introduced in order to select a variation of an algorithm that should be executed, depending on the value of an attribute | [52] |
Typecast | Typecasts are used to explicitly convert an object from one class type into another. Many people consider typecasts to be problematic since it is possible to write illegal casting instructions in the source code which cannot be detected during compilation but result in runtime errors | [53] |
Unprotected Main | Outer exception will not be handled in the main program; it can only be handled in a subprogram or a function | [21] |
Useless Exception Handling | A try…except statement that does little | [11] |
Wide Subsystem Interface | A Subsystem Interface consists of classes that are accessible from outside the package they belong to. The flaw refers to the situation where this interface is very wide, which causes a very tight coupling between the package and the rest of the system | [57] |
1.5 Appendix 5: Frequencies of code smells detected in the studies
Code smell | No. of studies | % Studies | Programming language |
---|---|---|---|
God Class (Large Class or Blob) | 43 | 51.8 | Java, C/C++ , C#, Python |
Feature Envy | 28 | 33.7 | Java, C/C++ , C# |
Long Method | 22 | 26.5 | Java, C/C++ , C#, Python, JavaScript |
Data class | 18 | 21.7 | Java, C/C++ , C# |
Functional Decomposition | 17 | 20.5 | Java |
Spaghetti Code | 17 | 20.5 | Java |
Long Parameter List | 12 | 14.5 | Java, C/C++ , C#, Python, JavaScript |
Swiss Army Knife | 11 | 13.3 | Java |
Refused Bequest | 10 | 12.0 | Java, C/C++ , C#, JavaScript |
Shotgun Surgery | 10 | 12.0 | Java, C++ , C# |
Code clone/Duplicated code | 9 | 10.8 | Java, C/C++ , C# |
Lazy Class | 8 | 9.6 | Java, C++ , C# |
Divergent Change | 7 | 8.4 | Java, C# |
Dead Code | 4 | 4.8 | Java, C++ , C# |
Switch Statement | 4 | 4.8 | Java, C#, JavaScript |
Brain Class | 3 | 3.6 | Java, C++ |
Data Clump | 3 | 3.6 | Java, C/C++ , C# |
Long Message Chain | 3 | 3.6 | JavaScript, Python |
Misplaced Class | 3 | 3.6 | Java, C++ |
Parallel Inheritance | 3 | 3.6 | Java, C# |
Primitive Obsession | 3 | 3.6 | Java, C/C++ , C# |
Speculative Generality | 3 | 3.6 | Java, C# |
Temporary Field | 3 | 3.6 | Java, C# |
Dispersed Coupling | 2 | 2.4 | Java, C++ |
Empty Catch Block | 2 | 2.4 | Java, JavaScript |
Excessive Global Variables | 2 | 2.4 | JavaScript |
Intensive Coupling | 2 | 2.4 | Java, C++ |
Large object | 2 | 2.4 | JavaScript |
Lazy object | 2 | 2.4 | JavaScript |
Long Base Class List | 2 | 2.4 | Python |
Long Lambda Function | 2 | 2.4 | Python |
Long Scope Chaining | 2 | 2.4 | Python |
Long Ternary Conditional Expression | 2 | 2.4 | Python |
Message Chain | 2 | 2.4 | Java, C/C++ , C# |
Middle Man | 2 | 2.4 | Java, C/C++ , C# |
Missing method calls | 2 | 2.4 | Java |
Alternative Classes with Different Interface | 1 | 1.2 | Java, C# |
AntiSingleton | 1 | 1.2 | Java |
Brain Method | 1 | 1.2 | Java, C++ |
Careless Cleanup | 1 | 1.2 | Java |
Class Data Should Be Private | 1 | 1.2 | Java |
Closure Smells | 1 | 1.2 | JavaScript |
Comments | 1 | 1.2 | Java, C# |
Complex Class | 1 | 1.2 | Java |
Complex Container Comprehension | 1 | 1.2 | Python |
Complex List Comprehension | 1 | 1.2 | Python |
Coupling between JavaScript, HTML, and CSS | 1 | 1.2 | JavaScript |
Delegator | 1 | 1.2 | Java |
Dummy Handler | 1 | 1.2 | Java |
Exception thrown in the finally block | 1 | 1.2 | Java |
God Package | 1 | 1.2 | Java, C++ |
Inappropriate Intimacy | 1 | 1.2 | Java, C# |
Incomplete Library Class | 1 | 1.2 | Java, C# |
Instanceof | 1 | 1.2 | Java |
Introduce null object | 1 | 1.2 | Java |
Long Element Chain | 1 | 1.2 | Python |
Method call sequences | 1 | 1.2 | Java |
Multiply-Nested Container | 1 | 1.2 | Python |
Nested Callback | 1 | 1.2 | JavaScript |
Nested Try Statements | 1 | 1.2 | Java |
Null checking in a string comparison problem | 1 | 1.2 | Java |
Promiscuous Package | 1 | 1.2 | Java |
Tradition Breaker | 1 | 1.2 | Java, C++ |
Type Checking | 1 | 1.2 | Java |
Typecast | 1 | 1.2 | Java |
Unprotected Main | 1 | 1.2 | Java |
Useless Exception Handling | 1 | 1.2 | Python |
Wide Subsystem Interface | 1 | 1.2 | Java, C++ |
Rights and permissions
About this article
Cite this article
Pereira dos Reis, J., Brito e Abreu, F., de Figueiredo Carneiro, G. et al. Code Smells Detection and Visualization: A Systematic Literature Review. Arch Computat Methods Eng 29, 47–94 (2022). https://doi.org/10.1007/s11831-021-09566-x
Received:
Accepted:
Published:
Issue Date:
DOI: https://doi.org/10.1007/s11831-021-09566-x