Skip to main content

About this book

This textbook offers undergraduate students an introduction to the main principles and some of the most popular techniques that constitute ‘software quality assurance’. The book seeks to engage students by placing an emphasis on the underlying foundations of modern quality-assurance techniques , using these to highlight why techniques work, as opposed to merely focussing on how they work. In doing so it provides readers with a comprehensive understanding of where software quality fits into the development lifecycle (spoiler: everywhere), and what the key quality assurance activities are.

The book focuses on quality assurance in a way that typical, more generic software engineering reference books do not. It is structured so that it can (and should) be read from cover to cover throughout the course of a typical university module. Specifically, it is

Concise: it is small enough to be readable in its entirety over the course of a typical software engineering module.

Explanatory: topics are discussed not merely in terms of what they are, but also why they are the way they are – what events, technologies, and individuals or organisations helped to shape them into what they are now.

Applied: topics are covered with a view to giving the reader a good idea of how they can be applied in practice, and by pointing, where possible, to evidence of their efficacy.The book starts from some of the most general notions (e.g. quality and development process), and gradually homes-in on the more specific activities, assuming knowledge of the basic notions established in prior chapters. Each chapter concludes with a “Key Points” section, summarising the main issues that have been covered in the chapter. Throughout the book there are exercises that serve to remind readers of relevant parts in the book that have been covered previously, and give them the opportunity to reflect on a particular topic and refer to related references.

Table of Contents

Chapter 1. Introduction

The term ‘software quality assurance’ rarely evokes much excitement. It is often perceived as a form of applied pedantry, lacking the challenge and creativity that is required to actually design and build a software system. In short, it is often seen as a necessary chore. Nobody wants to read and learn about necessary chores. To some, a book on quality assurance is about as enticing as a book on dish-washing.
Neil Walkinshaw

Chapter 2. What Is Software Quality, and Why Does it Matter?

If you have ever debated the relative merits of an operating system, a programming language, or even a text editor, you will immediately appreciate the difficulties that arise when trying to assess and communicate about software quality. Software has many ‘qualities’, some of which are easy to assess (e.g. cost or ease by which it is installed), whereas others lie within the eye of the beholder (e.g. the aesthetics of a user interface). Different users can also priorities these qualities in different ways, can have very different expectations, and can easily come up with contradictory assessments.
Neil Walkinshaw

Chapter 3. Software Development Processes and Process Improvement

Software systems can be extremely complex. There can be numerous stakeholders, with different (often conflicting) requirements. There can be, as we have already seen, a raft of (often conflicting) quality concerns that need to be satisfied. However, time and resources are often limited.
Neil Walkinshaw

Chapter 4. Managing Requirements and Code

Software development revolves around the ability to implement a set of requirements (whether explicit or implicit) as source code. Requirements can be diverse in nature, complex, and continuously subject to change. The same goes for the source code; it too is invariably complex, can constitute various libraries and languages, and is also subject to change, potentially by hundreds or even thousands of different, disparate developers.
Neil Walkinshaw

Chapter 5. Planning Activities and Predicting Costs

In Chapter 3 we saw that development processes can provide a broad work-flow to govern the development of a software product. In Chapter 4 we covered the various conventions and technologies that can help developers to successfully collaborate on source code. Even with those tools, there still needs to be an understanding amongst the developers of who will do what, and when.
Neil Walkinshaw

Chapter 6. Testing

So far, we have discussed software quality purely in terms of what it is (Chapter 2), and in terms of the process frameworks (Chapter 3), and the good practice – coding, design, and planning (Chapters 4 and 5) – that can be used to ensure it. Ultimately, however, it becomes necessary to actually take stock – to step back and assess the quality of the system at hand. This chapter marks the point where we move from discussing ‘good practice’ to discussing families of techniques – testing, inspection, and measurement, that are specifically dedicated to providing an objective assessment of (a particular aspect of) the quality of a system.
Neil Walkinshaw

Chapter 7. Software Inspections, Code Reviews, and Safety Arguments

In the chapter on software testing, we have seen that there are numerous strategies by which to assess the quality of a software system by executing it. However, the effectiveness of testing is subject to a range of limitations; there is rarely a complete and reliable oracle, and there is no accepted means by which to generate adequate test sets (or even by which to measure adequacy). Furthermore, many aspects of software quality (such as the maintainability of the source code) cannot be established by testing.
Neil Walkinshaw

Chapter 8. Measurement

Chapter 3 showed us how software is the result of a process, and showed how the quality of a product and the process used to create it are intricately linked. We have seen how successful product development processes tend to be highly iterative and feedback-driven (remember Shewhart’s Plan-Do-Check-Act cycle). And we have seen how, with the emergence of Agile software development, these principles have gradually filtered through to conventional software development.
Neil Walkinshaw

Chapter 9. Conclusions

This book has sought to cover the most salient aspects of software quality assurance. In doing so we have discussed what software quality is, why it is important, and how it is defined. We have examined how the activities of quality assurance are closely linked to the choice of software development process. We have covered agile software development, testing, inspections, safey reviews, metrics, and cost estimation.
Neil Walkinshaw
Additional information