Refactoring: improving the design of existing code
Refactoring: improving the design of existing code
An Empirical Approach to Studying Software Evolution
IEEE Transactions on Software Engineering
Object Oriented Reengineering Patterns
Object Oriented Reengineering Patterns
Towards a software evolution benchmark
IWPSE '01 Proceedings of the 4th International Workshop on Principles of Software Evolution
CSMR '01 Proceedings of the Fifth European Conference on Software Maintenance and Reengineering
Java Quality Assurance by Detecting Code Smells
WCRE '02 Proceedings of the Ninth Working Conference on Reverse Engineering (WCRE'02)
Populating a Release History Database from Version Control and Bug Tracking Systems
ICSM '03 Proceedings of the International Conference on Software Maintenance
CVS Release History Data for Detecting Logical Couplings
IWPSE '03 Proceedings of the 6th International Workshop on Principles of Software Evolution
Mining Version Histories to Guide Software Changes
Proceedings of the 26th International Conference on Software Engineering
ISSTA '04 Proceedings of the 2004 ACM SIGSOFT international symposium on Software testing and analysis
The evolution radar: visualizing integrated logical coupling information
Proceedings of the 2006 international workshop on Mining software repositories
Lightweight Risk Mitigation for Software Development Projects Using Repository Mining
MSR '07 Proceedings of the Fourth International Workshop on Mining Software Repositories
Journal of Software Maintenance and Evolution: Research and Practice
A Case Study on the Impact of Refactoring on Quality and Productivity in an Agile Team
Balancing Agility and Formalism in Software Engineering
A Model to Identify Refactoring Effort during Maintenance by Mining Source Code Repositories
PROFES '08 Proceedings of the 9th international conference on Product-Focused Software Process Improvement
Characterizing software architecture changes: A systematic review
Information and Software Technology
Does XP deliver quality and maintainable code?
XP'07 Proceedings of the 8th international conference on Agile processes in software engineering and extreme programming
Detecting software modularity violations
Proceedings of the 33rd International Conference on Software Engineering
Detecting architecturally-relevant code smells in evolving software systems
Proceedings of the 33rd International Conference on Software Engineering
Toward a version control system for aspect oriented software
MEDI'11 Proceedings of the First international conference on Model and data engineering
Information and Software Technology
Proceedings of the 11th annual international conference on Aspect-oriented Software Development
Does refactoring improve reusability?
ICSR'06 Proceedings of the 9th international conference on Reuse of Off-the-Shelf Components
Proceedings of the 10th Working Conference on Mining Software Repositories
Hi-index | 0.00 |
Refactoring is one means of improving the structure of existing software. Locations for the application of refactoring are often based on subjective perceptions such as "bad smells", which are vague suspicions of design shortcomings. We exploit historical data extracted from repositories such as CVS and focus on change couplings: if some software parts change at the same time very often over several releases, this data can be used to point to candidates for refactoring. We adopt the concept of bad smells and provide additional change smells. Such a smell is hardly visible in the code, but easy to spot when viewing the change history. Our approach enables the detection of such smells allowing an engineer to apply refactoring on these parts of the source code to improve the evolvability of the software. For that, we analyzed the history of a large industrial system for a period of 15 months, proposed spots for refactorings based on change couplings, and performed them with the developers. After observing the system for another 15 months we finally analyzed the effectiveness of our approach. Our results support our hypothesis that the combination of change dependency analysis and refactoring is applicable and effective.