i) REVERSE ENGINEERING:-It is a process of analyzing software with a view to understanding its design and specification.
� In this, source code and executable code are the input.
� It may be part of a re-engineering process but may also be used to re-specify a system for re-implementation.
� Builds a program data base and generates information from this.
� Program understanding tools (browsers, cross reference generates, etc.) may be used in this process.
� Design and specification may be reverse re-engineer to:-
a) Serve as input to SRS for program replacement.
b) Be available to help program maintenance.
Reverse Engineering often precedes Re-Engineering but is sometimes worthwhile in its own right. The design and specification of a system may be reverse engineered so that they can be an input to the requirements specification process for the system replacement. The design and specification may be reverse engineered to support program maintenance.
ii) RE-ENGINEERING:- It is re-organizing and modifying existing system to make them more maintainable. It involves:-
� Source code translation.
� Reverse engineering.
� Program structure development.
� Program modularization.
� Data re-engineering.
Restructuring or re-writing part or all of the legacy system without hanging its functionality. Legacy system is a system that is hard to maintain. So it involves:-
1) Re-documenting the system.
2) Organizing and re-structuring the system.
3) Modifying and upgrading structure and value of the system data.
4) Input to a re-engineering process is a legacy system and output is a structure modularized version of the same program. So re-engineering involves adding effort to make them easier to maintain. The system may be restructured or redocumented.
When to Re-Engineer?
� When the system changes are mostly confined to part of the system then re-engineer that part.
� When hardware or software support becomes obsolete.
� When tools to support re-structuring are available.
Advantages of Re-Engineering:-
1) Reduced risk - there is a high risk in new software development. There may be development problems, staffing problems and specification problems.
2) Reduced cost the costofre-engineering is often signific antlyless than the cost of developing new software.
Re-Engineering cost factors:-
1) The quality of the software to be re-engineered.
2) The tool support available for re-engineering.
3) The extent of the data conversion, which is required.
4) The availability of expert staff for re-engineering.