System Re-Engineering
Module code: CO7506
In this module you will study the main issues related to software systems ageing and evolution. We will examine some of the available methods and technologies for software reverse engineering and re-engineering as well as some of the managerial and planning issues specific to software re-engineering projects.
Software development is not always a ‘green-fields’ process. More often than not, new software engineers are hired to maintain and evolve existing systems, not to develop new ones. If a new system is to be developed, it has to be integrated with other existing ‘legacy’ software systems.
Legacy systems are valuable software systems that are still in use but are difficult to maintain, change or migrate because they were developed with technologies of the past and/or because they were not engineered properly. Very often, these systems were developed without proper documentation, version control, or proper design. Many such systems had undergone numerous changes by different people that violate the original system design, if any ever existed.
As a result, it is challenging to understand, modify or migrate these systems. Fresh software developers are usually not equipped with the necessary skills, nor do they have the desire to work with these software ‘legacies’. Fresh software development is usually considered superior to software maintenance and re-engineering.
The year 2000 problem and the deployment of the Euro gave rise to research and practice of software system reverse engineering and re-engineering. Re-engineering is the examination of a subject system to reconstitute it in a new form and the subsequent implementation of the new form. Part of any re-engineering efforts is a reverse engineering process, which is the process of analysing a subject system with two goals in mind: identify the system’s components and their interrelationships; then create representations of the system in another form or at a higher level of abstraction.
It is very important to have the skills to deal with legacy systems because it is not always the case that web applications will be developed from scratch. In many cases it is necessary to open the available information systems to Web access or integrate them with other Web applications.