CIS 573 Software Engineering -- Fall 2017

Course Overview

On the first day at your new job as a software engineer, your boss says to you "Here's 6,000 lines of code. Find the bugs. Fix them. Then make the software better." Where would you even begin?

This course seeks to answer questions like: How would you test a program you didn't write? How would you know when you were done testing it? How would you locate and fix the bugs? And make sure that your fixes didn't break other stuff? How would you modify existing code to make it better? What does "better" even mean?

Once you have completed this course, you will be able to answer those questions, and you will understand how to apply academic research to real-world software engineering problems.

This course is currently open only to graduate students in the CIS department.



Chris Murphy,

Teaching Assistants

Feifei Duan
Qi Fang
Jane Lee
Xuye (Karin) Lin
Brian Ting


Class Meeting Times

Tues/Thurs 10:30am-12:00pm, location TBD


Topics Covered

This course investigates quantitative approaches to answering the question "what is good software?" by covering the following topics:

Software Testing and Verification

  • Test case generation: black-box and white-box
  • Test set coverage metrics
  • Symbolic execution
  • Fault-based testing and mutation analysis
  • Test case selection and prioritization
  • Property-based testing
  • Model checking
  • Integration testing and mock objects

Software Design

  • Code readability and understandability
  • Design patterns and anti-patterns
  • Refactoring and code smells
  • Object-Oriented design metrics

Software Quality

  • Reliability and fault-tolerant computing
  • Secure programming in Java
  • Program efficiency

We will also have 1-2 guest speakers from industry.



There will be no required textbook for this course. There will be numerous assigned readings over the course of the semester, but they will be made available to you via Canvas.



Note that these are only guidelines, but final course grades will likely be based on the following:

  • Midterm exam (15%)
    • This will be scheduled for sometime in late October.
  • Final exam (25%)
    • This is scheduled by the university registrar.
    • The exam will be comprehensive, but will focus on material covered after the midterm.
  • Homework assignments (40%)
    • There will be 5-6 short assignments (2-3 weeks each) related to the major themes of the course: software quality, testing, refactoring, and design.
  • Group project (20%)
    • You will work in groups of 3-4 people to either: test, improve, and add functionality to an existing application; develop a tool that could be used by software engineers; or conduct research in software engineering.