Book Review: Software Engineering: A Practitioner's Approach, Fourth Edition by Roger S. Pressman

Reviewed by Marshall Potter, Office of the Director, Defense Research and Engineering

This book, which is now in its fourth edition, is one of the classic texts on Software Engineering. It is designed for both the novice and experienced software engineer, and all readers will find an abundant amount of material from which they can learn. In this book, you will find not only cogent discussions on the key components of Software Engineering, but links and references for further study. One of its new innovative features is the integration of the World Wide Web addresses into the text. This makes the text a virtual encyclopedia. The fourth edition is considerably more than a simple update and provides a significant improvement by providing extensive coverage of both new and evolving strategies and technologies that are core to effective system developments.

The book is divided into 30 chapters that are organized into five parts. The first part covers both the software product and its process. Pressman carefully explains what software is and why we continue to struggle to build high quality systems. He goes into some detail on what myths continue to exist and categorizes them from three perspectives: management, customer and practitioner. This division is vitally important, as one can't develop high quality software without addressing all three perspectives. In chapter 2, he introduces both the SEI Software Process Model and the various process or life cycle models that have been used over the past three decades. These include a gamut of models including the linear sequential model (waterfall), the prototyping model, the Rapid Application Development (RAD) model, and several evolutionary process models including the incremental, spiral, component assembly, and concurrent development. He closes this section with an introduction on the formal methods model, fourth generation techniques and process technology. As can be seen, he covers not only what has been used, but also new and emerging techniques.

Part two of the text is devoted to Managing Software Projects. I especially welcome this introduction to management in the early part of the text. I believe that management and management science, from both the engineer's and computer scientist's perspectives, is often ignored or is added as an afterthought. Pressman by locating this important material up front, signals the importance he gives to the topic. The author addresses management from the perspective of the three P's; people, problem and process. In chapter 3, he exhibits how new efforts such as the SEI's People Management - Capability Maturity Model (PM-CMM), tools and techniques for addressing the problems and their risks and frameworks for process definition and execution are becoming common concepts in the most successful software development organizations. He addresses software management as the "umbrella activity" that begins before any technical activity is initiated and continues throughout the definition, development and maintenance of computer software. As the author truly knows, management is fundamental for success, and I would therefore have liked to have seen more emphasis and references on traditional management science. Other authors, such as Thayer and Reifer, have shown how the classical management model of planning, organizing, staffing, directing and controlling directly relate to successful software/systems engineering programs. I would have liked to have seen this framework used in this section as it would have provided a unifying architecture for the material that Pressman discusses in the following chapters.

In chapter 4 of the text, we find a good introduction to the software process and project metrics. It is gratifying to see his early introduction to Humphrey's Personal Software Process (PSP) prior to addressing the project oriented metrics of size and quality. Pressman provides more emphasis on function-oriented size metrics than on the traditional line-of-code models, but provides ample links to these at the end of the chapter. Additional material on the more technical/product oriented metrics is found later in the text.

In chapter 5, the author covers software project planning. This shows the intimate relationship between the material introduced in chapter 4 on metrics and measurement to the planning process. Pressman's primary emphasis is on estimating, and he covers both line of code and function point based models. He emphasizes five questions that need to be answered:

  1. How long will it take?

  2. How much effort is required?

  3. How many people will be involved?

  4. How many resources (Hardware/Software) will be required?

  5. What are the risks and how do we manage the known risks?

Moving on from planning and estimating, Pressman provides good coverage of the current thinking on Risk Management in chapter 6. In this chapter you are introduced to Risk Management concepts used by Pressman, Charette, Boehm, the SEI, the Air Force and others. Unlike previous texts, there is considerable attention given to this important topic and this adds much to the value of the book. Chapter 7 is devoted to Project Scheduling and Tracking which obviously draws much upon the material covered in the previous chapters. Chapter 8 on Software Quality Assurance addresses SQA from the viewpoint that quality assurance encompasses (1) a quality management approach, (2) effective software engineering technology, (3) formal reviews that are applied throughout the process (4) a multitiered testing strategy, (5) control of software documentation and the changes made to it, (6) a procedure to assure standards compliance and (7) measurement and reporting mechanisms. As can be seen from this list, Pressman continues to build upon what he has introduced before. By doing this, Pressman provides the reader with a cohesive and structured viewpoint of software engineering based upon a core set of principles that are elaborated upon as you traverse the text. However, there is an unfortunate omission in this section with the absence of a mention of Michael Fagan and the Fagan Inspection Process. I feel that a student using this text without a teacher, would never come upon the name of this important figure or the inspection process which is often named after him. Many of the references in the back of this chapter refer to Fagan's work, yet not one reference is directed to Fagan's original papers. Chapter 9 concludes this section by providing a well structured overview of configuration management.

Part Three of the text is devoted to Conventional Methods for Software Engineering concentrating on Systems Engineering, Analysis, Design, Testing and Metrics. As can be expected, this large area demands the most coverage and over 300 of the book's 800+ pages is devoted to this core area. When you consider that Part Four is devoted to Object Oriented Techniques and takes an additional 120+ pages, over half of the text is devoted to the core concepts of analysis, design and testing. This is very appropriate and provides good coverage to current methodologies that the software engineering practitioner needs to know. Relatively new techniques in Quality Function Deployment (QFD), modeling and prototyping are well covered in chapter 11. Chapter 12 introduces various methodologies and their notations so that the reader is introduced to a variety of analysis modeling techniques. Chapter 13 introduces the design concepts of abstraction, refinement, modularity, architecture, hierarchy, structural partitioning, data structure, software procedures and information hiding. From there, effective modular design based on functional independence measured by cohesion and coupling concepts is well covered. Chapter 14 provides an extensive coverage of various design methods and chapter 15 extends these for real-time systems. Chapters 16 and 17 are devoted to testing techniques. Chapter 18 expands on the material in Part Two that was devoted to measurement and metrics and focuses on technical metrics in contrast to management metrics.

Part Four of the text, as noted above, proceeds from Part Three and tackles the important area of Object-Oriented Software Engineering. Pressman covers analysis, design and testing of object-oriented software, but does not discuss object-oriented programming. As this subject will be covered in most Computer Science curriculums in the programming courses, this seems to be a prudent choice and helps keep the size of the text down. Coverage of a variety of methods including Booch, Coad and Yourdon, Jacobson, Rumbaugh and Wirfs-Brock methods are outlined in chapter 20. The important area of object-oriented testing is covered in chapter 22.

Part Five of the text discusses several advanced topics with separate chapters devoted to formal methods, cleanroom, software reuse, reengineering, client-server software engineering and Computer Aided Software Engineering or CASE. The book concludes with an exploration of the scope of change in the field and how this change itself will affect the software process in the future.

This impressive work provides an virtual encyclopedia of the present state of software engineering with several unique innovations. First is the use of the World Wide Web for references. Second is the fact that Pressman keeps these references up-to-date on his own web site at http://www.rspa.com. And finally, this text attempts to look at Software Engineering from a holistic and structured perspective, providing a travel guide or road map that takes you from one place and builds upon the concepts developed as you move from chapter to chapter. Because of this, I believe that the book is best read, at least the first time, cover to cover. There are however some minor problems and obstacles that should have been found in the initial proof reading. Several of the URLs noted in the back of each chapter and on his web site are incorrect. As an example, in chapter 2, the URL for the Software Productivity Consortium is shown to be http://software.software.org/vcoe/home.html and it should be http://www.software.org/vcoe/home.html. Several other typos were found.

On p.585 James Rumbaugh is spelled Rambaugh and the negative impact of this typo is compounded by the fact that the reference on p. 611 is also for Rambaugh. Mistakes like these make it very difficult for the student to use the references. I need to note, that I was using the first print for my review. These mistakes are being corrected in a soon to be issued third printing and errata sheets for the first two additions are available at Pressman's Web site, http://www.rspa.com. I strongly recommend that you get the latest printing. Even considering these errors, the text takes a giant step forward and provides the model for all future software engineering texts. It is a virtual encyclopedia that can be used to teach both up-coming and experienced software engineers. I have used Pressman's previous editions in my classes on software engineering. I find this edition to be a major improvement. With the errors being corrected, this book will become an instant classic. This is a truly exceptional reference work that deserves to be on every software engineer's shelf and used regularly. It should be noted that a complete video curriculum is available to be used with the text. These videos would be helpful if you are planning to cover this material for large organizations.

About the Reviewer

Marshall Potter is an Adjunct Associate Professor at the University of Maryland and the Special Assistant for Computing and Software Technologies Office of the Director, Defense Research and Engineering.

Marshall Potter
Special Assistant for Computing and Software Technologies
Office of the Director,
Defense Research and Engineering,
Information Technologies Directorate
[email protected]

McGraw-Hill ISBN 0-07-052182-4


Previous Table of Contents Next