BKSFTENG.RVW 20020916 "Software Engineering", Ian Sommerville, 2001, 0-201-39815-X, C$104.95 %A Ian Sommerville ian@software-engin.com %C P.O. Box 520, 26 Prince Andrew Place, Don Mills, Ontario M3C 2T8 %D 2001 %G 0-201-39815-X %I Addison-Wesley Publishing Co. %O C$104.95 416-447-5101 fax: 416-443-0948 %O http://www.amazon.com/exec/obidos/ASIN/020139815X/robsladesinterne %P 693 p. %T "Software Engineering, Sixth Edition" Part one is an overview. Chapter one is an introduction, a FAQ (Frequently Asked Questions list), definitions, and, interestingly, a section on ethics. A broad review of system development concepts (such as emergent properties) is presented as computer based software engineering, in chapter two. Stages in the software development process, none detailed, are listed in chapter three. Project management is discussed in chapter four. Part two looks at software requirements. Chapter five examines different types of requirements. Requirements engineering is software engineering in miniature, as chapter six points out. There is a heavy emphasis on the Universal Modeling Language (UML) in chapter seven's explanation of system models. The benefits and dangers of software prototyping are examined in chapter eight. Chapter nine points out that formal specification does require special training on the part of users, but can identify problems in requirements specifications. (More extensive examples would be helpful in making this point more convincing.) Part three reviews design, and the chapters are mostly divided by system type. Chapter ten explains architectural design, and reviews tools and models. (Security, and other concerns, are addressed throughout the book: an example in this chapter points out that interrupt driven architectures are complex and difficult to validate.) Distributed systems architecture itself gets oddly short shrift in chapter eleven, which concentrates on client/server and CORBA (Common Object Request Broker Architecture). Object-oriented design is shown to be very much like modular design in chapter twelve. (The stated objective of the text is to introduce UML, but the explanations are not very clear.) Chapter thirteen looks at real-time software design but does not seem to be as complete as other topics. Design with code reuse is a good overview, but chapter fourteen starts out with the statement that electrical and mechanical engineers rely on component reuse, ignoring the lack of a broad range of standard components in the software environment. There are good, basic suggestions for user interface design, in chapter fifteen, although the discussion is limited. For example, the recommended principles suggest confirmation of destructive actions, but don't note the fact that even such confirmations become automatic over time, and therefore are not particularly useful. Part four deals with critical systems. Chapter sixteen looks at dependability in terms of availability, reliability, safety, and security. Critical systems specification, in chapter seventeen, examines dependability (and failure) metrics. Risk analysis is discussed, but not in the usual combination of probability and severity. Critical systems development is examined both in terms of fault avoidance and fault tolerance in chapter eighteen. Part five covers verification and validation. Chapter nineteen concentrates on code inspection and the Cleanroom process. Software testing, in chapter twenty, looks at types, cases, and procedures. Critical systems validation, in chapter twenty one, is basically the same process as the previous chapter, but more important. Part six, on management, is mostly a precis or list of principles from other sections. Chapter twenty two deals with managing people, looking at limits, motivation, group dynamics, recruiting, and keeping, as well as a quick overview of the People Capability Maturity Model (P-CMM). It's not a large section, but it is nice to see the importance of personnel recognized in this way. Software cost estimating, in chapter twenty three, is interesting, but possibly not terribly useful. Quality management is dealt with in chapter twenty four. Chapter twenty five reviews process improvement and the Capability Maturity Model (CMM), mentioning the work of Walter Deming but not, intriguingly, dealing with the fact that Deming's later work suggested that business had gone overboard in the pursuit of quality. Part seven deals with evolution and change. Chapter twenty six discusses legacy systems with a description of mainframe program structures and guidelines for the assessment of the possibilities for updating the system. Software change is reviewed in chapter twenty seven, with maintenance and re-architecting leading to a description of re-engineering in chapter twenty eight. Chapter twenty nine finishes off with configuration management, emphasizing version documentation more than change control. The book is written as a textbook, with a summary of key points and a very decent set of exercises at the end of every chapter. It certainly stands above the other systems development texts that I have experienced. However, this work also has value beyond the classroom. A great many professionals, such as information security officers, need to know the operations, procedures and concepts of software engineering without necessarily being programmers themselves. For these people, this volume makes a clear and excellent reference. copyright Robert M. Slade, 2002 BKSFTENG.RVW 20020916