Preface

The Purpose of This Book

There is nothing new under the sun. It has all been done before.

—Sherlock Holmes: A Study in Scarlet, Arthur Conan Doyle

The purpose of this book is to help you decide and define what a new software system needs to do and to suggest what extra features to add to make it a good system—or even an excellent one. It saves you effort and enables you to be more precise, by providing detailed guidance on how to specify individual requirements. Requirement patterns are encapsulated expertise, conveniently prepackaged for reuse. The book contains 37 requirement patterns, each of which describes an approach to tackling a particular type of situation that crops up repeatedly in all kinds of systems, but focusing on commercial business software. Only a fraction of any system is specific to its business area; the bulk occurs over and over again no matter what your system is for. These patterns cover more than half of all requirements in some systems—a lot more if we add the extra requirements the patterns suggest.

If you're wary of the word "requirement" here, don't be; it doesn't mean you have to be embroiled in paperwork. This book is suitable for use by business analysts using a traditional analysis approach and by software architects and engineers who use agile methods. You can use requirement patterns to help you identify and define what a system needs to do even if you don't write formal requirements as a result.

The requirements for a software system specify the problem it needs to solve—its purpose and goals. If they're omitted or done badly—which is, unfortunately, all too frequently the case—a system is unlikely to be a perfect fit, no matter how well it's implemented. A disturbing proportion of computer systems are judged to be inadequate; many are not even delivered; more are late or over budget. Studies consistently show that the single biggest cause is poorly defined requirements: not properly nailing down a system's purpose and what it must do. Even a modest contribution to improving requirements offers the prospect of saving businesses part of a huge sum of wasted investment.

To build good systems more often, improvements are needed all along the chain. Serious efforts have been (and continue to be) made in nearly all of them. But most fundamental of all is what the requirements themselves actually say (and, just as importantly, fail to say). That's been neglected, but it's what this book concentrates on. If I want to define a requirement of a specific type, what do I need to write? How do I go about it? What extra requirements should I consider writing? What else should I worry about? This book identifies many areas (big and small) for which requirements are frequently inadequate, imprecise, or missed altogether—and suggests what you can do about it. The patterns themselves aim to be down-to-earth and practical—primarily distilled from personal experience—things I wish I'd known all along.

This is primarily a reference work, to be pulled out whenever you want help in a particular situation—to explain what a requirement needs to convey, raise questions to ask, point out potential pitfalls, suggest extra requirements, provide example requirements, and generally provide practical advice. You can start using the requirement patterns without having read the book through.

This book contains lots of example requirements—over 400—many of which are suitable for applying unchanged to any system and others that are a useful starting point for a requirement to suit the reader's needs. These examples are the heart of the book. It was from the study of real-life requirements that the requirement patterns in this book were identified. Omissions, ambiguities, and other weaknesses in these real requirements fed much of what the requirement patterns have to say.

This book also provides guidance on how to write other kinds of information that belong in a requirements specification—such as system scope, assumptions, a glossary, document history, and references—and how to structure a requirements specification.

You won't agree with everything in this book, and you won't need to act on all the suggestions made by any requirement pattern. But if the time it saves you, when writing requirements or later, is worth more than the purchase price, it has earned its keep. I hope that these patterns prove useful one way or another, by containing enough useful and thought-provoking material to lead you to produce better systems.

Who Will Benefit from Using This Book

The primary audience of this book is anyone involved in deciding what a new software system needs to do. This is the business of specifying the requirements for a software system, even if you don't like the word "requirement" or you don't end up writing a full requirements specification. For convenience, we refer to any person who specifies requirements as an analyst; they could be a business analyst, a systems analyst, a systems architect, or a software engineer; they could be a business-oriented or technical person. They might have previous experience with specifying requirements, or they might not. They can be divided into those who use traditional analysis processes and those who use more agile methods:

  1. Business analysts, or anyone fulfilling that role. This book makes no assumptions about how much the reader knows: it's suitable for both junior and experienced business analysts as well as for business executives and software engineers who have never specified requirements before. Requirement patterns can be put into practice quickly.

  2. Software architects and engineers on any system for which requirements have not been written—because the gap must be filled, and it will be one way or another. This book's advice is equally relevant no matter who decides what a system needs to do. Its advice is of just as much value to any organization that does not have dedicated analysts, and particularly those that take an agile approach to development. Agile methods place little (if any) emphasis on writing requirements specifications, but still the functionality of the system must be identified—and the requirement patterns in the book can help just as well here as when using a traditional approach. In extreme programming, in particular, requirement patterns can help you write user stories, interpret user stories, and formulate "rules" for good practices for developers to follow. Software architects and engineers who are familiar with design patterns should be particularly comfortable using requirement patterns.

Secondary audiences are:

  1. Anyone asked to review a requirements specification, which covers a wide range of technical, managerial, and sales people as well as a new system's user community. This book can help reviewers judge a specification's quality and completeness, and discover omissions.

  2. Software developers who must implement requirements. Each requirement pattern contains a Considerations for Development section to assist developers.

  3. Software testers who must test how well the delivered system satisfies its requirements. Each requirement pattern contains a Considerations for Testing section for testers with suggestions on how to test requirements of that type.

  4. Project managers who manage a system's requirements, changes to them, and a project to implement them.

Job titles of people who will find this book valuable include business analyst, systems analyst, business systems analyst, software architect, systems architect, software engineer, testing engineer, product manager, project manager, project office manager, and chief technical officer.

Benefits the Reader Will Gain

You, dear reader, will be able to improve your skills and productivity in the following ways from reading this book (and from using it as a reference):

  1. You will be able to define better requirements—with more detail, precision, and clarity, and with less ambiguity.

  2. You will be able to write requirements more quickly and with less effort, by taking advantage of the effort already put into the book (reuse!).

  3. You will recognize extra topics that requirements should specify, further improving their results and making them more complete.

  4. You will be better able to organize a requirements specification and to write general sections (such as the glossary).

As a result you, your colleagues, and the organization you work for will see further benefits:

  1. It is easier to estimate the effort needed to build a specified system.

  2. Development and testing teams will find it easier to understand the requirements.

  3. The resulting system will better reflect the organization's needs, potentially yielding considerable extra return on the investment in it. What price can you put on avoiding a big mistake?

  4. Fundamental mistakes, misunderstandings, and omissions will be spotted earlier—with potentially huge savings, given that fixing a defect during the design phase costs roughly ten times more than during requirements, and during development ten times more again.

Skills and Experience Needed by the Reader

This book can be used with no previous experience of specifying requirements. Chapter 1 is a "crash course" containing the bare minimum that a novice reader needs to get started. A good general book on requirements engineering (such as those cited at the beginning of Chapter 1) is a better introduction, and readers who have read them or who are already experienced business analysts are likely to get more from this book. Software engineers using agile methods can use the book in isolation. Anyone responsible for reviewing a requirements specification needs no previous knowledge or skills in order to use this book to help them.

This book is accessible to a nontechnical reader. It focuses on writing textual requirements in natural language that can be read by anyone. It is free of arcane diagram formats, deep theory, and jargon. You can read it without knowing UML (Unified Modeling Language) or any other formal technique.

The Structure of This Book

This book is divided into two parts:

  • Part I: Setting the Scene These four explanatory chapters open with Chapter 1 written for someone who is inexperienced at specifying requirements—but everyone should read it, because it states a few principles that are important to the rest of the book. Chapter 2 describes the types of material, in addition to requirements, that belong in a requirements specification. The versions of Chapters Chapter 1 and Chapter 2 printed in the book are merely synopses of much longer, "full" versions that can be downloaded from the associated Web page (as described in the Supporting Resources section that follows). Chapter 3 explains what requirement patterns are all about: the basics, what each pattern contains, how they're organized (into domains), and related concepts. Chapter 4 explains how to use requirement patterns and to write your own.

  • Part II: Requirement Pattern Catalog These are sets of patterns for types of requirements that occur repeatedly, to be used as a reference. It opens with a snapshot of the requirement patterns in this book and then has eight chapters (5 through Chapter 12) containing the requirement patterns themselves.

Bringing up the rear are a glossary of terms and acronyms used and encountered in the book, plus a list of references.

I advise that you read through Part I to understand what's going on. If Chapters Chapter 1 and Chapter 2 in the book don't tell you enough, refer to the Web page for the full versions. You don't need to devour Part II systematically: familiarize yourself with the patterns that it contains (unless you're an analyst keen for advancement!), and refer to it whenever you encounter a situation in which one of the patterns will help.

Supporting Resources

You can download the following documents from the book's companion Web page at http://www.microsoft.com/mspress/companion/9780735623989:

  1. The full version of Chapter 1.

  2. The full version of Chapter 2.

  3. "Example Requirements," a complete set of all the examples in the book, plus the requirement templates for all the requirement patterns, to make it easy to copy and paste an individual template or example to use as a starting point when writing a requirement of your own. This document also includes a requirement pattern template, to use if you want to write your own patterns.

  4. A "Ready Reference" suitable for printing, containing a diagram of all the requirement patterns plus a list of all the requirement patterns and the "applicability" of each one (to make it easy to figure out which pattern to use when).

The first two are available both as Adobe PDF (Portable Document Format) documents and Microsoft XML Paper Specification (XPS) documents. The last two are available as Microsoft Word documents. To download these documents, you will need about 6 MB of disk space. For system requirements for viewing these files, see the companion Web page.

Acknowledgments

I greatly appreciate the diligent and generous contributions of a number of people, without whose assistance this book would have been much the poorer—or wouldn't even have been completed at all. First, special thanks to Trish Reader for encouragement all the way through, sound business analysis advice, and feedback on various drafts.

I am deeply indebted to all my reviewers, especially those who heroically read and commented cover to cover: to Roxanne Miller, for her deep understanding of what all business analysts will look for in this book, and for keeping me (relatively) honest on analysis techniques; and to Lydia Ash, for her expertise on testing but also countless invaluable suggestions on almost everything. I appreciate the feedback and suggestions of Robert Posener for scrutinizing the text with the all-seeing eye of the consummate project manager; Craig Malone on development methodologies (especially agile matters); Marc Munro for his database expertise on the information and data entity patterns; security guru Eric Fitzgerald on access control; and accessibility experts Annuska Perkins, Norm Hodne, Ramkumar Subramanian, and Laura Ruby. Finally, thanks to Shanno Sanders for perceptive insights on the overall direction of the book. Sometimes I have rashly persisted in disregarding their advice, for which I assume full responsibility—as I do for all errors that remain.

I am grateful to Karl Wiegers for contributing such a generous Foreword, and for the early encouragement that was the nudge I needed to write this book.

I'd like to thank everyone at Microsoft Press, especially acquisitions editor Ben Ryan for his faith in the concept, and editors Devon Musgrave and Maria Gargiulo for their never-failing patience, their good-natured reactions to even the quirkiest of my ideas, and their painstaking copy editing. Finally, this book could never have been written at all if not for the innumerable people who have contributed to my professional experience over the years. The most valuable have been those at the two extremes of the spectrum: the excellent, from whom I've learned so much about how to specify and develop good systems; and the inept, whose creativity in finding ways to do things wrong is an education in itself. Thanks to you all.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
3.22.216.254