This widely anticipated third edition provides a systematic exploration of one of the most common approaches to program verification, known as the assertional approach. This approach is applied to deterministic and nondeterministic sequential programs of varying complexity, together with both parallel and distributed concurrent programs. The expanded content also includes coverage of the verification of object-oriented programs. For each class of programs, the authors introduce proof systems for the verification of partial and total correctness, justified formally in corresponding soundness theorems. Case studies supplied throughout the book demonstrate the use of the proof systems and formally verify solutions to classical problems, such as producer/consumer and mutual exclusion. This modern update of a classic, reader-friendly textbook is perfect for an introductory course on program verification for advanced undergraduate or graduate students. Outlines for possible courses are suggested in the Preface.