CMPUT 663 - Software Maintenance and Reuse


Software has become an essential component in all our daily services and products. Good software engineering practices are essential to develop reusable and reliable software. Researchers and practitioners are constantly developing innovative techniques and tooling to improve software maintenance and reuse. Examples include tools for earlier detection of bugs, recommender systems for using Application Programming Interfaces (APIs), and more accurate refactoring and merging tools.

This seminar course explores seminal and state-of-the-art research on software maintenance, evolution, and reuse. While a variety of problems related to maintenance and reuse are explored in this course, the common methodology used for studying these problems is mining software repositories. Mining software repositories involves mining and analyzing software engineering data from various repositories such as version control repositories, bug repositories, developer forums, etc.

The course instructor will provide some background lectures. During the majority of the course, students will present and discuss papers related to the course topics. Students will also get hands-on training through the course assignments and project.


  • Understand the various software engineering (SE) data sources and how to mine them.
  • Get hands-on training on SE mining and analysis tools.
  • Become familiar with how to design quantitative and qualitative empirical SE studies.
  • Learn how to critique and write research papers.

Course Work

  • Assignments
  • Projects
  • Participation
  • Presentations
  • Paper Critiques