A failure is the observable incorrect behavior that users see. A fault is the defect in the code that causes failures. An error is a human mistake that may introduce faults. A defect is similar to a fault, a flaw in the code. The distinction: error leads to fault leads to failure.