Reverse engineering Reverse engineering can extract design information from source code The abstraction level of a reverse engineering process refers to the sophistication of the design information that can be extracted from source code Ideally, the abstraction level should be as high as possible The reverse engineering process should be capable of Deriving procedural design representations (a low-level abstraction) Program and data structure information (a somewhat higher level of abstraction) Object models, data flow models (a relatively high level of abstraction) Entity relationship models (a high level of abstraction). As the abstraction level increases, information will allow easier understanding of the program Interactivity refers to the degree to which the human is “integrated” with automated tools to create an effective reverse engineering process In most cases, as the abstraction level increases, interactivity must increase The directionality of the reverse engineering process is one-way, all information extracted from the source code is provided to the software engineer Forward engineering Forward engineering is a process of obtaining desired software from the specifications, which were brought by reverse engineering Forward engineering is same as software engineering process with only one difference it is carried out always after reverse engineering In most cases, forward engineering does not simply create a modern equivalent of an older program Rather, new user and technology requirements are integrated into the reengineering effort The redeveloped program extends the capabilities of the older application