REVIEW: "Software Engineering", Ian Sommerville
- BKSFTENG.RVW 20020916
"Software Engineering", Ian Sommerville, 2001, 0-201-39815-X, C$104.95
%A Ian Sommerville ian@...
%C P.O. Box 520, 26 Prince Andrew Place, Don Mills, Ontario M3C 2T8
%I Addison-Wesley Publishing Co.
%O C$104.95 416-447-5101 fax: 416-443-0948
%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
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
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
rslade@... rslade@... slade@... p1@...
Find book info victoria.tc.ca/techrev/ or sun.soci.niu.edu/~rslade/
Upcoming (ISC)^2 CISSP CBK review seminars (+1-888-333-4458):
February 10, 2003 February 14, 2003 St. Louis, MO
March 31, 2003 April 4, 2003 Indianapolis, IN