This document discusses techniques for recovering from software faults. It begins by introducing the importance of fault tolerance in software and defines key concepts like faults, errors, and failures. It then discusses several techniques for fault detection, including error detecting codes, software consistency checks, and hardware/software redundancy. Common fault recovery mechanisms like checkpoint/recovery schemes and process pairs that save state are also explained. Finally, the document discusses the properties of software faults, specifically the fail-stop property, and how various fault recovery methods assume or achieve this property.