E6121 Reliable Software

Spring 2017 -- Junfeng Yang

  • Location: 103 Knox Hall
  • Time: T 4:10pm-6:00pm
  • Credits: 3
  • Instructor: Junfeng Yang
  • Address: 519 CSB
  • Office Hours: By appointment
  • TA: Xinhao Yuan
  • Office Hours: Th 2-4pm
  • Address: TA room
  • Email: reliability-course@lists.cs. Best way to reach us.

Course Description

Despite our increasing reliance on computing platforms, making reliable software systems remains difficult. Software errors have been reported to take lives and cost billions of dollars annually. Making reliable software is one of the most important problems in computer science. In recent years, this problem has drawn huge attention from researchers in systems, software engineering, and programming language communities. A number of automated techniques have been developed to increase system reliability. In this course, we will study the most practical and most important of these reliability techniques. This semester we will focus on the following topics: program analysis, web, mobile, concurrency, and distributed systems.

For details, please go to the Course Syllabus page.

Course Goal

The general goal of this course is to help you make reliable systems. It will help you gain a better understanding of software bugs and techniques to detect, debug, and fix them. This understanding will make you a more effective programmer.

If you are interested in doing research in the area of software reliability, this course can help you get started; if you work in other areas such as operating systems, networking, security, and databases, the concepts and techniques you learn from this course may help you create interesting projects that span both your area and software reliability.

Course Format and Student Workload

This course will center around readings and discussions; it has 2 programming labs and a final project . The course readings include a list of research papers selected from top system, software engineering, and programming language conferences. We will discuss roughly two to three papers every class meeting. For the in-depth discussions to be possible, you will have to read the papers carefully before class. To help achieve this, I will post reading questions and you will have to answer these questions and turn in your answers before the day of the class.

You have three basic responsibilities for the papers covered in the course:


COMS W3137 Data Structures and Algorithms, COMS W3157 Advanced Programming (or good working knowledge of C/C++), and COMS W3827 Fundamentals of Computer Systems; or equivalents of these three courses.

Linux environment. For instance, you should know how to write a make file.


This semester's enrollment for this class will be limited. Please register early if you plan to take this class in this semester. If the class is full and you would like to take the class, please email the instructor and come to the first day of class.

The enrollment is open to PhD, MS and undergraduate students. If you are an undergraduate and would like to take the course, please email the instructor for permission.


There is no required textbook; all relevant materials will be made available online at the Course Syllabus page.


40%: Class participation. To encourage in-depth discussion, 40% of the grade will be assigned to in-class participations.
60%: Final project.
0%: Reading questions and programming labs. These are meant to help you understand papers and complete your final project. We will read your answers and solutions but won't grade them because we trust that you'll do the right thing when taking this advanced graduate-level course.