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 to produce 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 as studied so as to get familiar with the system.
- Extracting the structure:
This step concerns with identification of program structure in the form of 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, set of data flow diagrams are derived to show the flow of data among the processes.
- Recording control flow:
High level control structure of the software is recorded.
- Review extracted design:
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. are recorded for future use.
Attention reader! Don’t stop learning now. Get hold of all the important CS Theory concepts for SDE interviews with the CS Theory Course at a student-friendly price and become industry ready.
- Difference between Forward Engineering and Reverse Engineering
- Software Engineering | Introduction to Software Engineering
- Software Engineering | Requirements Engineering Process
- Software Engineering | Re-engineering
- Difference between Software Engineering process and Conventional Engineering Processs
- Penetration Testing and Reverse Engineering
- Abstraction Levels in Reverse Engineering
- Software Engineering | Halstead’s Software Metrics
- Software Engineering | Classification of Software Requirements
- Software Engineering | Classification of Software
- Software Engineering | Software Project Management Complexities
- Software Engineering | Role and Responsibilities of a software Project Manager
- Software Engineering | Seven Principles of software testing
- Software Engineering | Agile Software Development
- Software Engineering | Software Maintenance
- Software Engineering | Jelinski Moranda software reliability model
- Software Engineering | Schick-Wolverton software reliability model
- Software Engineering | Software Business and Development
- Software Engineering | Characteristics of good Software
- Software Engineering | Identifying Software Development Metrics
If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to firstname.lastname@example.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.