E0239: Software Reliability Techniques

Course Timing and Venue: TBD

Instructor: Aditya Kanade (Office hours: TBD)




Our dependence on software is increasing at a phenomenal rate. As a consequence, the concerns about reliability of software in terms of correctness and security are taking the center stage. In this course, we study the state­-of-­the-­art techniques for analyzing and improving software reliability. Our focus will be on: (1) understanding the dominant models of concurrent programming and formal reasoning for them and (2) understanding the nature and causes of security vulnerabilities and techniques to detect them. We will study concurrency and security issues related to smartphone and web programming in addition to more traditional software issues.

The course has no pre-requisites but requires the inclination and ability to understand programming semantics and concepts from theoretical computer science. 

  • Programming and security basics: Android programming, JavaScript programming.
  • Concurrency: multi­-threading, synchronization, event­-based dispatch.
  • Dynamic analysis: security monitoring, happens-­before reasoning, vector clocks, race detection.
  • Static analysis: dataflow analysis, information flow analysis.
  • Model checking: explicit ­state model checking, symbolic model checking.
Course Grading

Lecture Schedule

  • Programming Android, Zigurd Mednieks, Laird Dornin, G. Blake Meike and Masumi Nakamura, O'Reilly, 2011.
  • Effective JavaScript, David Harman, Addison­Wesley, 2012.
  • Even Faster Websites, Steve Souders, O'Reilly, 2009.
  • Additional research papers.