CMPUT 663: Software Maintenance and Reuse

Course Overivew

Software has become an essential component in all our daily services and products. Good software engineering practices are essential to develop resuable and reliable software. Researchers and practicitioners are constantly developing innovative techniques and tooling to improve software maintenance and reuse. Some of the goals of these techniques include earlier detection of bugs, faster and more correct use of Application Programming Interfaces (APIs), and smoother refactoring of code for better reuse.

Course Schedule

  • Class times: TR 3:30 - 4:50
  • Class location: CSC B41, University of Alberta

Course Objectives

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. At the end of the course, students will acquire the knowledge needed to perform quantitative and qualitative studies using SE data, which they can later integrate into their own research. Additionally, students will learn how to read and critique research papers.

The course instructor will provide some background lectures during the first two weeks of the course. During the remainder of the course, students will present and discuss papers related to the course topics.

Course Topics

  • Software evolution
  • Bug prediction and bug detection
  • Code duplication
  • Code reuse
  • API usage patterns
  • Highly configurable systems and software product lines
  • Software merging
  • Code recommender systems

Course Work

  • Paper presentation(s) and discussion
  • Weekly Paper Critiques
  • Class Participation
  • Assignments
  • Course Project