An innovative hands-on introduction to techniques for specifying the behaviour of software components.A specification of a program is a detailed statement of what users of a program or program fragment expect it to do and what its developers expect of its environment. This book provides a self-contained introduction to software specifications suitable for use by programming students with some background in discrete mathematics and logic. This is one of the few books available on specifications that adopts a hands-on approach, presenting basic concepts in the context of numerous small programming examples, making these concepts easier for students to grasp than the traditional large-project approach used in software engineering courses.A specification of a program is a detailed statement of what users of a program or program fragment expect it to do and what its developers expect of its environment. This book provides a self-contained introduction to software specifications suitable for use by programming students with some background in discrete mathematics and logic. This is one of the few books available on specifications that adopts a hands-on approach, presenting basic concepts in the context of numerous small programming examples, making these concepts easier for students to grasp than the traditional large-project approach used in software engineering courses.This innovative volume provides a hands-on introduction to techniques for specifying the behavior of software components. A text for a second-year undergraduate course in Computer Science and Computer Engineering programs, it is also suitable for self-study. This book will help students to improve their programming skills and gain a sound foundation and motivation for subsequent courses in advanced algorithms and data structures, software design, formal methods, compilers, programming languages, and theory. The main topics covered are techniques for using programmer-friendly assertional notations tol#