Latest Announcements

01/28: Lecture 2 uploaded
01/26: Lecture 1 uploaded
01/10: Course website is up

Course Overview

Reliability is an essential quality requirement for all artifacts operating in the real-world, ranging from bridges, cars to power grids. Software systems are no exception. In this computing age when software is transforming even traditional mission-critical artifacts, making sure the software we write is reliable becomes ever more important.

This course exposes students to the principles and techniques in building reliable systems. We will study a set of systematic approaches to make software more robust. These include but are not limited to static analysis, model checking, symbolic execution, fuzzing, and formal verification. In addition, we will cover the latest research in system reliability.

The overall goal of this course is to help students build reliable software. Students will gain in-depth understanding of software defects. The course materials will introduce to students a wide array of principled techniques that detect, tolerate, debug, and fix bugs. Students will learn practical reliability frameworks such as LLVM and KLEE that they can apply on real-world software, including their own code.

Through intensive readings, in-class presentations, and discussions, students will grasp how to read research papers effectively and critically. In addition, students will conduct a mini-research course project in a team and build a prototype to address open challenges in software reliability research.

Prerequisites: 601.220 (Intermediate Programming) and 601.328/428 (Compilers and Interpreters)

Optional: 601.318/418/618 (Principles of Operating Systems).



Ryan Huang
Email: huang ~AT~ cs ~DOT~ jhu ~DOT~ edu
Office Hours: Thursdays 4-5pm EST (or by appointment)


Yigong Hu
Email: hyigong1 ~AT~ jhu ~DOT~ edu
Office Hours: TBA

Staff list (preferred email channel for the course staff)


Lecture Tuesday/Thursday 01:30pm-02:45pm, Zoom


The course is organized through readings and discussions. The instructor will curate a list of representative papers for different topics. In each class, the students will present the paper and lead the discussions. Students will work in a group on a small course project to practice, analyze and improve some reliability techniques.

The major material of the course comes from seminal, noteworthy, or representative papers from the literature. Each lecture will have one or two assigned papers to read. You MUST read the required papers before the class, and be prepared to discuss them. In-class questions or quizzes will confirm you do the reading. For some topics, we will also list optional readings. You are encouraged, but not required, to read those.

Students often find it useful to form a reading group to discuss papers together before the class period, and we encourage the practice. The reading load will be heavy. So be sure to allocate enough time for it.

A helpful guide written by Bill Griswold on how to read and critique a research paper is linked here.


You are required to submit a brief review for each lecture’s required reading. The review must be turned in by 12pm on the day of each lecture. Please read further instructions on the paper reviews.

Paper Presentations

The structure of this course is unusual in that there are NO regular lectures. Instead, we will discuss research papers that we will have all read before each class period. I will lead the discussions for the first few lectures. For the majority of the remaining lectures, students will be presenting the assigned papers and leading the discussions.

Each student needs to present at least twice a semester. We may pair two students to present one paper if there are many students. We will send the presentation schedule sign-up over email.

Students can refer to the paper authors’ slides when preparing the presentation, but must make the slides on their own and should not use the slides found on the Internet. The presentation should be clear and well structured. They should also be informative and detailed, i.e., a presentation just vaguely describes the high-level idea of the paper is NOT OK.

The quality of each presentation will be rated by the course staff and counts into the overall grade.

Presenters for the first eight slots get bonus credits. The earlier the slot, the higher the bonus credits.

Class Participation

Because of the course format, class participation is vital to the success of the course. If you expect to just sit silently in the class and learn, you will get little out of this course.

To ensure students have read the papers, throughout the lectures, I will post pop quiz questions about the paper and expect you to be able to answer. Note that your answers to these questions will be part of your overall grade.

In addition, while a student is presenting a paper and leading the discussion, the rest of the students are expected to still actively participate by asking questions, answering questions raised by the presenter, forming a small group to debate on a point, etc. The class participation accounts for a significant portion of the grade.


  • Reviews: 15%
  • Presentation: 15%
  • Class Participation: 20%
  • Project: 50%


  • Reviews, if any, must be turned in before class.
  • Three absences of classes are allowed for good reasons (e.g., conference presentation, interview). But reviews of the papers must be turned in.
  • You are strongly encouraged to discuss the papers with other students in the class – you may have insights that others do not, and vice versa. Often students form reading groups, which I heartily encourage. Note that group discussion, however, is not an effective substitute for actually reading the paper.
  • The course project is to be completed as a team. You can discuss project materials with others in the course, but your code must have been authored exclusively by members of your team. You may not copy code from another team or make your code available to others.
  • All students are required to know and adhere to the JHU CS Department Academic Integrity Code and university policies. Failure to do so will result in serious consequences outlined in the policy.