While problems with large, business-critical legacy systems written in older languages, such as Cobol, have been well publicized, less has been reported about similar applications written in more modern languages, such as Java, which have been under active maintenance for at least ten years. A major difference between these two categories is that the old systems never had any modular structure, while the newer ones were implemented with a modular structure that has deteriorated due to bug fixes, feature additions, and modifications.
Techniques have been put forward that aim to modularize monolithic systems by attempting to group files. Rama argues, in this paper, that a different approach is required for dealing with modular deterioration. Rather than working at the file level, the idea is to reinstate modularity by applying techniques based on refactoring, to alter the code within the files. The first step to achieving this is to detect smells that point to a number of specific modularity problems. The five smells suggested mirror several of the good modularity principles suggested by Sarkar et al. [1]: improper inter-module calls, goal dispersion, overweight modules, back layer calls, and purpose dissimilarity.
Rama reports the results of applying a prototype tool to detect four of these smells--excluding layering--in a number of large open-source systems: a version of Linux, Apache, postgresql, and Hibernate. The results indicate that further work is worth pursuing, but that false positives may prove to be a problem.
This work represents the first tentative step in a bid to provide a tool for reimposing modularization in software under active maintenance. The paper is easy to read and will be of interest mainly to researchers in the areas of software maintenance and legacy systems.