My research topics focus on software refactoring, software testing, software reliability and complex network theory. I am greatly interested in analyzing the software system from a network topology‘s point of view, and with the help of the abstract structural view, we can “navigate” the system and optimize the software testing or refactoring process. Using the static and dynamic characteristics of “software network”, we evaluate the complexity, risk factors, and reliability of system, and find the near-optimal solutions to software engineering problems.
"Journal first" invited talk at ESEC/FSE’17
In this study, we describe a system-level multiple refactoring algorithm, which can identify the move method, move field, and extract class refactoring opportunities automatically according to the principle of "high cohesion and low coupling." The algorithm works by merging and splitting related classes to obtain the optimal functionality distribution from the system-level. Furthermore, we present a weighted clustering algorithm for regrouping the entities in a system based on merged method-level networks. Using a series of preprocessing steps and preconditions, the "bad smells" introduced by cohesion and coupling problems can be removed from both the non-inheritance and inheritance hierarchies without changing the code behaviors. We rank the refactoring suggestions based on the anticipated benefits that they bring to the system. Based on comparisons with related research and assessing the refactoring and assessing the refactoring results using quality metrics and empirical evaluation, we show that the proposed approach performs well in different systems and is beneficial from the perspective of the original developers. Finally, an open source tool is implemented to support the proposed approach.