This course will consider what software evolution is, why it is inevitable, and how one might reasonably and reliably go about performing it. All essential technical and managerial aspects of software maintenance and evolution will be covered. An overview will we given of tools, techniques, principles, best practices and formal foundations for software evolution. Some of the open problems in the research domain of software evolution will be discussed.
Contents
Introduction
Definitions
Motivation
Technical aspects of software evolution
Legacy systems and their migration
Reverse engineering and program understanding
Re-engineering
Transformation-based evolution, refactoring and restructuring
Change prograpation, impact analysis
Traceability and consistency maintenance
Co-evolution
Regression testing
Visualisation and analysis of evolution histories
Managerial aspects of software evolution
Evolutionary process models
Software configuration management, change management, version management
The course will consist of a series of lectures, a series of seminar sessions, and a series of practical sessions.
The lectures will introduce and explain the software evolution concepts
mentioned above.
The seminars will treat a number of more advanced software evolution topics
in depth. Each student will have to read, summarise and analyse a technical
paper, present it to the other students during the seminar. Read How to read and evaluate
technical articles and How
to present a technical paper in order to find out how this taks can be
achieved.
During the practical sessions, the students will have to perform a specific
evolution activity (e.g., refactoring) that has been assigned by the teacher.
The students will be evaluated and measured based on the work they perform.