Artificial Intelligence (3 Years) [BSc]

Software Evolution

Unit code: COMP33812
Credit Rating: 10
Unit level: Level 3
Teaching period(s): Semester 2
Offered by School of Computer Science
Available as a free choice unit?: Y



Additional Requirements

Students who are not from the School of Computer Science must have permission from both Computer Science and their home School to enrol.


This course unit aims to make students aware of the challenges inherent in the evolution of existing systems, especially when they are in constant use, and to provide a working understanding of some of the techniques and best practices currently known for changing existing bodies of software safely.


This course unit continues the Agile Methods theme by focusing on the challenges not of creating new systems from scratch, but of evolving systems that already exist.

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.

Teaching and learning methods


22 hours (in 11 2 hour sessions)

Learning outcomes

Learning outcomes are detailed on the COMP33812 course unit syllabus page on the School of Computer Science's website for current students.

Employability skills

  • Problem solving

Assessment methods

  • Written exam - 70%
  • Written assignment (inc essay) - 30%



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

System Comprehension

Introduction to techniques for understanding software systems built by others. Recognising common architectural patterns. Code reading techniques for program comprehension, including bottom-up reading (based on idioms) and top-down reading (based on abstractions).

System Evolution

Techniques for evolutionary design in the small: refactoring. Techniques for large-scale evolutionary design, especially evolution of legacy systems. Architectural patterns for isolation/exposure of change.

Black-Box and Open Source Components

How are external components integrated into systems? How does the evolution of the componets and the host system interrelate?


Are there ways in which some of the problems/complexity of software evolution can be avoided in the future?

Recommended reading

COMP33812 reading list can be found on the School of Computer Science website for current students.

Feedback methods

Coursework with numeric and written feedback; non-assessed formative self-assessment Blackboard quizzes periodically throughout the course.

Study hours

  • Assessment written exam - 2 hours
  • Lectures - 24 hours
  • Independent study hours - 74 hours

Teaching staff

Andrew Carpenter - Unit coordinator

▲ Up to the top