Software systems continuously change and, eventually, they become difficult and costly to comprehend and maintain. Consequently, software maintenance and evolution are essential activities that account for more than half of the resources invested in the development of a software system. To reduce such costs, different strategies can be adopted by software practitioners.
In this course, students will be introduced to the principles and techniques of software maintenance and evolution.
Topics covered: software change management, software quality, mining software repositories, software refactoring, defect prediction and effort estimation, software (re)documentation, etc.