In the winter semester of 2008, I gave a 14-week lecture (my very first) on the topic of software evolution at the University of Berne.
Software systems both are eternal, and are not eternal. On the one hand, the bits that form software systems have the same mathematical meaning regardless of time, and in that sense software systems are eternal. On the other hand, software systems reside in a larger environment: they run on a piece of hardware, they fulfil a certain need at a certain moment, they make use of other software systems. But, hardware and needs change, and software systems must evolve too if they are to remain useful.
This course presented a survey of various techniques, like reverse engineering, program visualisation, or refactoring, that have been successfully used to re-engineer and evolve industrial systems. The accompanying lab provided hands-on experience with analyzing software systems using reverse engineering tools.
The slides below formed part of the supporting material.
The lecture was well received by students. The official feedback form is available below: