Software developers put a great amount of their effort and resources on maintaining existing software systems. For example, some of these maintenance activities are improving the design and implementation of a software system, bug localization and removal, and developing new features in a software system. The aim of the software evolution process is ensuring the successful operation of a software system after its production stage. Nevertheless, this is a complex and time-consuming process such that several approaches and techniques have been proposed in the software engineering literature to solve this problem. The aim of this course is to acquaint graduate students with the concepts of software evolution, and the latest research conducted in this field.

Topics and Schedule

  • Part I: Introductory Materials
    • Introduction to Software Evolution (1 session)
  • Part II: Reverse Engineering Software Systems
    • Software Visualization (1 session)
    • Clone Detection and Analysis (2 sessions)
    • Feature Location (1 session)
    • Aspect-Oriented Programming & Aspect Mining (2 sessions)
    • Mining Software Repositories (1 session)
    • Recommendation Systems in Software Engineering (1 session)
    • Fault Localization (2 sessions)
    • Bug Prediction (2 sessions)
    • Software Frameworks Comprehension (2 sessions)
  • Part III: Reengineering Software Systems
    • Object-Oriented Reengineering (2 sessions)
    • Migration of Legacy Systems (1 session)
    • Software Refactoring (1 session)
  • Part IV: Advanced Topics in Software Evolution
    • API Evolution (1 session)
    • App Stores Mining and Analysis (2 sessions)
    • Code Review (2 sessions)
    • Crowdsourcing for Software Engineering (2 sessions)


  • Two exams (Midterm and Final) – Comprising 60% of the total grade.
  • Paper presentation: Each student should present at least one paper from the most recent top-tier software engineering journals and conferences – Comprising 10% of the total grade.
  • One comprehensive course project: Project’s activities include defining and conceptualizing a research topic, surveying, proposing a solution, evaluating the proposed solution, and presenting the results as a research paper that will be done throughout the semester – Comprising 30% of the total grade.

Main References

  • Some survey papers from top-tier software engineering journals and conferences
  • Mens and S. Demeyer (Eds.), Software Evolution, Springer, 2008.
  • Bird, T. Menzies, and T. Zimmermann, The Art and Science of Analyzing Software Data, Morgan Kaufmann, 2015.
  • P. Robillard, W. Maalej, R. J. Walker, and T. Zimmermann, Recommendation Systems in Software Engineering, Springer, 2014.
  • Tripathy and K. Naik, Software Evolution and Maintenance: A Practitioner’s Approach, Wiley, 2014.