CIS 573 Software Engineering -- Fall 2015

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.



Chris Murphy,

Back to Top

Class Meeting Times

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

Back to Top

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
  • Fault-based testing and mutation analysis
  • Test case selection and prioritization
  • Property-based testing
  • Model checking
  • Integration testing

Software Design

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

Back to Top


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.

Back to Top


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 (35%)
    • There will be 5-6 short assignments (2-3 weeks each) related to the major themes of the course: testing, debugging, refactoring, and design.
  • Group project (25%)
    • 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.