A reference model for refactoring techniques categorization based on software quality attributes - Ahmed, Abdullah Abdurahman Mohamed (2021)
The cost of software maintenance and evolution activities represents more than 80% of total software development costs. Refactoring is one of the trusted techniques widely used to facilitate and reduce maintenance activities and costs. However, the effects of the refactoring techniques on quality attributes are inconsistent and contradictory because different techniques affect different quality attributes in various ways. It is, therefore, a challenge for software developers to use these techniques to improve the software quality. Moreover, there is a lack of guidelines to enable software developers to decide which refactoring techniques to use to improve software quality regarding specific design goals. Therefore, the main objective of this study is to propose a reference model for categorizing the refactoring techniques based on their measurable effect on quality attributes. Initially, a problem definition and exploratory study were carried out to determine the common refactoring techniques used. Then, an experimental study was carried out with five case studies to measure the effect of refactoring techniques on quality attributes. The model was constructed based on the results of exploratory and experimental studies, followed by multi-case analysis, and setting up conventions. It was verified through a focus group discussion and expert reviews. Additionally, three case studies were empirically performed to validate the model. The model consists of five main components: methodology of applying refactoring techniques, Quality Model for Object-Oriented Design (QMOOD), factors causing different effects of refactoring techniques, categorization of refactoring techniques, and guidelines for software developers. The findings revealed that the model gained experts’ satisfaction and practical to be executed in the real environment. Theoretically, this study contributes a reference model that categorizes refactoring techniques based on their effect on quality attributes. Besides, the model provides refactoring process guidelines for software developers to choose suitable refactoring techniques to improve the software quality.