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 Change impact analysis
o Reverse engineering
- Software Maintenance
o Coding standards
o Design principles and heuristics
o Design patterns
- Software Reuse and Evolution
o Reuse techniques and design for reuse
o Libraries vs. application frameworks
- Software product lines
At the end of this learning unit, the student is able to :
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:
Given the learning outcomes of the "Master  in Computer Science" program, this course contributes to the development, acquisition and evaluation of the following learning outcomes:
Students completing successfully this course will be able to
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”.
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
- 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.