Ian Sommerville
Addison-Wesley
8th Edition, 2006
First edition published 1982
ISBN 0321313798
864 pages
Buy it from Amazon.com
Buy it from Amazon.co.uk
This is the standard student textbook of software engineering.
It is always a pleasure to come across clear, direct, and practical engineering writing. This book is all that, and humane too, with simple coverage of professional ethics, and exercise questions on the value of human life in safety-critical systems. Sommerville is already justifiably well-known for the earlier editions of this book, and he has excelled himself in this new edition. He has attempted the near-impossible: actually to shorten the book. This effort has been successful not just in reducing the page count but crucially in strengthening the thread of argument, making an already good text even stronger. This has been achieved in the face of tremendous growth in software engineering as a profession, and a burgeoning of knowledge - for instance in distributed systems. It is hard now to recall that just five years ago most businesses used the Internet only for email - or not at all.
The book has been restructured in line with its new balance of topics. Part 1 looks at the whole process in four rewritten chapters. These include a genuine FAQ responding to the barrage of email the author received, but not (as he says) the pleas of students for help with their homework. Students do get, however, an admirably broad discussion of the problems that software engineering faces at each stage: for example, workers may resist implementation of systems that reduce their responsibilities or threaten to reduce the number of jobs. Old-time computer science textbooks never mentioned anything as messy as that.
Part 2, called simply Requirements, shows the student how to put together conventional user and system requirements documents, and how to make good use of models, prototypes, and if need be formal specifications.
Part 3, the core of the book, looks at Design in six chapters. The focus on distributed, object-oriented, and real-time is justified: many systems are all three, and most systems of any size are at least one of these. The emphasis on reuse is also welcome. The remaining parts, each of about three or four chapters, show the considerable shift in emphasis from the previous edition: Critical Systems, V&V (now merged), Management, and Evolution. It is striking how much of this is about processes and how little about the details of specific practices. As Sommerville states in the Preface, "I assume that readers have a basic familiarity with programming and modern computer systems and knowledge of basic data structures such as stacks, lists and queues".
Requirements engineers will find improved coverage of important areas. Sommerville gives a straightforward account of functional and non-functional requirements, system and software requirements documents, and in a separate chapter of the processes of RE. In addition, in the later chapters, Sommerville covers behavioural modelling, prototyping, formal specification (in less detail, now down to one chapter), major constraints including safety, dependability, and availability, and change management. In short, the book covers both RE and Systems Engineering to a reasonable level, as well as introducing the basic concepts of software design and testing, project organisation and project management.
Software Engineering thus has a wider scope, and is less concerned with computer science, notations, or algorithms than earlier accounts of software engineering such as, say, Sue Conger's admirable and practical textbook, or indeed earlier editions of Sommerville (dating back to 1982 -- much has changed since then). Sommerville has moved towards a systems engineering view, and this is explicitly covered both in a terse 20-page introductory chapter on 'Computer-based system engineering' and in clearly argued sections on issues as diverse as modelling, architectures, critical systems, and process improvement.
The 8th edition
Teachers should be pleased to discover that the website at http://www.software-engin.com provides an instructor's guide, slides for each chapter, Java source for the examples, as well as examples from previous editions on formal specification and programming in Ada and C++, these topics having been greatly reduced in successive editions. The 8th edition brings increased coverage of UML and RUP as software engineering becomes more of a standardised engineering practice, less of a black art. Software management coverage has also grown: Sommerville now covers COCOMO cost estimation. Software design is now tightly focused on process, using UML. Software reuse similarly concentrates on component-based development and software patterns. All of these changes make the book more useful to software engineers, with less material that would now be seen as "pure" computer science.
Students of software engineering and computer science will want their own copy of this major and much enhanced textbook. Teachers will find it an invaluable resource. Researchers and practitioners in systems and software engineering will find it a useful aide-memoire. It is running at around #2 in the software engineering book league.