Abstract :
Summary form only given. When programmers approach the task of maintaining a software system to modify existing code to correct errors, to add new functionalities or to upgrade it, often their first activity is to build a mentalmodel of the system being studied. In order to understand the organization of a system at different levels of abstractions, maintenance requires the identification of sub-systems, of their functionalities, of their interactions, and of their relation with the different software artifacts. Unfortunately, documentation is often scarce or not up-to-date. Furthermore, since outsourcing has been widely adopted as common practice, people who wrote or maintained a system may no longer be available. Hence, the only reliable source of information about a program is often the program itself. Different approaches and tools have been proposed to help people in building conceptual models of existing systems either at the architectural level or at the code level.