Software Requirements: Encapsulation, Quality, And Reuse
This book describes how to make requirements easy to change by using encapsulation. It introduces the Freedom methodology that shows how to encapsulate requirements thereby promoting reuse and quality. Encapsulating requirements reduces software lifecycle costs by making requirements and code that implements them into more adaptable to changing technology and business needs.
Review By: Harry Acosta
02/24/2007This book is written in an easy-to-understand language that the reader, whether new to software systems development or a seasoned veteran used to the more commonly known techniques, can find a section or two that can be applied to his area of work. I especially liked the easy-to-understand explanation of black, white, and gray box testing strategies, as well as the definitions found in the glossary. Overall, I liked the way that the author explained all the details surrounding the requirements gathering and management process used for the Freedom project at NASA.
Chapters one through three outline the basics needed to understand following chapters. From a brief overview of the Freedom methodology, to information hiding techniques that introduce the concept of encapsulation, to a full chapter on requirements, design and implementation considerations, and constraints, most novices will find these three chapters helpful background material.
Chapter four introduces the Freedom requirements process and talks about enterprise process models as well as context diagrams, which are the key to understanding not only the flow of information but also the constraints to which that information is bound.
Being a quality professional for many years now, it is good to see chapter five completely dedicated to building quality requirements. The seven quality requirements listed, if thoroughly followed before starting software design, would prevent many things from going wrong after design is prototyped or even implemented.
Chapters six and seven are kind of refreshing. Chapter six explains integration between requirements and functionality, using the Harlan-Mills stimulus/response behavioral paradigm to model human machine interfaces. Chapter seven considers the organization and architecture of stimuli and responses based on functional, physical, and temporal cohesion, which then is rearranged for the functionality tree.
Once the functionality trees are defined, the next natural topic is to discuss reuse for those sets of stimuli/response that are repetitive in nature. This is briefly explained in chapter eight, followed by a brief outline in chapter nine of how this approach fits within an evolutionary (i.e., incremental) development strategy.
Finally, chapters ten through fourteen go into some detail on how to apply these concepts into a software development project and give many examples of human interface prototyping. Readers involved in the programming aspect of software development will find these examples useful.
Being a professional whose expertise is mostly specific to systems implementation at the user level rather than system development at the programming level, I can apply chapters four through nine in my area of responsibility. Reading these chapters, I remembered past projects--some that could’ve had better outcomes by applying these principles and others that brought to mind thoughts of “been there, done that.” From chapter ten forward, it delves into an area which, though I am familiar with programming, goes beyond my current job scope and expertise.
Appendix A (“Software Requirements Specification”) provides a valuable template reference for a quality project deliverable. Appendix B (“Cost Savings Estimate Details”) could prove very useful for project managers as it has some key formulas used to estimate level of effort for software development projects. I also liked that the formulas provided in appendix B easily can be adapted to apply to other project types.
I recommend this book to those readers in need of guidance on how to gather, manage, and integrate quality requirements into software development projects whose success depends on thoroughness of the human interface and compliance to user requirements. Project managers could also benefit from involving the end users into project planning and strategy.
I recommend this book to those readers in need of guidance on how to gather, manage and integrate quality requirements into software development projects whose success depend on thoroughness of the human interface and compliance to user requirements. Project managers could also benefit from involving the end users into project planning and strategy.