Architecture reconstruction provides analysis at the highest level of abstraction. In this process, the as-built architecture of an implemented system is obtained from the existing legacy system by analyzing it, using tools to extract information and to build system models at various levels of abstraction. This process produces a representation of the system architecture and generates views of this architecture. These views aid in analyzing the system and serve as a means of communication among stakeholders. In some cases, such as legacy systems without an original architectural design, the lack of system structure may make it impossible to generate a useful representation. Architectural reconstruction is a complex task requiring a variety of activities and skills. Software engineers familiar with compiler construction techniques and data-mining tools and techniques are typically required to successfully complete the task. Although tool support is usually a requirement for architectural reconstruction, no single tool or set of tools supports all reconstruction activities. Architecture reconstruction is not a straightforward process. Architectural constructs are not explicitly represented in the source code; they are realized by diverse mechanisms in an implementation. Usually, these mechanisms are a collection of functions, classes, files, objects, and so forth. When a system is initially developed, its high-level design/architectural elements are mapped to implementation elements. Therefore, when we reconstruct architectural elements, we need to inverse these mappings. Architecture reconstruction is an interpretive, interactive, and iterative process, requiring the skills and attention of both the reverse engineer and the architect or someone who has substantial knowledge of the architecture. The reverse engineer can build queries based on the architectural patterns that the architecture expert expects to find in the system. These queries result in new aggregations that show abstractions or clustering of the lower-level elements, which may be source artifacts or may themselves be abstractions. By interpreting these views and actively analyzing them, it is possible to refine the queries and aggregations to produce several hypothesized architectural views of the system under analysis. These views can be interpreted, further refined, or rejected. The process is complete when the architectural representation is sufficient to support user needs. The software architecture reconstruction process can be divided into three distinct phases: view extraction, visualization and interaction, and pattern definition and recognition.
|