Refactoring: improving the design of existing code
Refactoring: improving the design of existing code
An Incremental Class Reorganization Approach
ECOOP '92 Proceedings of the European Conference on Object-Oriented Programming
Java Quality Assurance by Detecting Code Smells
WCRE '02 Proceedings of the Ninth Working Conference on Reverse Engineering (WCRE'02)
Getting the most from search-based refactoring
Proceedings of the 9th annual conference on Genetic and evolutionary computation
Search-based refactoring for software maintenance
Journal of Systems and Software
Search-based refactoring: an empirical study
Journal of Software Maintenance and Evolution: Research and Practice - Search Based Software Engineering [SBSE]
Automated Design Improvement by Example
Proceedings of the 2007 conference on New Trends in Software Methodologies, Tools and Techniques: Proceedings of the sixth SoMeT_07
COMP-REF: a technique to guide the delegation of responsibilities to components in software systems
FASE'08/ETAPS'08 Proceedings of the Theory and practice of software, 11th international conference on Fundamental approaches to software engineering
On the use of genetic programming for automated refactoring and the introduction of design patterns
Proceedings of the 12th annual conference on Genetic and evolutionary computation
Analysing refactoring dependencies using unfolding of graph transformation systems
Proceedings of the 7th International Conference on Frontiers of Information Technology
Use of a multidimensional approach to study the evolution of software complexity
Innovations in Systems and Software Engineering
Automated assistance for search-based refactoring using unfolding of graph transformation systems
ICGT'10 Proceedings of the 5th international conference on Graph transformations
Experimental assessment of software metrics using automated refactoring
Proceedings of the ACM-IEEE international symposium on Empirical software engineering and measurement
Search-based software engineering: Trends, techniques and applications
ACM Computing Surveys (CSUR)
Hi-index | 0.00 |
The object-oriented approach to software development facilitates and encourages programming practices that increase reusability, correctness and maintainability in code. This is achieved in Java by providing mechanisms for inheritance, abstraction and encapsulation. By measuring properties that indicate to what extent these mechanisms are utilised we can determine to a large extent how good a design is. However, because these properties often conflict with other goals such as high cohesion and low coupling it can be difficult for a programmer to recognise the best compromise.We propose the novel approach of treating object-oriented design as a combinatorial optimisation problem, where the goal is maximisation of a set of design metrics. With a view to developing a fully automated design improvement tool we have developed a prototype that uses a small metrics suite combined with automated refactorings to move methods to their optimum positions in the class hierarchy. The action of this simulated annealing system produces a new design that is superior in terms of the metrics used and when judged on object-oriented principles.