Table of Contents
| Foreword | |
| Preface to the Second Edition | |
| Preface to the First Edition | |
| Introduction | 1 |
| Ch. 1 | The Requirements Problem | 5 |
| Ch. 2 | Introduction to Requirements Management | 15 |
| Ch. 3 | Requirements and the Software Lifecycle | 23 |
| Ch. 4 | The Software Team | 33 |
| Team Skill 1 | Analyzing the Problem | 41 |
| Ch. 5 | The Five Steps in Problem Analysis | 43 |
| Ch. 6 | Business Modeling | 59 |
| Ch. 7 | Systems Engineering of Software-Intensive Systems | 67 |
| Team Skill 2 | Understanding User and Stakeholder Needs | 87 |
| Ch. 8 | The Challenge of Requirements Elicitation | 89 |
| Ch. 9 | The Features of a Product or System | 95 |
| Ch. 10 | Interviewing | 101 |
| Ch. 11 | Requirements Workshops | 109 |
| Ch. 12 | Brainstorming and Idea Reduction | 119 |
| Ch. 13 | Storyboarding | 133 |
| Team Skill 3 | Defining the System | 143 |
| Ch. 14 | A Use Case Primer | 147 |
| Ch. 15 | Organizing Requirements Information | 165 |
| Ch. 16 | The Vision Document | 173 |
| Ch. 17 | Product Management | 183 |
| Team Skill 4 | Managing Scope | 203 |
| Ch. 18 | Establishing Project Scope | 207 |
| Ch. 19 | Managing Your Customer | 223 |
| Team Skill 5 | Refining the System Definition | 229 |
| Ch. 20 | Software Requirements - A More Rigorous Look | 231 |
| Ch. 21 | Refining the Use Cases | 243 |
| Ch. 22 | Developing the Supplementary Specification | 257 |
| Ch. 23 | On Ambiguity and Specificity | 271 |
| Ch. 24 | Technical Methods for Specifying Requirements | 279 |
| Team Skill 6 | Building the Right System | 289 |
| Ch. 25 | From Use Cases to Implementation | 291 |
| Ch. 26 | From Use Cases to Test Cases | 305 |
| Ch. 27 | Tracing Requirements | 319 |
| Ch. 28 | Managing Change | 337 |
| Ch. 29 | Assessing Requirements Quality in Iterative Development | 355 |
| Getting Started | 375 |
| Ch. 30 | Agile Requirements Methods | 383 |
| Ch. 31 | Your Prescription for Requirements Management | 399 |
| App. A | HOLIS Artifacts | 407 |
| App. B | Vision Document Template | 437 |
| App. C | Use-Case Specification Template | 449 |
| App. D | Supplementary Specification Template | 453 |
| App. E | Requirements Management in the Rational Unified Process | 459 |
| App. F | Requirements Management in the SEI-CMM and with ISO 9000:2000 | 473 |
| Bibliography | 483 |
| Index | 487 |
Forewords & Introductions
Much has transpired since the first edition of this text was published in 1999. The "dot.com" bubble economy of the late '90s, driven in part by the Internet, software, and related technology, has burst, causing significant disruption, economic uncertainty, and chaos in the lives of many. And yet, perhaps order and sanity have been restored to a free market that appeared to have "lost its wits" for a time.
Throughout, however, innovation in software technology continues unabated and the industry as a whole is still growing rapidly. The global reach of the Internet continues to change our lives, driving new forms of communication as witnessed by themes as varied as new global electronic marketplaces facilitating the exchange of goods and services, to the new, after-school instant messaging chat-fests which seem to absorb our children's homework time and so much of that expensive Internet bandwidth we rolled out in the last decade.
We are connected to our business associates, friends, and family 7x24. Internet cafes in Darwin, Australia, Edinburgh, Scotland and Alaska-bound cruise ships are open 24 hours. We receive emails on our PDAs at the grocery store. We can't make breakfast, drive to work, ride an elevator, or enter an office building without interacting with software. Software has become the embodiment of much of the world's intellectual knowledge and the business of developing and deploying software has emerged as one of the world's most important industries.
Software development practices continue to march forward as well. The UML, adopted as late as 1997, is now the de-facto means to communicate architecture, patterns, and design mechanisms. The Rational Unified Processand similar processes based on the UML are being adopted by many in the industry as the standard way to approach the challenge of software development.
Our personal lives have changed also. After four years at Rational Software, I have moved on to helping a number of independent software companies achieve their goals. Some teams hope to change the world, some hope to have a significant impact on an individuals life's by improving healthcare, still others hope to improve their customer's manufacturing efficiencies, or help businesses grow by translating product data to a prospect's native language. However, these teams all have one thing in common: they are challenged by the complexity and difficulty of defining software solutions in a way that can be understood—by themselves, by their customers, by their marketing teams, by their internal development and testing teams—indeed, by all those that must understand the proposed solution at the right level of detail so that the proper results can be achieved. Fail to do that and they fail to achieve their mission. Because of the importance of their mission on their personal lives as well as those whose products they are intended to help, failure is not an option.
So, while much has changed in the software industry in just a few short years, some things, including the challenge of Managing Software Requirements, remain largely the same and so our work continues in this, the second edition.
About the Second Edition
The motivation for the content changes in the second edition is based on different, yet convergent factors.
The first is based on the success of the book in the marketplace, which has generated many positive comments and much encouragement, as well as constructive criticisms. While comments range widely, a few consistent themes emerged.
The More Use Cases Theme. The first edition, A Unified Approach, reconciled and combined two major viewpoints on requirements techniques. The first, perhaps a more traditional approach, described the way in which requirements specifications are created and detailed to prescribe system behavior using declarative techniques (the system shall....). The second, the use case approach, described the way in which use cases could be used to define the majority of the functional behavior of the system. We combined these techniques in the first edition in order to create a common, and hopefully more holistic, approach. Based on feedback, we did achieve some success. However, one criticism of the work is that, while we recommended and described the use case method, we did not go far enough in helping the reader develop or apply this technique. Moreover, in presenting both techniques, we confused some readers who wanted to better understand which technique to apply, and when.
The "it's a big book with many techniques-can't you be more prescriptive" Theme. The first work was intended to be a comprehensive work, a one-stop shopping reference for any technique one might need to define requirements for a system of any type. We hope this provided value to our readers because we truly believe that there is no "one size fits all" solution to each specific software engineering challenge. And yet, the reviewer's theme remains: Does it have to be this hard? Can't you be more prescriptive?
A second set of factors driving this same theme is based on my own experiences in using the book as I work with companies to help them achieve their software development objectives. Some have software applications that require multiple techniques; some can make time for a fairly rigorous introduction to a full requirements management discipline. However, others need to document a specific set of requirements for a specific software application and they need to do so immediately. Starting tomorrow. There is no time or interest in a debate as to which technique might be more effective, or as to the nuances of anything. "Just give me one technique, make it simple, and get me started right now," they say.
Fortunately, these two factors are mostly convergent and the answer to both is fairly clear. For most teams, in most circumstances, a combination of 1) a well-considered Vision document, 2) an identification and elaboration of the key use cases to be implemented, and 3) a supplementary spec for specifying nonfunctional requirements is adequate and appropriate for managing software requirements. In addition, if this is the chosen method, the elaborated use cases can directly become the foundation for system testing.
To this end, this Second Edition of Managing Software Requirements has new content, a new theme, and a new subtitle: A Use Case Approach. In this edition, the use case technique is the cornerstone technique and a more prescriptive approach has been chosen and represented. For example, Chapter 14, A Use Case Primer, has been added to provide a more fundamental basis for understanding and applying use cases. It should serve as a tutorial adequate for an otherwise uninitiated individual to be able to learn and begin to apply the technique. The example and case study have also been updated to reflect a more use-case-centered approach. In addition, a new chapter, Chapter 26: From Use Case to Test Case has been added. This chapter illustrates how the use cases can directly drive a comprehensive test strategy as well as serve as direct input to the test cases themselves.
In addition, we've made one substantial enhancement motivated solely by our own purposes. Chapter 17, The Product Champion, has been renamed to become Product Management and enhanced with new material designed to help teams understand how to turn a software application into what we call the whole product solution. Since getting the requirements "right" cannot by itself insure commercial success, this chapter provides insight and guidelines for those activities, such as pricing and licensing, positioning and messaging, and other commercial factors that transform a working software application into a software product people want to buy.
Since modern software development processes are becoming more iterative, we decided to re-purpose the first edition's chapter on Quality so that this edition's chapter would be more in line with modern processes. It turned out that the new chapter may now be found as Chapter 29 and speaks directly to a much-improved fit between iterative techniques for gathering and improving requirements and the possibility of iterative quality improvements.
Finally, we also took the opportunity to address a new undercurrent in the industry, a movement on the part of many to what are perceived as lighter, less formal methods or more agile methods. In the extreme, extreme programming, or XP, as espoused by Beck and others, could be interpreted to eliminate process entirely. Perhaps more correctly, it incorporates certain keystone processes, such as direct customer requirements input, directly into programming practices, but it's also fair to note that the concepts of "software process" and the "M" word (methodology) are studiously avoided. Perhaps less extreme and considered by some to be more practical, the introduction of agile methods, as espoused by Cockburn and others, have also taken root in some circles. Though controversial in some circles, these lighter approaches should not be ignored and we've addressed these in the requirements context in another new chapter, Chapter 30, Agile Requirements Methods.
Of course, no book can be all things to all people and in order to make this edition as readable as possible, we eliminated a number of topics and chapters from the prior version, and shortened others.
In so doing, we sincerely hope that you will find this text more approachable, easier to use and apply, and that it will better help you and your teams to Manage Your Software Requirements.
—Dean Leffingwell