ICS 691E Software Quality Assurance

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 1 software engineering research paper over the course of the semester. 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 maintenance (e.g., improving an existing tool, literature review, empirical study between several tools, mining repositories, etc.). The project will allow group work, but working in a group is optional (i.e., you may choose to work alone). 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

  • 2022 Fall


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 of 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.

From where can I access the course material?

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