Clone refactoring inspection by summarizing clone refactorings and detecting inconsistent changes during software evolution

Zhiyuan Chen, Young Woo Kwon, Myoungkyu Song

Research output: Contribution to journalArticlepeer-review

8 Scopus citations

Abstract

It has been broadly assumed that removing code clones by refactorings would solve the problems of code duplication. Despite recent empirical studies on the benefit of refactorings, contradicting evidence shows that it is often difficult or impossible to remove clones by using standard refactoring techniques. Developers cannot easily determine which clones can be refactored or how they should be maintained scattered throughout a large code base in evolving systems. We propose pattern-based clone refactoring inspection (PRI), a technique for managing clone refactorings. PRI summarizes refactorings of clones and detects clones that are not consistently refactored. To help developers refactor these anomalies, PRI also visualizes clone evolution and refactorings and fixes refactoring anomalies to prevent the clone group from being left in an inconsistent state. We evaluated PRI on 6 open-source projects and showed that it identifies clone refactorings with 94.1% accuracy and detects inconsistent refactorings with 98.4% accuracy, tracking clone change histories. In a study with 10 student developers, the participants reported that flexible PRI's summarization and detection features can be valuable for novice developers to learn about refactorings to clones. These results show that PRI should improve developer productivity in inspecting clone refactorings distributed across multiple files in evolving systems.

Original languageEnglish
Article numbere1951
JournalJournal of software: Evolution and Process
Volume30
Issue number10
DOIs
StatePublished - Oct 2018

Keywords

  • code clone
  • refactoring
  • software maintenance and evolution

Fingerprint

Dive into the research topics of 'Clone refactoring inspection by summarizing clone refactorings and detecting inconsistent changes during software evolution'. Together they form a unique fingerprint.

Cite this