Reverse engineering approaches have been particularly useful in the reengineering arena. Reverse engineering is the process of generating new information about software, such as synthesizing abstractions and generating different views. The identification phase is where the system's current components and their dependencies are identified. The discovery phase is concerned with the extraction of system abstractions. This second phase addresses the problem of gaining a general understanding of a software system prior to specific evolution activity.
Discovery is a complex interactive and cognitive activity.
The user may build up hierarchical subsystem components which optimize software engineering principles such as low coupling and high cohesion. Over the past decade, we have been developing Rigi - a system and framework for analyzing evolving software systems. These days, Rigi is used in many academic and industrial environments around the world. It is available by anonymous ftp and is easily downloaded and installed on several platforms. Software structure refers to a collection of artifacts that software engineers use to form mental models when designing, documenting, or analyzing systems.