Design patterns: elements of reusable object-oriented software
Design patterns: elements of reusable object-oriented software
ICSE '94 Proceedings of the 16th international conference on Software engineering
AntiPatterns: refactoring software, architectures, and projects in crisis
AntiPatterns: refactoring software, architectures, and projects in crisis
Refactoring: improving the design of existing code
Refactoring: improving the design of existing code
Finding refactorings via change metrics
OOPSLA '00 Proceedings of the 15th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Agile Software Development: Principles, Patterns, and Practices
Agile Software Development: Principles, Patterns, and Practices
Object-Oriented Design Heuristics
Object-Oriented Design Heuristics
Rules and Tools for Software Evolution Planning and Management
Annals of Software Engineering
Detecting Design Flaws via Metrics in Object-Oriented Systems
TOOLS '01 Proceedings of the 39th International Conference and Exhibition on Technology of Object-Oriented Languages and Systems (TOOLS39)
Java Quality Assurance by Detecting Code Smells
WCRE '02 Proceedings of the Ninth Working Conference on Reverse Engineering (WCRE'02)
ICSM '04 Proceedings of the 20th IEEE International Conference on Software Maintenance
Diagnosing Design Problems in Object Oriented Systems
WCRE '05 Proceedings of the 12th Working Conference on Reverse Engineering
Refactoring Practice: How it is and How it Should be Supported - An Eclipse Case Study
ICSM '06 Proceedings of the 22nd IEEE International Conference on Software Maintenance
Refactoring Detection based on UMLDiff Change-Facts Queries
WCRE '06 Proceedings of the 13th Working Conference on Reverse Engineering
Detection and correction of design defects in object-oriented designs
Companion to the 22nd ACM SIGPLAN conference on Object-oriented programming systems and applications companion
An empirical study of slice-based cohesion and coupling metrics
ACM Transactions on Software Engineering and Methodology (TOSEM)
Journal of Software Maintenance and Evolution: Research and Practice
On the relation of refactorings and software defect prediction
Proceedings of the 2008 international working conference on Mining software repositories
Refactoring Tools: Fitness for Purpose
IEEE Software
Identification of Extract Method Refactoring Opportunities
CSMR '09 Proceedings of the 2009 European Conference on Software Maintenance and Reengineering
How we refactor, and how we know it
ICSE '09 Proceedings of the 31st International Conference on Software Engineering
The life and death of statically detected vulnerabilities: An empirical study
Information and Software Technology
Identification of Move Method Refactoring Opportunities
IEEE Transactions on Software Engineering
The evolution and impact of code smells: A case study of two open source systems
ESEM '09 Proceedings of the 2009 3rd International Symposium on Empirical Software Engineering and Measurement
An Exploratory Study of the Impact of Code Smells on Software Change-proneness
WCRE '09 Proceedings of the 2009 16th Working Conference on Reverse Engineering
DECOR: A Method for the Specification and Detection of Code and Design Smells
IEEE Transactions on Software Engineering
Identification of refactoring opportunities introducing polymorphism
Journal of Systems and Software
Investigating the Evolution of Bad Smells in Object-Oriented Code
QUATIC '10 Proceedings of the 2010 Seventh International Conference on the Quality of Information and Communications Technology
Ranking Refactoring Suggestions Based on Historical Volatility
CSMR '11 Proceedings of the 2011 15th European Conference on Software Maintenance and Reengineering
Automated detection of refactorings in evolving components
ECOOP'06 Proceedings of the 20th European conference on Object-Oriented Programming
Hi-index | 0.00 |
Software design problems are known and perceived under many different terms, such as code smells, flaws, non-compliance to design principles, violation of heuristics, excessive metric values and anti-patterns, signifying the importance of handling them in the construction and maintenance of software. Once a design problem is identified, it can be removed by applying an appropriate refactoring, improving in most cases several aspects of quality such as maintainability, comprehensibility and reusability. This paper, taking advantage of recent advances and tools in the identification of non-trivial code smells, explores the presence and evolution of such problems by analyzing past versions of code. Several interesting questions can be investigated such as whether the number of problems increases with the passage of software generations, whether problems vanish by time or only by targeted human intervention, whether code smells occur in the course of evolution of a module or exist right from the beginning and whether refactorings targeting at smell removal are frequent. In contrast to previous studies that investigate the application of refactorings in the history of a software project, we attempt to analyze the evolution from the point of view of the problems themselves. To this end, we classify smell evolution patterns distinguishing deliberate maintenance activities from the removal of design problems as a side effect of software evolution. Results are discussed for two open-source systems and four code smells.