Remodularization is about giving a new or additional modular structure to an application’s source code. This activity is particularly important when maintaining an application since remodularizing increases the overall quality of the application, especially in terms of code delocalization and interweaving.
Remodularizing an application presents many challenges: identifying and delimiting the features to modularize is an important one; another is restructuring the application either in terms of the features or the domain.
The authors propose a remarkable approach to address these problems. By tracing the execution of the application (either from the user interface or from a set of use cases), classes that define user-specific features are identified. A new package structure is then proposed to regroup those identified features. This structure is made explicit in the source code by means of annotation. The source code may then be presented following this structure.
The presented approach is a mélange of sophisticated techniques, including execution tracing, feature identification, and program restructuring. Two large case studies confirm the feasibility of the proposal. Two points are, however, worth discussing.
First, only the entrance point of a feature is identified. The tracing helps specify in which portion of the source code a particular feature begins its execution. However, it is not specified where it ends, meaning that the completion of the user interface action or the use case drives it. As a consequence, a composition between features may not be properly identified.
Second, the granularity of classes is used for separating feature implementation. However, in practice, it often appears that a class belongs to several features. Some methods may be dedicated to a particular feature and some others to another feature. Apparently, this case is not considered in the approach.
All in all, this is an excellent paper. People interested in feature mining and remodularizing will find a fair amount of food for thought.