Skip to navigation | Skip to main content | Skip to footer

COMP30332: Software Evolution (2007-2008)

This is an archived syllabus from 2007-2008

Software Evolution
Level: 3
Credit rating: 10
Pre-requisites: CS2341
Co-requisites: No Co-requisites
Duration: 11 weeks
Lectures: 22
Lecturers: Suzanne Embury
Course lecturer: Suzanne Embury

Additional staff: view all staff
Sem 2 w19-25,29-32 Lecture 1.4 Wed 10:00 - 11:00 -
Sem 2 w19-25,29-32 Lecture 1.3 Thu 11:00 - 12:00 -
Sem 2 w29-31 Lab Eng Thu 11:00 - 12:00 -
Sem 2 w29-31 Lab UNIX Thu 11:00 - 12:00 -
Assessment Breakdown
Exam: 90%
Coursework: 10%
Lab: 0%
Degrees for which this unit is optional
  • Artificial Intelligence BSc (Hons)


It has been observed that 80p of every pound spent on software development is spent on maintenance of existing systems. In real life, most software engineers spend their time either helping software systems to continue to meet the needs of their users, or adapting them to meet changing needs. Even new applications are typically constructed by combining existing components and database systems new software.


This module aims to make students aware of the challenges inherent in the maintenance and evolution of software systems, and to provide a working understanding of some of the techniques and best practices currently in use for changing software safely.

Learning Outcomes

A student completing this course unit should:

Have an understanding of the importance of taking a long term view of software development at all stages in the software life cycle. (A)
Understand the factors that make change of existing systems both technically challenging and risky, and the processes required to control change. (A)
Be able to apply standard tools and techniques for program comprehension, in order to quickly gain an understanding of an unfamiliar software system. (B)
Be aware of some of the techniques and tools used to assist in the modification of code, including debugging, impact analysis and refactoring. (A)
Have a knowledge and understanding of the specific problems inherent in the maintenance and evolution of legacy software systems, and be able to apply some of the techniques that can be of use in comprehending and changing them. (A, B)
Have a knowledge and understanding of the specific challenges inherent in the maintenance and evolution of data-intensive systems, and be able to apply some of the techniques that can be of use in comprehending and changing them. (A, B)
Have a knowledge and understanding of the specific problems inherent in the maintenance and evolution of package-based software systems, and be able to apply techniques for designing change-resistant systems from pre-packaged code. (A, B)
Be able to make appropriate choices regarding the tools and techniques to apply to software evolution problems, trading off costs and limitations against the expected benefits. (B)

Assessment of Learning outcomes

All learning outcomes are assessed by examination. Learning outcomes 3 and 5 will additionally be assessed by coursework.

Contribution to Programme Learning Outcomes

A2, A4, B1, B3, C5.


Introduction [1]

Motivation for and overview of the module. Outlines the challenges inherent in software evolution, based on a case study from real life. Change as a fact of life for software systems.

The Defect Management Process [3]

Deciding what to change and when. Change control and its relationship to software configuration management. Impact analysis, refactoring and power-programmer techniques for debugging.

Program Comprehension [4]

Introduction to techniques for understanding software systems built by others. Recognising common architectural patterns. Code reading techniques for program comprehension. Tools for program comprehension, in particular program slicing.

Evolution of Legacy Systems [6]

Characteristics of legacy systems, and challenges for their evolution. Migration of legacy systems. The re-technologies: re-structuring, reverse-engineering and re-engineering.

Data-Oriented Challenges to Evolution [4]

Specific challenges for migration of data-intensive systems. Impact of data quality on migration of legacy systems. Challenges in comprehending data intensive systems. Data re-engineering, and tools to support it.

Evolution of Package-Based Systems [3]

Introduction to the increasingly common practice of constructing new systems by integrating new software components with software purchase off-the-shelf. Discussion of the special problems inherent in maintaining such systems. Testing and debugging techniques for package-based systems. Glueware and the role of standard component types, such as wrappers and brokers, in modifying package-based systems.

Summary [1]

Exam revision session.

Reading List

Sommerville (Software Engineering, Addison Wesley, 6th Edition) contains a sizeable section on software evolution, which provides a basic overview.

Pressman (Software Engineering: A Practitioner's Approach, McGraw-Hill, 6th Edition) contains several chapters which provide useful background to parts of this module, notably chapters 27, 30 and 31.

Lano and Haughton (Reverse Engineering and Software Maintenance, McGraw-Hill, 1993) is good for maintenance in general and reverse engineering in detail, but is unfortunately now difficult to get hold of (though the library has a copy).

Further pointers to reading material for specific lectures can be found on the module web pages.