Page 49 -
P. 49
20 PART ONE THE PRODUCT AND THE PROCESS
But what exactly is a software process from a technical point of view? Within the
context of this book, we define a software process as a framework for the tasks that
are required to build high-quality software. Is process synonymous with software engi-
neering? The answer is “yes” and “no.” A software process defines the approach that
is taken as software is engineered. But software engineering also encompasses tech-
nologies that populate the process—technical methods and automated tools.
More important, software engineering is performed by creative, knowledgeable
people who should work within a defined and mature software process that is appro-
priate for the products they build and the demands of their marketplace. The intent
of this chapter is to provide a survey of the current state of the software process and
pointers to more detailed discussion of management and technical topics presented
later in this book.
2.1 SOFTWARE ENGINEERING: A LAYERED TECHNOLOGY
Although hundreds of authors have developed personal definitions of software engi-
neering, a definition proposed by Fritz Bauer [NAU69] at the seminal conference on
“More than a the subject still serves as a basis for discussion:
discipline or a body
of knowledge, [Software engineering is] the establishment and use of sound engineering principles in
engineering is a order to obtain economically software that is reliable and works efficiently on real machines.
verb, an action
word, a way of Almost every reader will be tempted to add to this definition. It says little about the
approaching a technical aspects of software quality; it does not directly address the need for cus-
problem.”
tomer satisfaction or timely product delivery; it omits mention of the importance of
Scott Whitmire
measurement and metrics; it does not state the importance of a mature process. And
yet, Bauer’s definition provides us with a baseline. What “sound engineering princi-
ples” can be applied to computer software development? How do we “economically”
build software so that it is “reliable”? What is required to create computer programs
that work “efficiently” on not one but many different “real machines”? These are the
questions that continue to challenge software engineers.
The IEEE [IEE93] has developed a more comprehensive definition when it states:
? How do we Software Engineering: (1) The application of a systematic, disciplined, quantifiable approach
define
software to the development, operation, and maintenance of software; that is, the application of
engineering? engineering to software. (2) The study of approaches as in (1).
2.1.1 Process, Methods, and Tools
Software engineering is a layered technology. Referring to Figure 2.1, any engineer-
ing approach (including software engineering) must rest on an organizational com-
mitment to quality. Total quality management and similar philosophies foster a
continuous process improvement culture, and this culture ultimately leads to the