The book introduces a novel perspective on software testing by defining generic models and coverage criteria suitable for all software life-cycle artifacts. This book is based on our collective experience of over 40 years teaching software testing to hundreds of students, and features accurate theory, comprehensive practice, clear examples, and numerous exercises.