Software quality engineering: a total technical and management approach | Guide books

Reviewer: Stanley G. Siegel

Deutsch and Willis have written a how-to text on the engineering of quality software. They define quality in engineering terms, show how to incorporate quality into each stage of the software life cycle, and offer guidance on trading off effort and time against a level of desired quality. Their 16-chapter presentation is divided into four parts. Part 1, “Quality Concepts,” contains two chapters. Chapter 1 indoctrinates the reader into the authors viewpoint about quality engineering, the essence of which is proclaimed in big letters on page 8 as “YOU CANT ACHIEVE QUALITY . . . UNLESS YOU SPECIFY IT]”. Chapter 2 is an overview of the remainder of the book. Part 2, “Engineering in Quality,” consists of three chapters that get into the nitty-gritty of building quality into software. Chapter 3 sets forth two sets of entities—15 quality factors and 27 software quality criteria—that define software quality engineering in how-to terms. The quality factors (e.g., reliability, safety, and reusability) are based on what a user needs from software. The quality criteria (e.g., accuracy, completeness, modularity, and traceability) are attributes of quality that software engineers can deal with and implement during the software development process. Chapter 3 concludes with a mapping that relates the quality factors to the quality criteria. This mapping is the heart of the authors approach because it establishes the bridge between user quality expectations and engineerable quality attributes. Chapter 4 shows how to tailor software quality requirements to project-specific constraints. Chapter 5 describes techniques for achieving software quality during design; these include standards, design iteration, and automated tools. Part 3, “Using Verification and Validation to Review Out Defects and Test Out Errors,” spans chapters 6 through 13. The focus shifts from how to engineer in quality to how to check that quality has been engineered in. These chapters describe the mechanics of verification and validation (V&V) and testing. The specific topics addressed include design reviews, walkthroughs, independent V&V, and independent testing. The three chapters of Part 4, “Management Aspects of Software Quality,” deal with the economics of software quality and explain how to organize an effort to achieve it. Chapter 15 describes an organizational entity called “Software Technical Assurance,” which helps the engineering organization achieve quality by doing the following: :9BDefining quality in such a way that it is achievable (using the ideas set forth in chapter 3); Selecting standards, procedures, and tools for achieving quality; Preparing the project staff to achieve quality (e.g., through a quality training plan); and Helping the project staff achieve quality in their work (e.g., through V&V against quality requirements). The authors state that their intended audience is software engineers, software managers, systems engineers, and procuring agencies. All should benefit from the book, but not all sections will appeal to every element of this diverse audience. Parts 2 and 3 will probably attract software and systems engineers, while software managers and procuring agents will probably be most interested in part 4. Engineers will undoubtedly like the methodical, turn-the-crank descriptions of how to engineer quality into software in chapters 3, 4, and 5. Section 3.3, “Engineerable Quality Attributes,” is noteworthy in this regard: it defines, discusses, and exemplifies each of the 27 quality attributes that the authors assert “software engineers can deal with and implement during the design and development process.” The discussion of these attributes is a convincing argument for this assertion. On the other hand, the books claim to bring “together in one place all of the recent advances in the state of the art of software quality engineering” (p. 4) is somewhat presumptuous. The book contains no bibliography or reference section that would permit readers to peruse alternative ideas on this subject or pursue some topics in greater depth. Still in its relative infancy, software quality engineering even lacks standard terminology (e.g., what some in the software industry refer to as “quality assurance” others refer to as “testing”). To its detriment, the book gives few citations of other works in the field, such as Beizer [1], Dunn [2], Evans and Marciniak [3], Shooman [4], and Schulmeyer and McManus [5]. These works are representative of the rapidly expanding literature on software quality engineering. They offer views that complement and in some instances contrast with many of the ideas found in the book under review. This book is a useful contribution to the software engineering literature. Engineers will find practical ideas and procedures for building quality into software; managers will find specific ideas that will permit them to make intelligent cost-versus-quality trade-offs; and employees of procuring agencies will gain insight into how to make reasonable quality demands on software engineers.