ICS 691E Software Quality and Maintenance

Table of Contents

Course Description

As software systems evolve, so does their complexity, resulting in more practitioner effort (which can also be error-prone) to maintain the system. Furthermore, software maintenance is one of the most expensive phases in the software development lifecycle. To alleviate the costs and complexity of software maintenance, practitioners must understand the impact of poor code quality and techniques to detect and correct such occurrences.

The course introduces students to software quality concepts and the major activities involved in software maintenance, such as refactoring and the concept of technical debt. Additionally, students will learn about writing high-quality unit tests, crafting high-quality identifier names, and techniques to improve code readability and understandability.

By the end of the course, students will have strong knowledge of a specific subarea of software quality, you will understand how research is used to maintain software and improve quality, and you will understand how to comprehend and disseminate the results of research to your peers.


The following are the most likely set of topics that will be covered in the course:

  • Overview of Software Engineering
  • Testing Fundamentals
  • Unit Testing
  • Software Quality Metrics
  • Software Anti-Patterns
    • Design & Code Smells
    • Test Smells
    • Linguistic Smells
  • Software Refactoring
  • Code Reviews
  • Bug Management
  • Regression & Mutation Testing
  • Web Testing using Selenium


Paper Presentation & Reviews

Every student will present at least 1 software engineering research paper over the course of the semester. The total number of papers a student will present will be determined on the number of students enrolled. The presentation duration should be between 10 to 15 minutes. Every presenter must submit their presentation prior to their presentation in class. In addition, every student will review a total of 3 papers over the course of the semestes. Students will fill out a small form to show they have read and (attempted to) understand the paper before the class where that paper is presented. Reviewers will lead the discussion about the paper presented in class. The discussion should last between 8 to 10 minutes.


There will be a final project for the course related to software quality and maintenance (e.g., improving an existing tool, literature review, empirical study between several tools, mining repositories, etc.). The project will allow group work (you may choose to work alone, but this is not recommended). A predefined list of project topics is available, but you are free to propose your own topic as long as it is a software engineering research project and approved by the course instructor.


Students are expected to work on a specific set of graded homework assignments during the course. Details of which will be communicated in class.

Other Details

Student Level

Graduate (Masters & PhD)

Instructed Semesters


Are there prerequisites?

Basic programming knowledge/experience is required. Ideally, Java and/or Python.

Can undergraduate students take this course?

Undergraduate students are welcome, but would need to work on the same assignments/tasks as the graduate students (i.e., no reduction in load). Please speak to your advisor about enrolling.

Will it be possible to submit my course project to a conference/journal?

Absolutely! As long as your work is high-quality, your instructor will work with you (and your group) to polish the study so that it can be submitted to a software engineering venue. Please keep in mind that this will happen only after the completion of the semester.

How will group assignment work for projects?

Formation of groups is the responsibility of the students. Students should discuss among themselves and form a group. Groups should not exceed 3 members. Each group should work on a different topic.

Can I work by myself for the project (i.e., a one person group)?

It is not recommended. Talk to your instructor and clearly explain the rationale for not wanting to work in a group.

Can I switch groups?

No. Once the project commences, you cannot switch groups. Your grade will be impacted if you decide you do not want to work on the project. Hence, choose the topic and group you want to work with carefully.

What are some past projects students have worked on for this course?

Some past projects include:

  • Mining Stack Overflow to analyze discussions about specific software engineering concepts
  • Mining software repositories and building tools to analyze source code
  • Running AI/ML models on software engineering datasets

From where can I access the course material?

Course material is available on Laulima under Resources. Additionally, students should submit their deliverables via Laulima.