The new edition of this book provides a comprehensive discussion of software engineering techniques and shows how they can be applied in practical software projects. This book features new coverage of the software process and software process technology, system integration, requirements management, and risk analysis, as well as new chapters on pattern-based reuse, distributed system engineering, and legacy systems. Sommerville has incorporated a more object-oriented approach in this edition, using UML and Java.
Review By: Jon Duncan Hagar 03/12/2010This is a general-education book covering software engineering. The book addresses the major aspects of software engineering including requirements, design, verification and validation, management, and support function such as configuration management, quality assurance, and metrics. In addition to the standard software sections, the book addresses special topics such as critical systems, system evolution, architecture, user interface, and maintenance. The book has seven major topic areas and twenty-nine chapters. The sixth edition has updated topic areas in subjects like CORBA and OO, as well as very recent concepts such as Extreme Programming, which makes the book of current interest to readers. Each section addresses the important topic and subtopics. Extensive tables and graphics provide summary and quick-reference information throughout the book. Examples are provided in UML, JAVA, and graphical modeling systems that aid understanding both the topic and details of the subtopics. An extensive reference list and index is provided.
The book is written in textbook format, including sections with questions and an available Web-based set of course materials. The level of material is aimed at senior college level. Each section is introduced with what is to be learned and ends with summarizing key points.
The book is a well-rounded and comprehensive overview of software engineering. It would be a good basic reference to put on your shelf, if you did not have another similar top-level text. The book has good organization and information flow that make it easy to read. Subjects in the book are locatable by both the index and table of contents. There are exercises to practice what you learn. The information is presented logically with good examples to aid the explanations.
There are several very good sections on critical and real-time systems that would be of benefit to practitioners in this area. The author also provides some insight and consideration into the future direction of software engineering. While it might have been nice to have key points highlighted with margin notes or other pointers in line with the text instead of at the end, these are just style preferences.
The book presents the major areas of software engineering without getting too bogged down by special topics that other college textbooks attempt to present. For example, some college professors push concepts like formal methods or software reliability theory. And while these topics are important and covered by the book, they are presented at an appropriate level of detail with sufficient reference for readers to find the added information elsewhere. While some might desire more definitions, these issues are due in part to the book’s size limitation, and the fact that the book must be a general discussion of the topic areas. Since the book is a general reference, practitioners in all areas of software can benefit from this text. The fact that the book has been updated over six editions since 1982 until 2001 means the book is well tried and up to date.