Software design techniques emphasize the use of abstractions to help developers deal with the complexity of constructing large and complex systems. These abstractions can also be used to guide programmers through a variety of maintenance, reengineering and enhancement es. Unfortunately, recovering design abstractions directly from a system’s implementation is a difficult task because the source code does not contain them. In this paper we describe an automatic process to initectural-level abstractions from the source code. The first step tware clustering to aggregate the system’s modules into abstract containers called subsystems. The second step takes the output of the clustering process, and infers architectural-level relations based on formal style rules that are specified visually. This two step process has been implemented using a set of integrated tools that employ search techniques to locate good solutions to both the clustering and the relationship inferencing problem qui...
Brian S. Mitchell, Spiros Mancoridis, Martin Trave