Effective requirements development--an end-to-end process that works.
Easy-to-apply, start-to-finish methodology based on the Unified Process
How to build requirements that can easily be transformed into high-quality software
Practical solutions for requirements gathering, analysis, specification, and maintenance
This book presents a systematic, easy-to-apply methodology for creating effective requirements. The authors present practical solutions for the full requirements lifecycle: gathering, analysis, specification, verification, and maintenance. Working in the context of the Unified Process, they cover process flows, present detailed diagrams, and offer insights that draw on their extraordinary mission-critical project experience, which ranges from the floor of the New York Stock Exchange to the U.S. Air Force's most advanced Command and Control Systems.
The key characteristics of good software requirements
Understanding the requirements analysis process and artifacts
Building user requirements problem domains, actors, use cases, activity diagrams, and storyboarding
Building the requirements architecture entities and events, class diagrams, state transition diagrams, and sequence diagrams
Building the specifications software requirements, interface requirements, and verification
Using the requirements architecture you've built
Whether you're an analyst, architect, developer, tester, manager, or software customer, this book will help you define requirements that precisely reflect your needs—and can be transformed into working software faster and more cost-effectively than ever before.
Review By: Michael Ferguson 07/08/2010This book describes a methodology for developing software requirements based on the Unified Process. The approach is practical since it is based on significant experience by both authors. The book explains the software requirements process from beginning to end, giving advice on gathering, reviewing, verifying, and maintaining requirements, by description and then example.
The authors begin by discussing the reasons for wanting good requirements. They then tell the reader what makes good requirements and how to document them. The key is getting from the definition of good requirements to verifying that the requirements are built into software that meet the requirements.
The text provides description and example of using Use Cases and a variety of diagrams to analyze and develop the Use Cases into specific requirements for the software. Methods other than the one being proposed by the authors are also mentioned with some reasoning for their application, should the reader want to research this.
Once the requirements are defined and verified to describe what the user wants, the authors discuss the need to tie requirements to testing of the software. Documented requirements are desired for software maintenance projects as well as projects developing new software. The book gives some insight into developing requirements for maintenance projects. It also advises on reverse engineering requirements (that is, deriving requirements from existing systems).
The appendixes make up almost one-third of the book and provide a complete example of applying the process described in the first two-thirds to software development for a change management system. These appendixes include diagrams and suggested document templates.
I found this book easy to read. The authors wrote in a conversational style and presented the material in a logical fashion. The ample number of illustrations was very helpful in support of the text. This could likely make the book a valuable communication resource for an entire software development team, since fulfilling requirements should be a major goal of any project.
One thing that I greatly appreciated was reference to methods other than the one the authors were proposing and their reasoning for why they chose the method they proposed. This gave me something concrete to research and compare, which enhanced my learning.
The proposed methodology allows for flexibility in applying various methods. For example, the authors describe three methods for reducing ambiguity in requirements and a variety of methods for modeling the process at various stages, such as State Machines, Petri Nets, and Activity Diagrams.
The specific mention of how the requirements relate to testing is a critical piece of software development. Testing is more than executing test cases in compiled software. It also includes inspection of the artifacts that lead to development. The authors address this in their discussions of verifying the requirements and design.
If you are interested at all in developing software that meets your clients’ requirements, you should read this book and consider the process. This book could help your project team and users gather and use requirements to develop higher quality software. By following the examples given, it should be fairly easy for you to apply the methodology presented.