Introducing two widely-used approaches to the formal specification of software systems, this book considers VDM and the algebraic approach. In each case, the emphasis is intuitive, rather than mathematical and shows the reader how to construct a formal specification from the first principles by using general procedures that can be followed each time. Familiar applications are referred to throughout and examples, small case studies and problems accompany each chapter. The two approaches are brought together in one large joint case study at the end of the book, as well as a section comparing and contrasting them. The book includes a discussion of prototyping using Prolog, OBJ3 and Miranda. It should be suitable for advanced undergraduates; postgraduates in computing and software engineering; software engineers; programmers; and other computing professionals.