Automated Refactoring of Software Using Version History and a Code Element Recentness Measure

Michael Mohan, Desmond Greer

Research output: Chapter in Book/Report/Conference proceedingConference contribution

228 Downloads (Pure)


This paper proposes a multi-objective genetic algorithm to automate software refactoring and validates the approach using a tool, MultiRefactor, and a set of open source Java programs. The tool uses a metric function to measure quality in a software system and tests a second objective to measure the recentness of the code elements being refactored. Previous versions of the software project are analyzed and a recentness measure is then calculated with respect to previous versions of code. The multi-objective setup refactors the input program to improve its quality using the quality objective, while also focusing on the recentness of the code elements inspected. An experiment has been constructed to measure the multi-objective approach against an alternative mono-objective approach that does not use an objective to measure element recentness. The two approaches are validated using six different open source Java programs. The multi-objective approach is found to give significantly better recentness scores across all inputs in a similar time, while also generating improvements in the quality score.
Original languageEnglish
Title of host publicationProceedings of the 13th International Conference on Evaluation of Novel Approaches to Software Engineering (ENASE 2018)
Number of pages8
ISBN (Print)978-989-758-300-1
Publication statusPublished - 23 Mar 2018

Bibliographical note

Presented at ENASE 2018 (


  • Search based Software Engineering
  • Maintenance
  • Refactoring
  • Software History
  • Multi-Objective Optimization
  • Genetic Algorithms

ASJC Scopus subject areas

  • General Computer Science
  • Software


Dive into the research topics of 'Automated Refactoring of Software Using Version History and a Code Element Recentness Measure'. Together they form a unique fingerprint.

Cite this