CO7206 System Re-engineering

CO 7206 System Re-engineering

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

Assessment: Coursework: 50% Three hour exam in January: 50%
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 methods used in reverse engineering, comprehending, maintaining, evolving and reengineering them.

Learning Outcomes

By the end of the module, students should be able to: understand software aging phenomenon and the issues related to it; understand the challenges in renovating and maintaining legacy software systems and the available methods for dealing with them; make reasoned decisions on which reengineering methods to apply for certain types of legacy system renovation tasks.


Class sessions, tutorials and lab sessions together with course notes, course readings, assignments and quizzes.


Marked coursework (1 to 3 quizzes - 2 to 6 assignments), 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

By the end of the module, students will be able to apply the methods learned to assess the situation of a small-scale legacy system and decide a suitable reengineering strategy for it, in the light of the objectives of the reengineering/renovation effort. 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, tutorials and lab sessions together with course notes, course readings, assignments and quizzes.


Marked coursework (1 to 3 quizzes - 2 to 6 assignments), written examination.

Explanation of Pre-requisites

This module assumes that the student has reasonable programming experience in more than one high level language, preferably C, C++ or Java. It assumes that the student has done some non-trivial programming tasks and has some understanding of 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.

This module is an introduction to 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, Architecture Recovery, 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.

Martin Fowler, Refactoring: improving the design of existing code, Addison Wesley.

Robert C. Seacord, Daniel Plakosh and Grace A. Lewis , Modernizing Legacy Systems , SEI Series in SE, Addison Wesley .

Mohammad El-Ramly, Web-enabling Legacy Systems, Ph.D. Thesis, University of Alberta.

GrammmaTech Inc., CodeSurfer User Guide and Technical Reference, GrammmaTech Inc..

Jim Cordy, The TXL Programming Language, Version 10.3,

Several Articles from IEEE, Software, IEEE.

Mary Jean Harrold and Gregg Rothermel, Notes on Representation and Analysis of Software, .

David L. Parnas, Software Aging, ICSE 94.

Kurt D. Welke, The Software Maintainability Index Revisited, CrossTalk, The Journal of Defense Software Engineering.

Edmond VanDoren, Kaman Sciences and Colorado Springs, Halstead Complexity Measures, Software Engineering Institute.

John Bergey, Dennis Smith and Scott Tilley, Nelson Weiderman and Steven Woods, Why Reengineering Projects Fail, Software Engineering Institute.

John Bergey, Dennis Smith and Nelson Weiderman, DoD Legacy System Migration Guidelines, Software Engineering Institute.

T. A. Corbi, Program Understanding: Challenges for the 1990s, IBM Systems Journal.


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-09-29
MCS Web Maintainer
This document has been approved by the Head of Department.
© University of Leicester.