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.
This graduate-level 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. Students will be introduced to and use tools and techniques to evaluate and improve code quality, and overall system performance.
By the end of the course, students will have strong knowledge of a specific subarea of software quality, they will understand how research is used to maintain software and improve quality, and they will understand how to comprehend and disseminate the results of research to their peers.
Course Objective
To teach students:
- The importance of software quality and building maintenance-friendly software systems
- The types of software testing techniques
- Importance of code quality and the typical anti-patterns associated with code
- Students will be introduced to tools that can be used to detect these anti-patterns
- Technical debt
Student learning outcomes:
- Students are aware of the impact/cost of poor software quality
- Students will be writing more maintenance-friendly code
- Students can apply the learnings from this course in their job (either in an industrial setting or as a research assistant)
Institutional Learning Objectives
This graduate-level course aligns with the Advanced Degree Institutional Learning Objectives of the University of Hawaii at Mānoa. Specifically:
- Comprehensive knowledge - Students will be reading and presenting seminal and highly cited research papers on the topics covered in class. Students will be using well-established software quality tools.
- Understanding of research methodology - The course project involves students writing a near-publishable research paper.
- Research methodology and/scholarly inquiry techniques - The course project involves students writing a near-publishable research paper.
- Critically analyze and synthesize information and data - As part of their course project, students will be required to to review and critique related literature.
- Communicate appropriately - Students will be required to present the papers they read, and also project updates.
- Responsible, ethical, professional conduct of research - Students are required to submit their deliverables by set deadlines. Students working on human subject-based projects will be expected to complete formal CITI training.
- Interact professionally - Students are expected to work in a team environment for their project. Students are also graded on their classroom participation.
Topics
The following are the most likely set of topics that will be covered in the course:
- Overview of Software Engineering
- Testing Fundamentals
- Unit Testing
- Regression & Mutation Testing
- Web Application Testing (using Selenium)
- Software Quality Metrics
- Software Design & Code Smells
- Software Test Smells
- Identifier Naming & Linguistic Smells
- Software Refactoring
- Code Reviews
Deliverables
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.
Project
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.
Assignments
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)
- 4th year undergraduate students
Instructed Semesters
- 2022 Fall – See Course Evaluation Results
- 2023 Fall – See Course Evaluation Results
FAQs
Are there prerequisites?
Basic programming knowledge/experience is required. Ideally, Java and/or Python.
Can undergraduate students take this course?
Fourth-year 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 refine the study for potential submission to a software engineering conference or journal. It’s important to note that this will take place after the conclusion of the semester. Below is the list of past class projects that have been published:
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.