This invaluable textbook/reference provides an easy-to-read guide to the fundamentals of formal methods, highlighting the rich applications of formal methods across a diverse range of areas of computing.

Topics and features: introduces the key concepts in software engineering, software reliability and dependability, formal methods, and discrete mathematics; presents a short history of logic, from Aristotle's syllogistic logic and the logic of the Stoics, through Boole's symbolic logic, to Frege's work on predicate logic; covers propositional and predicate logic, as well as more advanced topics such as fuzzy logic, temporal logic, intuitionistic logic, undefined values, and the applications of logic to AI; examines the Z specification language, the Vienna Development Method (VDM) and Irish School of VDM, and the unified modelling language (UML); discusses Dijkstra's calculus of weakest preconditions, Hoare's axiomatic semantics of programming languages, and the classical approach of Parnas and his tabular expressions; provides coverage of automata theory, probability and statistics, model checking, and the nature of proof and theorem proving; reviews a selection of tools available to support the formal methodist, and considers the transfer of formal methods to industry; includes review questions and highlights key topics in every chapter, and supplies a helpful glossary at the end of the book.

This stimulating guide provides a broad and accessible overview of formal methods for students of computer science and mathematics curious as to how formal methods are applied to the field of computing.


This essential textbook presents a concise introduction to the fundamental principles of software engineering, together with practical guidance on how to apply the theory in a real-world, industrial environment. The wide-ranging coverage encompasses all areas of software design, management, and quality.

Topics and features: presents a broad overview of software engineering, including software lifecycles and phases in software development, and project management for software engineering; examines the areas of requirements engineering, software configuration management, software inspections, software testing, software quality assurance, and process quality; covers topics on software metrics and problem solving, software reliability and dependability, and software design and development, including Agile approaches; explains formal methods, a set of mathematical techniques to specify and derive a program from its specification, introducing the Z specification language; discusses software process improvement, describing the CMMI model, and introduces UML, a visual modelling language for software systems; reviews a range of tools to support various activities in software engineering, and offers advice on the selection and management of a software supplier; describes such innovations in the field of software as distributed systems, service-oriented architecture, software as a service, cloud computing, and embedded systems; includes key learning topics, summaries and review questions in each chapter, together with a useful glossary.

This practical and easy-to-follow textbook/reference is ideal for computer science students seeking to learn how to build high quality and reliable software on time and on budget. The text also serves as a self-study primer for software engineers, quality professionals, and software managers.


This textbook describes the approaches used by software engineers to build quality into their software. The fundamental principles of software quality management and software process im provement are discussed in detail, with a particular focus on the CMMI framework. Features: includes review questions at the end of each chapter; covers both theory and practice, and provides guidance on applying the theory in an industrial environment; examines all aspects of the software development process, including project planning and tracking, software lifecycles, software inspections and testing, configuration management, and software quality assurance; provides detailed coverage of software metrics and problem solving; describes SCAMPI appraisals and how they form part of the continuous improvement cycle; presents an introduction to formal methods and the Z specification language; discusses UML, which is used to describe the architecture of the system; reviews the history of the field of software quality.

This textbook is a systematic guide to the steps in setting up a Capability Maturity Model Integration (CMMI) improvement initiative. Readers will learn the project management practices necessary to deliver high-quality software solutions to the customer on time and on budget. The text also highlights how software process improvement can achieve specific business goals to provide a tangible return on investment. Topics and features: supplies review questions, summaries and key topics for each chapter, as well as a glossary of acronyms; describes the CMMI model thoroughly, detailing the five maturity levels; provides a broad overview of software engineering; reviews the activities and teams required to set up a CMMI improvement initiative; examines in detail the implementation of CMMI in a typical organization at each of the maturity levels; investigates the various tools that support organizations in improving their software engineering maturity; discusses the SCAMPI appraisal methodology.


Tracing the story of computing from Babylonian counting boards to smartphones, this inspiring textbook provides a concise overview of the key events in the history of computing, together with discussion exercises to stimulate deeper investigation into this fascinating area. Features: provides chapter introductions, summaries, key topics, and review questions; includes an introduction to analogue and digital computers, and to the foundations of computing; examines the contributions of ancient civilisations to the field of computing; covers the first digital computers, and the earliest commercial computers, mainframes and minicomputers; describes the early development of the integrated circuit and the microprocessor; reviews the emergence of home computers; discusses the creation of the Internet, the invention of the smartphone, and the rise of social media; presents a short history of telecommunications, programming languages, operating systems, software engineering, artificial intelligence, and databases.


This practically-focused textbook provides a concise and accessible introduction to the field of software testing, explaining the fundamental principles and offering guidance on applying the theory in an industrial environment.

Topics and features: presents a brief history of software quality and its influential pioneers, as well as a discussion of the various software lifecycles used in software development; describes the fundamentals of testing in traditional software engineering, and the role that static testing plays in building quality into a product; explains the process of software test planning, test analysis and design, and test management; discusses test outsourcing, and test metrics and problem solving; reviews the tools available to support software testing activities, and the benefits of a software process improvement initiative; examines testing in the Agile world, and the verification of safety critical systems; considers the legal and ethical aspects of software testing, and the importance of software configuration management; provides key learning topics and review questions in every chapter, and supplies a helpful glossary at the end of the book.

This easy-to-follow guide is an essential resource for undergraduate students of computer science seeking to learn about software testing, and how to build high quality and reliable software on time and on budget. The work will also be of interest to industrialists including software engineers, software testers, quality professionals and software managers, as well as the motivated general reader.