|M.Sc Student||Perelman Valeriya|
|Subject||Reverse Engineering from Java Code to an OPM Model|
|Department||Department of Industrial Engineering and Management||Supervisor||Professor Dov Dori|
Maintenance and evolving are significant stages in a lifecycle of a successful software system. Software maintenance cost may reach 90% of the software budget. Up to 50% of the maintenance cost is spent on understanding of legacy code. The maintenance challenge has triggered the development of Reverse Engineering (RE) methods. The purpose of RE is to construct an abstract representation of a given system.
A useful RE process type is the recovery of the design from the software source code. The recovered design is then expressed in terms of a selected design methodology, referred to as the Target Methodology.
Object-Process Methodology (OPM) is a holistic, integrated approach to information systems development that extends the Object-Oriented (OO) paradigm with processes as stand-alone entities beside, rather than underneath, objects. Being simple and hierarchical, OPM is a suitable target methodology for Reverse Engineering of software code, as it describes both the structural and behavioral aspects of a subject software system in a single bimodal graphical/textual model.
In this work we develop RE methods that exploit the advantages of OPM to recover both the functional/procedural and the structural design of software programs written in Java. The methods are fully automatic and make no assumptions regarding the original software design model or coding style.
The hierarchical model is constructed in OPM based on a method call graph, inheritance relations of classes, interfaces with corresponding realizations, and other software artifacts. The resultant model includes structural and functional entities of the subject system, their static relations and their interactions. We propose a translation scheme for expressing Object-Oriented concepts in OPM terms, which is employed to express in OPM the artifacts of Object-Oriented Java software that are collected via static analysis. A method for analysis of data types is developed and employed to reduce uncertainty in method call graph construction caused by polymorphism. This method is also applied to reveal actual relations between classes that use Java weakly typed containers.
Performance of OPM/RE is evaluated with a case project. It is compared to a set of representative RE tools.