COMP33812 Software Evolution syllabus 2017-2018
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.
Similarly, downstream in agile development projects, new functionality must be implemented in the context of existing development, some of which may have been deployed to the customer and which must continue to deliver business value through the new development.
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.
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.
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).
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?
22 hours (in 11 2 hour sessions)
Coursework with numeric and written feedback; non-assessed formative self-assessment Blackboard quizzes periodically throughout the course.
- Assessment written exam (2 hours)
- Lectures (24 hours)
- Problem solving
|Programme outcome||Unit learning outcomes||Assessment|
|A2 A4||Have an understanding of the importance of taking a long term view of software development at all stages in the software life cycle.|
|A2 A4||Understand the factors that make change of existing systems both technically challenging and risky, and the processes required to control change.|
|B1 B3||Be able to apply standard tools and techniques for program comprehension, in order to quickly gain an understanding of an unfamiliar software system.|
|A2 A4||Be aware of some of the techniques and tools used to assist in the modification of code, including debugging, impact analysis and refactoring.|
|A2 A4 B1 B3||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.|
|A2 A4 B1 B3||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.|
|A2 A4 B1 B3||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.|
|B1 B3||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.|
|Software engineering: a practitioner`s approach (8th edition)||Pressman, Roger S.||9781259253157||McGraw-Hill||2014||✖|
|Software maintenance: concepts and practice (2nd edition)||Grubb, Penny and Armstrong A. Takang||9789812384263||World Scientific||2003||✖|
|Software engineering (10th edition)||Sommerville, Ian||9781292096131||Addison-Wesley||2015||✖|
|Software evolution||Mens, Tom and Serge Demeyer (eds.).||9783642095290||Springer||2010||✖|
|Reverse engineering and software maintenance: a practical approach||Lano, Kevin and Howard Houghton||0077078977||McGraw-Hill||1993||✖|
Course unit materials
Links to course unit teaching materials can be found on the School of Computer Science website for current students.