Requirements Engineering
Requirements engineering is the process of eliciting individual stakeholder requirements and needs and developing them into detailed, agreed requirements documented and specified in such a way that they can serve as the basis for all other system development activities. In this textbook, Klaus Pohl provides a comprehensive and well-structured introduction to the fundamentals, principles, and techniques of requirements engineering. He presents approved techniques for eliciting, negotiating and documenting as well as validating, and managing requirements for software-intensive systems. The various aspects of the process and the techniques are illustrated using numerous examples based on his extensive teaching experience and his work in industrial collaborations. His presentation aims at professionals, students, and lecturers in systems and software engineering or business applications development. Professionals such as project managers, software architects, systems analysts, and software engineers will benefit in their daily work from the didactically well-presented combination of validated procedures and industrial experience. Students and lecturers will appreciate the comprehensive description of sound fundamentals, principles, and techniques, which is completed by a huge commented list of references for further reading. Lecturers will find additional teaching material on the book’s Web site, www.requirements-book.com.
Review By: Noel LeJeune
04/25/2011The value that author Klaus Pohl brings to the requirements engineering discipline in this book is scope. While the author claims a target audience of nearly everyone, it is primarily a comprehensive textbook for graduate studies in requirements engineering. However, it is also a reference book for practitioners with many useful techniques for requirements engineering in any software development effort. The book makes a fairly reasonable and successful attempt to synthesize the entire body of knowledge related to requirements engineering.
Reasons you might not add this book to your library include: You do not need a reference that covers most aspects of requirements engineering. You are unwilling to read a detailed, thorough textbook with explicit definitions and descriptions of principles, techniques, and practices of requirements engineering. You have previously read and synthesized into a fairly comprehensive body of knowledge nearly every topic and technique of requirements engineering.
The book’s thirty-eight chapters (over 800 pages) are organized into eight major sections. The first four chapters provide the fundamentals and framework. The remaining thirty-four chapters discuss core activities such as the many elicitation techniques, documentation, and negotiation, as well as three chapters on validation and four chapters on requirements management. The breadth of coverage includes topics ranging from a discussion of the many requirements elicitation techniques to the details of using finite automata (deterministic and non-deterministic) and state machines.
The writing style and organization make the book easily readable despite its origins in an earlier, less-thorough German version. At times the author follows the overly verbose model of “tell them what you are going to tell them, tell them, and then tell them what you told them.” For example, the discussion of key disadvantages of using natural language for requirements (Chapter 17: Natural Language Documentation) includes several pages describing four kinds of ambiguity (lexical, syntactic, semantic, and referential). As you would expect from a good textbook, each chapter is well organized with many logical subheadings, examples to illustrate the material, and literature recommendations for additional reading.
The shortcomings are few but significant. The entire context of the book seems to presume a very heavyweight software development process. Only a three-page discussion of continuous requirements engineering acknowledges different software development models. The book makes no attempt to situate the requirements engineering activities in the context of any particular development model–least of all within the context of agile software development. The reader is left with the problem of determining how to practice good requirements engineering in any specific software development process, which could be a challenge for agile development projects.