|
Software engineering has come a long way since 1У6Х. when the term was first used at a
NATO conference. And software itself has entered our lives in ways that few had anti
cipated, even a decade ago. So a firm grounding in software engineering theory and
practice is essential for understanding how to build good software and for evaluating
the risks and opportunities that software presents in our everyday lives. This text repre
sents the blending of the two current software engineering worlds: that of the practi
tioner, whose main focus is to build high-quality products that perform useful
functions, and that of the researcher, who strives to find ways to improve the quality of
products and the productivity of those who build them. Edsgar Dykstra continually
reminded us that rigor in research and practice tests our understanding of software
engineering and helps us to improve our thinking, our approaches, and ultimately our
products.
It is in this spirit that we have enhanced our book, building an underlying frame
work for this questioning and improvement. In particular, this fourth edition contains
extensive material about how to abstract and model a problem, and how to use models,
design principles, design patterns, and design strategies to create appropriate solutions.
Software engineers are more than programmers following instructions, much as chefs
are more than cooks following recipes. There is an art to building good software,and the
art is embodied in understanding how to abstract and model the essential elements of a
problem and then use those abstractions to design a solution. Wc often hear good devel
opers talk about ''elegant" solutions, meaning that the solution addresses the heart of
the problem, such that not only does the software solve the problem in its current form
but it can also be modified as the problem evolves over time. In this way. students learn
to blend research with practice and art with science, to build solid software.
Hie science is always grounded in reality. Designed for an undergraduate soft
ware engineering curriculum, this book paints a pragmatic picture of software engi
neering research and practices so that students can apply what they learn directly to the
real-world problems they are trying to solve. Examples speak to a student's limited
experience but illustrate clearly how large software development projects progress
from need to idea to reality. The examples represent the many situations that readers
are likely to experience: large projects and small, "agile" methods and highly structured
ones, object-oriented and procedural approaches, real-lime and transaction processing,
development and maintenance situations. |