A reverse-engineering approach to subsystem structure identification
Article first published online: 30 OCT 2006
Copyright © 1993 John Wiley & Sons, Ltd
Journal of Software Maintenance: Research and Practice
Volume 5, Issue 4, pages 181–204, 1993
How to Cite
Müller, H. A., Orgun, M. A., Tilley, S. R. and Uhl, J. S. (1993), A reverse-engineering approach to subsystem structure identification. J. Softw. Maint: Res. Pract., 5: 181–204. doi: 10.1002/smr.4360050402
- Issue published online: 30 OCT 2006
- Article first published online: 30 OCT 2006
- Manuscript Revised: 6 APR 1993
- Manuscript Received: 19 MAY 1990
- IRIS Federal Centre of Excellence, the Natural Sciences and Engineering Research Council of Canada, the British Columbia Advanced Systems Institute, the Science Council of British Columbia, the University of Victoria, and IBM Canada Ltd.
- Software maintenance;
- Program understanding;
- Software engineering principles;
- Resource-flow graphs;
- Subsystem hierarchies;
- Subsystem composition;
- Exact interfaces;
- Change analysis
Reverse-engineering is the process of extracting system abstractions and design information out of existing software systems. This process involves the identification of software artefacts in a particular subject system, the exploration of how these artefacts interact with one another, and their aggregation to form more abstract system representations that facilitate program understanding.
This paper describes our approach to creating higher-level abstract representations of a subject system, which involves the identification of related components and dependencies, the construction of layered subsystem structures, and the computation of exact interfaces among subsystems. We show how top-down decompositions of a subject system can be (re)constructed via bottom-up subsystem composition. This process involves identifying groups of building blocks (e.g., variables, procedures, modules, and subsystems) using composition operations based on software engineering principles such as low coupling and high cohesion. The result is an architecture of layered subsystem structures.
The structures are manipulated and recorded using the Rigi system, which consists of a distributed graph editor and a parsing system with a central repository. The editor provides graph filters and clustering operations to build and explore subsystem hierarchies interactively. The paper concludes with a detailed, step-by-step analysis of a 30-module software system using Rigi.