CO7206 System Reengineering

CO7206 System Reengineering

Credits: 20 Convenor: Dr. M. El-Ramly Semester: 1

Assessment: Coursework: 60% Three hour exam in January: 40%
Lectures: 36 Problem Classes: none
Tutorials: none Private Study: 90
Labs: 12 Seminars: none
Project: none Other: none
Surgeries: 12 Total: 150

Subject Knowledge


To understand the problems and issues associated with legacy software systems and the difficulties in reverse engineering comprehending, maintaining, evolving and reengineering them.

Learning Outcomes

Students will have a good understanding of software aging phenomenon and the issues related to it. They will understand the challenges in renovating and maintaining legacy systems and the available methods for dealing with them. They will to be able to make reasoned decisions on which reengineering methods to apply for certain types of legacy system renovation tasks.


Class sessions together with course notes. Selected readings. Lab. work and assignments.


Marked coursework (2 to 6 quizzes – 2 to 6 assignments – 1 to 2 mini projects), written examination.

Subject Skills


To develop analytical and problem solving skills in dealing with legacy systems and software integration challenges. To develop on hands experience in reverse engineering and reengineering existing software systems.

Learning Outcomes

Students will be able to apply the methods learned to assess the situation of a small scale legacy system, and decide on a suitable reengineering strategy for it. They will learn how to reverse engineer and reengineer moderate size legacy software systems using some of the available commercial and research tools.


Class sessions together with lab. work.


Marked coursework (2 to 6 quizzes – 2 to 6 assignments – 1 to 2 mini projects), written examination.

Explanation of Pre-requisites

This module assumes that the student has reasonable programming experience in a high level language, preferably C, C++ or Java. It also assumes that the student has some feeling for the challenge inherent in trying to understand and modify old software or software that was written by other people.

Course Description

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. More often than not, 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 neither equipped with the necessary skills nor have the desire to work with these software “legacies”. Fresh software development is usually considered superior to software maintenance and reengineering. The year 2000 problem and the deployment of the Euro gave rise to research and practice of software system reverse engineering and reengineering. Reengineering is "the examination of a subject system to reconstitute it in a new form and the subsequent implementation of the new form." [Chikofsky, and Cross II, 1990]. Part of any reengineering efforts is a reverse engineering process, which is "the process of analyzing a subject system with two goals in mind: (1) to identify the system's components and their interrelationships; and, (2) to create representations of the system in another form or at a higher level of abstraction." [Chikofsky, and Cross II, 1990].

In the Internet era, 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 required to open the available information systems to Web access or integrate them with other Web applications.

In this module we will be taking an introductory look at the main issues related to software systems aging and evolution. We will examine some of the available methods and technologies for software reverse engineering and reengineering as well as some of the managerial and planning issues specific to software reengineering projects.


This module will cover the following topics as time permits.

Software Aging: How and why software systems age.
Legacy Systems: Their issues and challenges.
Introduction to Software Evolution, Maintenance and Reengineering.
Reverse Engineering: Program analysis methods, software complexity and maintenance metrics, program visualization.
Forward Engineering: Refactoring, code transformation, Web enabling.
Software Reengineering Strategies and Management.

Reading list


Ian Sommerville, Software Engineering, 6th edition, Addison Wesley.

Several Articles from different Authors, IEEE Software Magazine, IEEE.

DM. J. Harold and G. Roethermel, Notes on Representation and Analysis of Software, .

S.H. Kan, Metrics and Models in Software Quality Engineering, Addison Wesley.

Imagix Corporation, Imagix 4D User Manual, .

B. Braswell, G. Forshay and J. Martinez, IBM Web-to-Host Integration Solutions, Redbook Series IBM, 2002.


The Software Technology Review ( is a directed guide containing the latest information on more than 69 software technologies. It contains a useful glossary of Software Technology terms (

Module Evaluation

Course questionnaires, course review.

[University Home] [Faculty of Science] [MCS Home] [CS Home] CS Home Page [University Index A-Z] [University Search] [University Help]

Author: N. Rahman, tel: +44 (0)116 252 2593
Last updated: 2004-01-20
MCS Web Maintainer
This document has been approved by the Head of Department.
© University of Leicester.