Module 3: Software Specifications

[Video] [Slides]


This module introduces you to Software Specifications and their role in software testing. You will learn about the landscape of testing methods and how program analysis can be used to automate testing. You’ll learn about different kinds of specifications, including pre- and post-conditions and loop- and class- invariants, and how they help improve program reliability. You’ll then learn how to automatically infer such specifications using the Houdini algorithm and how to measure the quality of a test suite to make it more robust.


  • Classify and compare different testing approaches: Automated testing, Manual testing, Black-box testing, and White-box testing.
  • Classify program specifications into two categories: Safety Properties and Liveness Properties. Give examples of each category.
  • Explain and give examples of specifications of different units of a program such as functions, loops, and classes: Pre- and Post- Conditions, Loop Invariants, and Class Invariants.
  • Apply the Houdini algorithm on programs to automatically infer specifications and explain its pros and cons.
  • Measure the quality of a test suite using approaches: Code Coverage and Mutation Analysis.