Software Maintenance and Evolution

LINGI2252  2019-2020  Louvain-la-Neuve

Software Maintenance and Evolution
5.0 credits
30.0 h + 15.0 h

LINGI2255 (or equivalent course)
Main themes

Whereas many software engineering courses focus on building new systems from scratch, in industrial practice software developers are often confronted with already existing software systems that need to be maintained, reused or evolved. This requires specific skills to understand the design and implementation of an existing system and which parts need to be modified, to build software systems that are easier to maintain, and to design systems with reuse and evolution in mind from the very start. 

This course will thus study a variety of techniques, tools and methodologies to help building software systems that are easier to understand, maintain, reuse and evolve:

  • Software development in the context of an existing code base as opposed to "green field" development

o   Software comprehension and concern location

o   Change impact analysis

o   Reverse engineering

  • Software Maintenance

o   Best programming practices

o   Coding standards

o   Design principles and heuristics

o   Design patterns

o   Refactoring

o   Reengineering

  • Software Reuse and Evolution

o   The laws of software evolution

o   Reuse techniques and design for reuse

o   Libraries vs. application frameworks

  • Software product lines, domain and feature modelling

  • 1

    Given the learning outcomes of the "Master in Computer Science and Engineering" program, this course contributes to the development, acquisition and evaluation of the following learning outcomes:

    • INFO1.1 , INFO1.3
    • INFO2.5
    • INFO5.5

    Given the learning outcomes of the "Master [120] in Computer Science" program, this course contributes to the development, acquisition and evaluation of the following learning outcomes:

    • SINF1.M3
    • SINF2.5
    • SINF5.5

    Students completing successfully this course will be able to

    • Understand the difficulties of developing code in a change context as opposed to 'green field' development
    • Assess the impact of a change request to an existing product of medium size.
    • Describe techniques, coding idioms and other mechanisms for implementing designs that are more maintainable.
    • Understand how design patterns can improve the design of a software system.
    • Refactor an existing software implementation to improve some aspect of its design.
    • Identify the principal issues associated with software evolution and explain their impact on the software lifecycle.'
    • Discuss the advantages and disadvantages of different types of software reuse.

The contribution of this Teaching Unit to the development and command of the skills and learning outcomes of the programme(s) can be accessed at the end of this sheet, in the section entitled “Programmes/courses offering this Teaching Unit”.


The course will be organized in 3 different modules that address a variety of techniques, tools and methodologies to help  building software systems that are easier to understand, maintain, reuse and evolve:

  1. Software understanding : how to understand existing systems
  2. Software maintenance : how to build software that is more maintainable, or how to improve existing software to make it more maintainable
  3. Software reuse and evolution : how to build reusable software and how to reuse existing software
Teaching methods


Theory sessions covering the different course topics

Practical sessions to apply the concepts in practice

  • developing and evolving a maintainable and reusable software system

Missions to complete the application developed during the practical sessions

Evaluation methods
  • [10%] Obligatory participation during practical sessions
    • reviewing work of other groups
  • [40%] intermediate missions in-between practical sessions
    • presentation and demo of deliverables produced
    • 2 missions (10% + 20%) throughout semester
    • demo of 3rd mission (10%) at end of semester
  • [50%] during exam session
    • [25%] written exam
    • [25%] presentation and discussion
      • on 3rd mission + overall lessons learned throughout course
Other information

Even though good quality software may be easier to maintain and evolve, software quality assurance techniques will not be addressed explicitly in this course as they are the topic of a separate course on Software Quality Assurance [LINGI2251]

Expected background:

  • Having a good knowledge of and experience with object-oriented programming concepts, algorithms and data structures.
  • Having prior or simultaneous experience with the development of a medium- to large-scale software system.
Online resources

Moodle course website

The course slides as well as other relevant and practical information related to the course will be accessible on Moodle. The same platform will also be the means of communication between the teacher(s) and the students.

Compte tenu de la variété des sujets abordés, ce cours ne suivra pas un seul livre de référence, mais sera basé sur du matériel provenant de nombreuses sources différentes. Les slides de cours seront le matériel de référence principale pour ce cours et des pointeurs vers des lectures supplémentaires seront fournis par la plate-forme de cours en ligne.
Given the variety of topics covered, this course will not follow a single textbook but is based on material from many different sources. As such, the course slides will be the main reference material for this course and pointers to additional reading material will be provided through the online course platform.
Faculty or entity

Programmes / formations proposant cette unité d'enseignement (UE)

Program title
Master [120] in Computer Science and Engineering

Master [120] in Computer Science