What is "reverse-engineering"

Reverse engineering defines a set of activities that allow, from a ready-made software solution, to extract all the concepts employed there. These concepts can be used architectural patterns, class diagrams, the architecture of the system, in short, any information that contributes to an understanding of the developed system.

The processes used by reverse engineering must be able to derive software design representations and data structure information (from the lowest level of abstraction). In addition, they should also be able to represent a software project from their executable program, generating representations of their architecture.

Reverse engineering has its origins in hardware analysis for commercial or military advantage. The goal is to deduce final product design decisions with little or no additional knowledge about the procedures involved in the original production. The same techniques are subsequently researched for application in software systems, not for industrial or defense purposes, but rather to replace incorrect, incomplete or unavailable documentation.