The author declares in the Preface that “This book is intended as a text in software engineering courses and as a day-to-day working reference for practicing software engineers.” It has value for both audiences, particularly in its discussion of precoding software development activities. In relation to established texts on software engineering, it is similar to Sommerville [1], although it is less comprehensive and more formal.
The organization of the book is based on the concepts of system requirements, specification, and design. The strength of the book is that these concepts are clearly and consistently distinguished.
An attempt is made to integrate the discussion of validation and testing throughout the book. This is a good idea, but the result is that there is no unified, coherent presentation of “quality assurance” topics.
The discussion of a “World Model” and a “User Conceptual Model” as themes for system requirements and specification are followed by an object-oriented approach to design. A consistent distinction is made between levels of abstraction, particularly with regard to system behavior, as opposed to the detailed design of modules. An appendix presents a formal language for software module specification, together with an extended example.
The discussion of implementation centers on system and module design. This comes across as a helpful level of abstraction, since the book emphasizes “an integrated approach” rather than attempting to be “a comprehensive handbook.” For example, a moderate amount of attention is focused on data-oriented design issues, and prototyping is not mentioned at all. Project management issues are also omitted for the sake of maintaining the point of view of a “software development technician.”
This book contains a moderate number of exercises, mostly of the tersely stated, open-ended variety. As a textbook, it seems best suited for a graduate course in software architecture, or possibly in software system design. As a reference for a professional, it could provide helpful ideas and guidelines for in-process documentation during system development.