Software Reverse Engineering is a process of recovering the design, requirement specifications, and functions of a product from an analysis of its code. It builds a program database and generates information from this.
The purpose of reverse engineering is to facilitate the maintenance work by improving the understandability of a system and producing the necessary documents for a legacy system.
Reverse Engineering Goals:
- Cope with Complexity.
- Recover lost information.
- Detect side effects.
- Synthesise higher abstraction.
- Facilitate Reuse.
Steps of Software Reverse Engineering:
- Collection Information:
This step focuses on collecting all possible information (i.e., source design documents, etc.) about the software. - Examining the information:
The information collected in step-1 is studied so as to get familiar with the system. - Extracting the structure:
This step concerns identifying program structure in the form of a structure chart where each node corresponds to some routine. - Recording the functionality:
During this step processing details of each module of the structure, charts are recorded using structured language like decision table, etc. - Recording data flow:
From the information extracted in step-3 and step-4, a set of data flow diagrams is derived to show the flow of data among the processes. - Recording control flow:
The high-level control structure of the software is recorded. - Review extracted design:
The design document extracted is reviewed several times to ensure consistency and correctness. It also ensures that the design represents the program. - Generate documentation:
Finally, in this step, the complete documentation including SRS, design document, history, overview, etc. is recorded for future use.
Reverse Engineering Tools:
Reverse engineering if done manually would consume a lot of time and human labor and hence must be supported by automated tools. Some of the tools are given below:
- CIAO and CIA: A graphical navigator for software and web repositories and a collection of Reverse Engineering tools.
- Rigi: A visual software understanding tool.
- Bunch: A software clustering/modularization tool.
- GEN++: An application generator to support the development of analysis tools for the C++ language.
- PBS: Software Bookshelf tools for extracting and visualizing the architecture of programs.