SE Unit 1
SE Unit 1
T HE NATURE
OF S OFTWARE 1
KEY s he finished showing me the latest build of one of the world’s
CONCEPTS
application
domains . . . . . . . . . . 6
cloud computing . . . 10
A most popular first-person shooter video games, the young developer
laughed.
“You’re not a gamer, are you?” he asked.
failure curves . . . . . . 5 I smiled. “How’d you guess?”
legacy software . . . . 8 The young man was dressed in shorts and a tee shirt. His leg bounced up
mobile apps . . . . . . 10
and down like a piston, burning the nervous energy that seemed to be com-
product line. . . . . . . 11
software, monplace among his co-workers.
definition . . . . . . . . . 4 “Because if you were,” he said, “you’d be a lot more excited. You’ve gotten a
software, questions
about . . . . . . . . . . . . 4
peek at our next generation product and that’s something that our customers
software, would kill for . . . no pun intended.”
nature of . . . . . . . . . 3 We sat in a development area at one of the most successful game develop-
wear . . . . . . . . . . . . 5
Webapps . . . . . . . . . 9 ers on the planet. Over the years, earlier generations of the game he demoed
sold over 50 million copies and generated billions of dollars in revenue.
“So, when will this version be on the market?” I asked.
He shrugged. “In about five months, and we’ve still got a lot of work to do.”
He had responsibility for game play and artificial intelligence functionality
in an application that encompassed more than three million lines of code.
“Do you guys use any software engineering techniques?” I asked, half-
expecting that he’d laugh and shake his head.
QUICK What is it? Computer software is What are the steps? Customers and other
LOOK the product that software profession- stakeholders express the need for computer
als build and then support over the software, engineers build the software prod-
long term. It encompasses programs uct, and end users apply the software to solve
that execute within a computer of any size and a specific problem or to address a specific
architecture, content that is presented as the need.
computer programs execute, and descriptive What is the work product? A computer pro-
information in both hard copy and virtual forms gram that runs in one or more specific environ-
that encompass virtually any electronic media. ments and services the needs of one or more
Who does it? Software engineers build and end users.
support software, and virtually everyone in How do I ensure that I’ve done it
the industrialized world uses it either directly right? If you’re a software engineer, apply
or indirectly. the ideas contained in the remainder of this
Why is it important? Software is important book. If you’re an end user, be sure you un-
because it affects nearly every aspect of our derstand your need and your environment
lives and has become pervasive in our com- and then select an application that best
merce, our culture, and our everyday activities. meets them both.
entertainment, office machines, . . . the list is almost endless. And if you believe the
law of unintended consequences, there are many effects that we cannot yet predict.
No one could predict that millions of computer programs would have to be
corrected, adapted, and enhanced as time passed. The burden of performing
these “maintenance” activities would absorb more people and more resources
than all work applied to the creation of new software.
As software’s importance has grown, the software community has continually
attempted to develop technologies that will make it easier, faster, and less ex-
pensive to build and maintain high-quality computer programs. Some of these
technologies are targeted at a specific application domain (e.g., website design
and implementation); others focus on a technology domain (e.g., object-oriented
systems or aspect-oriented programming); and still others are broad-based (e.g.,
operating systems such as Linux). However, we have yet to develop a software
technology that does it all, and the likelihood of one arising in the future is small.
And yet, people bet their jobs, their comforts, their safety, their entertainment,
their decisions, and their very lives on computer software. It better be right.
This book presents a framework that can be used by those who build computer
software—people who must get it right. The framework encompasses a process,
a set of methods, and an array of tools that we call software engineering.
1. 1 T H E N AT U R E OF S O F T WA R E
Today, software takes on a dual role. It is a product, and at the same time, the
vehicle for delivering a product. As a product, it delivers the computing potential
embodied by computer hardware or more broadly, by a network of computers
that are accessible by local hardware. Whether it resides within a mobile phone,
Software is both a
product and a vehicle a hand-held tablet, on the desktop, or within a mainframe computer, software
that delivers a product. is an information transformer—producing, managing, acquiring, modifying, dis-
playing, or transmitting information that can be as simple as a single bit or as
complex as a multimedia presentation derived from data acquired from dozens
of independent sources. As the vehicle used to deliver the product, software acts
as the basis for the control of the computer (operating systems), the communica-
tion of information (networks), and the creation and control of other programs
(software tools and environments).
Software delivers the most important product of our time—information. It
transforms personal data (e.g., an individual’s financial transactions) so that the
data can be more useful in a local context; it manages business information to
enhance competitiveness; it provides a gateway to worldwide information net-
works (e.g., the Internet), and provides the means for acquiring information in
all of its forms. It also provides a vehicle that can threaten personal privacy and a
gateway that enables those with malicious intent to commit criminal acts.
The role of computer software has undergone significant change over the
uote: last half-century. Dramatic improvements in hardware performance, profound
“Software is changes in computing architectures, vast increases in memory and storage ca-
a place where pacity, and a wide variety of exotic input and output options have all precipitated
dreams are planted more sophisticated and complex computer-based systems. Sophistication and
and nightmares complexity can produce dazzling results when a system succeeds, but they can
harvested, an
also pose huge problems for those who must build and protect complex systems.
abstract, mystical
swamp where Today, a huge software industry has become a dominant factor in the econ-
terrible demons omies of the industrialized world. Teams of software specialists, each focusing
compete with on one part of the technology required to deliver a complex application, have
magical panaceas,
replaced the lone programmer of an earlier era. And yet, the questions that were
a world of
werewolves and asked of the lone programmer are the same questions that are asked when mod-
silver bullets.” ern computer-based systems are built:1
These, and many other questions, are a manifestation of the concern about
software and the manner in which it is developed—a concern that has led to the
adoption of software engineering practice.
? How should Software is: (1) instructions (computer programs) that when executed provide de-
we define sired features, function, and performance; (2) data structures that enable the pro-
software? grams to adequately manipulate information, and (3) descriptive information in both
hard copy and virtual forms that describes the operation and use of the programs.
There is no question that other more complete definitions could be offered. But a
more formal definition probably won’t measurably improve your understanding.
1 In an excellent book of essays on the software business, Tom DeMarco [DeM95] argues the
counterpoint. He states: “Instead of asking why software costs so much, we need to begin ask-
ing ‘What have we done to make it possible for today’s software to cost so little?’ The answer
to that question will help us continue the extraordinary level of achievement that has always
distinguished the software industry.”
FIGURE 1.1
Failure curve
for hardware
2 In fact, from the moment that development begins and long before the first version is delivered,
changes may be requested by a variety of different stakeholders.
FIGURE 1.2
Failure curves
Increased failure
for software
rate due to side
effects
Failure rate
Change
Actual curve
Idealized curve
Time
made, it is likely that errors will be introduced, causing the failure rate curve to
spike as shown in the “actual curve” (Figure 1.2). Before the curve can return to
the original steady-state failure rate, another change is requested, causing the
Software engineering
curve to spike again. Slowly, the minimum failure rate level begins to rise—the
methods strive to
reduce the magnitude software is deteriorating due to change.
of the spikes and the Another aspect of wear illustrates the difference between hardware and soft-
slope of the actual ware. When a hardware component wears out, it is replaced by a spare part. There
curve in Figure 1.2.
are no software spare parts. Every software failure indicates an error in design
or in the process through which design was translated into machine executable
code. Therefore, the software maintenance tasks that accommodate requests for
change involve considerably more complexity than hardware maintenance.
3 Software is determinate if the order and timing of inputs, processing, and outputs is predict-
able. Software is indeterminate if the order and timing of inputs, processing, and outputs can-
not be predicted in advance.
“What a computer forward analysis. Applications within this area include robotics, expert
is to me is the most systems, pattern recognition (image and voice), artificial neural networks,
remarkable tool theorem proving, and game playing.
that we have ever
come up with. It’s Millions of software engineers worldwide are hard at work on software proj-
the equivalent of ects in one or more of these categories. In some cases, new systems are being
a bicycle for our built, but in many others, existing applications are being corrected, adapted,
minds.”
and enhanced. It is not uncommon for a young software engineer to work on
Steve Jobs a program that is older than she is! Past generations of software people have
left a legacy in each of the categories we have discussed. Hopefully, the legacy
to be left behind by this generation will ease the burden on future software
engineers.
Legacy software systems . . . were developed decades ago and have been continually
modified to meet changes in business requirements and computing platforms. The
proliferation of such systems is causing headaches for large organizations who find
them costly to maintain and risky to evolve.
Liu and his colleagues [Liu98] extend this description by noting that “many
legacy systems remain supportive to core business functions and are ‘indispens-
able’ to the business.” Hence, legacy software is characterized by longevity and
business criticality.
? What do I do
if I encounter Unfortunately, there is sometimes one additional characteristic that is pres-
a legacy system ent in legacy software—poor quality.4 Legacy systems sometimes have inextensi-
that exhibits poor ble designs, convoluted code, poor or nonexistent documentation, test cases and
quality?
results that were never archived, a poorly managed change history—the list can
be quite long. And yet, these systems support “core business functions and are
indispensable to the business.” What to do?
The only reasonable answer may be: Do nothing, at least until the legacy sys-
tem must undergo some significant change. If the legacy software meets the
needs of its users and runs reliably, it isn’t broken and does not need to be fixed.
However, as time passes, legacy systems often evolve for one or more of the fol-
lowing reasons:
• The software must be adapted to meet the needs of new computing envi-
? What types
of changes ronments or technology.
are made to
legacy systems? • The software must be enhanced to implement new business requirements.
• The software must be extended to make it interoperable with other more
modern systems or databases.
4 In this case, quality is judged based on modern software engineering thinking—a somewhat
unfair criterion since some modern software engineering concepts and principles may not
have been well understood at the time that the legacy software was developed.
Referring to the figure, computing devices reside outside the cloud and have
access to a variety of resources within the cloud. These resources encompass ap-
plications, platforms, and infrastructure. In its simplest form, an external com-
puting device accesses the cloud via a Web browser or analogous software. The
cloud provides access to data that resides with databases and other data struc-
tures. In addition, devices can access executable applications that can be used in
lieu of apps that reside on the computing device.
The implementation of cloud computing requires the development of an ar-
chitecture that encompasses front-end and back-end services. The front-end in-
cludes the client (user) device and the application software (e.g., a browser) that
allows the back-end to be accessed. The back-end includes servers and related
computing resources, data storage systems (e.g., databases), server-resident ap-
plications, and administrative servers that use middleware to coordinate and
monitor traffic by establishing a set of protocols for access to the cloud and its
resident resources. [Str08]
The cloud architecture can be segmented to provide access at a variety of
different levels from full public access to private cloud architectures accessible
only to those with authorization.
1. 3 SUMMARY
Software is the key element in the evolution of computer-based systems and
products and one of the most important technologies on the world stage. Over
the past 50 years, software has evolved from a specialized problem solving and
information analysis tool to an industry in itself. Yet we still have trouble devel-
oping high-quality software on time and within budget.
1.2. Provide a number of examples (both positive and negative) that indicate the impact of
software on our society.
1.3. Develop your own answers to the five questions asked at the beginning of Section 1.1.
Discuss them with your fellow students.
1.4. Many modern applications change frequently—before they are presented to the end
user and then after the first version has been put into use. Suggest a few ways to build soft-
ware to stop deterioration due to change.
1.5. Consider the seven software categories presented in Section 1.1.2. Do you think that
the same approach to software engineering can be applied for each? Explain your answer.
6 The Further Reading and Information Sources section presented at the conclusion of each
chapter presents a brief overview of print sources that can help to expand your understanding
of the major topics presented in the chapter. We have created a comprehensive website to
support Software Engineering: A Practitioner’s Approach at www.mhhe.com/pressman. Among
the many topics addressed within the website are chapter-by-chapter software engineering
resources to Web-based information that can complement the material presented in each
chapter. An Amazon.com link to every book noted in this section is contained within these
resources.
2 S OFTWARE
ENGINEERING
KEY n order to build software that is ready to meet the challenges of the
CONCEPTS
framework
activities . . . . . . . . 17
general principles . . 21
I twenty-first century, you must recognize a few simple realities:
QUICK What is it? Software engineering by applying an agile, adaptable process that
LOOK encompasses a process, a collec- leads to a high-quality result that meets the
tion of methods (practice) and an needs of the people who will use the product.
array of tools that allow profession- You apply a software engineering approach.
als to build high-quality computer software. What is the work product? From the point
Who does it? Software engineers apply the of view of a software engineer, the work prod-
software engineering process. uct is the set of programs, content (data), and
Why is it important? Software engineering is other work products that are computer soft-
important because it enables us to build com- ware. But from the user’s viewpoint, the work
plex systems in a timely manner and with high product is the resultant information that some-
quality. It imposes discipline to work that can be- how makes the user’s world better.
come quite chaotic, but it also allows the people How do I ensure that I’ve done it
who build computer software to adapt their ap- right? Read the remainder of this book, se-
proach in a manner that best suits their needs. lect those ideas that are applicable to the soft-
What are the steps? You build computer soft- ware that you build, and apply them to your
ware like you build any successful product, work.
14
These simple realities lead to one conclusion: software in all of its forms and
Both quality and
across all of its application domains should be engineered. And that leads us to
maintainability are
an outgrowth of good the topic of this book—software engineering.
design.
? How do
we define
Software Engineering : (1) The application of a systematic, disciplined, quantifiable
approach to the development, operation, and maintenance of software; that is, the
software
application of engineering to software. (2) The study of approaches as in (1).
engineering?
And yet, a “systematic, disciplined, and quantifiable” approach applied by one
software team may be burdensome to another. We need discipline, but we also
need adaptability and agility.
Software engineering is a layered technology. Referring to Figure 2.1, any en-
gineering approach (including software engineering) must rest on an organiza-
tional commitment to quality. Total quality management, Six Sigma, and similar
philosophies2 foster a continuous process improvement culture, and it is this
culture that ultimately leads to the development of increasingly more effective
approaches to software engineering. The bedrock that supports software engi-
neering is a quality focus.
The foundation for software engineering is the process layer. The software
engineering process is the glue that holds the technology layers together and
Software engineering enables rational and timely development of computer software. Process defines
encompasses a pro-
a framework that must be established for effective delivery of software engineer-
cess, methods for man-
aging and engineering ing technology. The software process forms the basis for management control
software, and tools. of software projects and establishes the context in which technical methods are
2 Quality management and related approaches are discussed throughout Part 3 of this book.
FIGURE 2.1
Software engi-
neering layers Tools
Methods
Process
A quality focus
applied, work products (models, documents, data, reports, forms, etc.) are pro-
duced, milestones are established, quality is ensured, and change is properly
managed.
Software engineering methods provide the technical how-to’s for building
software. Methods encompass a broad array of tasks that include communica-
tion, requirements analysis, design modeling, program construction, testing,
WebRef and support. Software engineering methods rely on a set of basic principles that
CrossTalk is a journal govern each area of the technology and include modeling activities and other
that provides pragmatic
information on process, descriptive techniques.
methods, and tools. It Software engineering tools provide automated or semi-automated support
can be found at: for the process and the methods. When tools are integrated so that information
www.stsc.hill.af.mil,
created by one tool can be used by another, a system for the support of software
development, called computer-aided software engineering, is established.
2.2 T H E S O F T WA R E P R O C E S S
A process is a collection of activities, actions, and tasks that are performed when
? What are
the elements some work product is to be created. An activity strives to achieve a broad objec-
of a software tive (e.g., communication with stakeholders) and is applied regardless of the ap-
process?
plication domain, size of the project, complexity of the effort, or degree of rigor
with which software engineering is to be applied. An action (e.g., architectural
uote: design) encompasses a set of tasks that produce a major work product (e.g., an
“A process defines architectural model). A task focuses on a small, but well-defined objective (e.g.,
who is doing what conducting a unit test) that produces a tangible outcome.
when and how to
In the context of software engineering, a process is not a rigid prescription for
reach a certain
goal.” how to build computer software. Rather, it is an adaptable approach that enables
the people doing the work (the software team) to pick and choose the appropri-
Ivar Jacobson,
Grady Booch, ate set of work actions and tasks. The intent is always to deliver software in a
and James timely manner and with sufficient quality to satisfy those who have sponsored its
Rumbaugh creation and those who will use it.
Construction. What you design must be built. This activity combines code gen-
eration (either manual or automated) and the testing that is required to uncover
errors in the code.
3 A stakeholder is anyone who has a stake in the successful outcome of the project—business
managers, end users, software engineers, support people, etc. Rob Thomsett jokes that, “a
stakeholder is a person holding a large and sharp stake . . . If you don’t look after your stake-
holders, you know where the stake will end up.”
of large, complex computer-based systems. The details of the software process will
be quite different in each case, but the framework activities remain the same.
For many software projects, framework activities are applied iteratively as a
project progresses. That is, communication, planning, modeling, construction,
and deployment are applied repeatedly through a number of project iterations.
Each iteration produces a software increment that provides stakeholders with a
subset of overall software features and functionality. As each increment is pro-
duced, the software becomes more and more complete.
and to the organizational culture). Therefore, a process adopted for one proj-
ect might be significantly different than a process adopted for another project.
Among the differences are
• Degree to which actions and tasks are defined within each framework
activity.
uote:
• Degree to which work products are identified and required.
“I feel a recipe is
only a theme which • Manner in which quality assurance activities are applied.
an intelligent cook
• Manner in which project tracking and control activities are applied.
can play each time
with a variation.” • Overall degree of detail and rigor with which the process is described.
Madame Benoit • Degree to which the customer and other stakeholders are involved with
the project.
2. 3 S O F T WA R E E N G I N E E R I N G P R A C T I C E
In Section 2.2, we introduced a generic software process model composed of a
set of activities that establish a framework for software engineering practice. Ge-
WebRef
neric framework activities—communication, planning, modeling, construction,
A variety of thought-
provoking quotes on and deployment—and umbrella activities establish a skeleton architecture for
the practice of software software engineering work. But how does the practice of software engineering
engineering can be fit in? In the sections that follow, you’ll gain a basic understanding of the generic
found at www.literate-
programming.com. concepts and principles that apply to framework activities.4
4 You should revisit relevant sections within this chapter as we discuss specific software engi-
neering methods and umbrella activities later in this book.
Understand the problem. It’s sometimes difficult to admit, but most of us suffer
from hubris when we’re presented with a problem. We listen for a few seconds
The most important and then think, Oh yeah, I understand, let’s get on with solving this thing. Unfor-
element of problem tunately, understanding isn’t always that easy. It’s worth spending a little time
understanding is
listening. answering a few simple questions:
• Who has a stake in the solution to the problem? That is, who are the
stakeholders?
• What are the unknowns? What data, functions, and features are required
to properly solve the problem?
Plan the solution. Now you understand the problem (or so you think), and you
can’t wait to begin coding. Before you do, slow down just a bit and do a little
design:
• Have you seen similar problems before? Are there patterns that are recog-
nizable in a potential solution? Is there existing software that implements
the data, functions, and features that are required?
• Has a similar problem been solved? If so, are elements of the solution
reusable?
• Can subproblems be defined? If so, are solutions readily apparent for the
subproblems?
Carry out the plan. The design you’ve created serves as a road map for the sys-
uote:
tem you want to build. There may be unexpected detours, and it’s possible that
“There is a grain you’ll discover an even better route as you go, but the “plan” will allow you to
of discovery in the
proceed without getting lost.
solution of any
problem.”
• Does the solution conform to the plan? Is source code traceable to the de-
George Polya sign model?
• Is each component part of the solution provably correct? Has the design
and code been reviewed, or better, have correctness proofs been applied
to the algorithm?
Examine the result. You can’t be sure that your solution is perfect, but you can
be sure that you’ve designed a sufficient number of tests to uncover as many
errors as possible.
• Does the solution produce results that conform to the data, functions, and
features that are required? Has the software been validated against all
stakeholder requirements?
It shouldn’t surprise you that much of this approach is common sense. In fact,
it’s reasonable to state that a commonsense approach to software engineering
will never lead you astray.
5 Reproduced with permission of the author [Hoo96]. Hooker defines patterns for these princi-
ples at http://c2.com/cgi/wiki?SevenPrinciplesOfSoftwareDevelopment.
often takes a lot of thought and work over multiple iterations to simplify. The
payoff is software that is more maintainable and less error-prone.
A system with a long lifetime has more value. In today's computing envi-
ronments, where specifications change on a moment’s notice and hardware
platforms are obsolete just a few months old, software lifetimes are typically
measured in months instead of years. However, true “industrial-strength”
software systems must endure far longer. To do this successfully, these sys-
tems must be ready to adapt to these and other changes. Systems that do this
successfully are those that have been designed this way from the start. Never
design yourself into a corner. Always ask “what if,” and prepare for all possible
answers by creating systems that solve the general problem, not just the spe-
cific one.6 This could very possibly lead to the reuse of an entire system.
Reuse saves time and effort.7 Achieving a high level of reuse is arguably the
hardest goal to accomplish in developing a software system. The reuse of code
6 This advice can be dangerous if it is taken to extremes. Designing for the “general problem”
sometimes requires performance compromises and can make specific solutions inefficient.
7 Although this is true for those who reuse the software on future projects, reuse can be expen-
sive for those who must design and build reusable components. Studies indicate that designing
and building reusable components can cost between 25 to 200 percent more than targeted
software. In some cases, the cost differential cannot be justified.
This last Principle is probably the most overlooked. Placing clear, complete
thought before action almost always produces better results. When you think about
something, you are more likely to do it right. You also gain knowledge about how to
do it right again. If you do think about something and still do it wrong, it becomes
a valuable experience. A side effect of thinking is learning to recognize when you
don’t know something, at which point you can research the answer. When clear
thought has gone into a system, value comes out. Applying the first six principles
requires intense thought, for which the potential rewards are enormous.
If every software engineer and every software team simply followed Hooker’s
seven principles, many of the difficulties we experience in building complex
computer-based systems would be eliminated.
2. 4 S O F T WA R E D E V E L O P M E N T M Y T H S
Software development myths—erroneous beliefs about software and the process
that is used to build it—can be traced to the earliest days of computing. Myths
have a number of attributes that make them insidious. For instance, they appear
to be reasonable statements of fact (sometimes containing elements of truth),
they have an intuitive feel, and they are often promulgated by experienced prac-
titioners who “know the score.”
Today, most knowledgeable software engineering professionals recognize
myths for what they are—misleading attitudes that have caused serious prob-
lems for managers and practitioners alike. However, old attitudes and habits are
difficult to modify, and remnants of software myths remain.
The market will accept the product only if the software embedded within it prop-
erly meets the customer’s (as yet unstated) needs. We’ll follow the progression of
SafeHome software engineering in many of the chapters that follow.
2. 6 SUMMARY
Software engineering encompasses process, methods, and tools that enable
complex computer-based systems to be built in a timely manner with quality. The
software process incorporates five framework activities—communication, plan-
ning, modeling, construction, and deployment—that are applicable to all soft-
ware projects. Software engineering practice is a problem-solving activity that
follows a set of core principles.
A wide array of software myths continue to lead managers and practitioners
astray, even as our collective knowledge of software and the technologies re-
quired to build it grows. As you learn more about software engineering, you’ll
begin to understand why these myths should be debunked whenever they are
encountered.
2.2. Is software engineering applicable when WebApps are built? If so, how might it be mod-
ified to accommodate the unique characteristics of WebApps?
2.3. As software becomes more pervasive, risks to the public (due to faulty programs) be-
come an increasingly significant concern. Develop a doomsday but realistic scenario in
which the failure of a computer program could do great harm, either economic or human.
2.4. Describe a process framework in your own words. When we say that framework activ-
ities are applicable to all projects, does this mean that the same work tasks are applied for
all projects, regardless of size and complexity? Explain.
2.5. Umbrella activities occur throughout the software process. Do you think they are
applied evenly across the process, or are some concentrated in one or more framework
activities?
2.6. Add two additional myths to the list presented in Section 2.4. Also state the reality that
accompanies the myth.
One
THE SOFTWARE
PROCESS
29
3 S OFTWARE P ROCESS
STRUCTURE
KEY n a fascinating book that provides an economist’s view of software and soft-
CONCEPTS
generic process
model. . . . . . . . . . . 31
process
I ware engineering, Howard Baetjer Jr. [Bae98] comments on the software
process:
Because software, like all capital, is embodied knowledge, and because that
assessment. . . . . . . 37 knowledge is initially dispersed, tacit, latent, and incomplete in large measure,
process flow. . . . . . 31
process software development is a social learning process. The process is a dialogue in
improvement . . . . . 38 which the knowledge that must become the software is brought together and
process
embodied in the software. The process provides interaction between users and
patterns . . . . . . . . . 35
task set . . . . . . . . . 34 designers, between users and evolving tools, and between designers and evolving
tools [technology]. It is an iterative process in which the evolving tool itself serves
as the medium for communication, with each new round of the dialogue eliciting
more useful knowledge from the people involved.
QUICK What is it? When you work to What are the steps? At a detailed level, the
LOOK build a product or system, it’s im- process that you adopt depends on the soft-
portant to go through a series of ware that you’re building. One process might
predictable steps—a road map that be appropriate for creating software for an air-
helps you create a timely, high-quality result. craft avionics system, while an entirely differ-
The road map that you follow is called a “soft- ent process would be indicated for the creation
ware process.” of a website.
Who does it? Software engineers and their What is the work product? From the point
managers adapt the process to their needs and of view of a software engineer, the work prod-
then follow it. In addition, the people who have ucts are the programs, documents, and data
requested the software have a role to play in that are produced as a consequence of the ac-
the process of defining, building, and testing it. tivities and tasks defined by the process.
Why is it important? Because it provides sta- How do I ensure that I’ve done it right?
bility, control, and organization to an activity There are a number of software process assess-
that can, if left uncontrolled, become quite cha- ment mechanisms that enable organizations
otic. However, a modern software engineering to determine the “maturity” of their software
approach must be “agile.” It must demand process. However, the quality, timeliness, and
only those activities, controls, and work prod- long-term viability of the product you build are
ucts that are appropriate for the project team the best indicators of the efficacy of the pro-
and the product that is to be produced. cess that you use.
30
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
activities, actions, and tasks that are required to build high-quality software. Is
“process” synonymous with “software engineering”? The answer is yes and no. A
software process defines the approach that is taken as software is engineered.
But software engineering also encompasses technologies that populate the
process—technical methods and automated tools.
More important, software engineering is performed by creative, knowledge-
able people who should adapt a mature software process so that it is appropriate
for the products that they build and the demands of their marketplace.
I NFO
An Example Process Pattern solved, and the problem must be addressed with a
The following abbreviated process pattern de- software solution. Stakeholders are unsure of what they
scribes an approach that may be applicable want; that is, they cannot describe software requirements
when stakeholders have a general idea of what must be in any detail.
done but are unsure of specific software requirements. Solution. A description of the prototyping process
Pattern Name. RequirementsUnclear would be presented here and is described later in
Section 4.1.3.
Intent. This pattern describes an approach for building
a model (a prototype) that can be assessed iteratively by Resulting Context. A software prototype that
stakeholders in an effort to identify or solidify software identifies basic requirements (e.g., modes of interaction,
requirements. computational features, processing functions) is
approved by stakeholders. Following this, (1) the
Type. Phase pattern.
prototype may evolve through a series of increments to
Initial Context. The following conditions must be met become the production software or (2) the prototype
prior to the initiation of this pattern: (1) stakeholders have may be discarded and the production software built
been identified; (2) a mode of communication between using some other process pattern.
stakeholders and the software team has been established;
Related Patterns. The following patterns are
(3) the overriding software problem to be solved has been
related to this pattern: CustomerCommunication,
identified by stakeholders; (4) an initial understanding of
IterativeDesign, IterativeDevelopment,
project scope, basic business requirements, and project
CustomerAssessment, RequirementExtraction.
constraints has been developed.
Known Uses and Examples. Prototyping is
Problem. Requirements are hazy or nonexistent, yet
recommended when requirements are uncertain.
there is clear recognition that there is a problem to be
4 P ROCESS
M ODELS
KEY rocess models were originally proposed to bring order to the chaos of
CONCEPTS
aspect-oriented software
development. . . . . . 54
component-based
P software development. History has indicated that these models have
brought a certain amount of useful structure to software engineering
work and have provided a reasonably effective road map for software teams.
development. . . . . . 53 However, software engineering work and the products that are produced re-
concurrent models…49 main on “the edge of chaos.”
evolutionary process
In an intriguing paper on the strange relationship between order and chaos
model. . . . . . . . . . . 45
formal methods in the software world, Nogueira and his colleagues [Nog00] state
model. . . . . . . . . . . 53
incremental process The edge of chaos is defined as “a natural state between order and chaos, a grand
models . . . . . . . . . . 43 compromise between structure and surprise.” [Kau95] The edge of chaos can be
Personal Software
Process . . . . . . . . . 59 visualized as an unstable, partially structured state . . . It is unstable because it is
process modeling constantly attracted to chaos or to absolute order.
tools . . . . . . . . . . . 62
process technology . 61 We have the tendency to think that order is the ideal state of nature. This
prototyping . . . . . . 45
could be a mistake. Research . . . supports the theory that operation away from
spiral model . . . . . . 47
Team Software equilibrium generates creativity, self-organized processes, and increasing re-
Process . . . . . . . . . 60 turns [Roo96]. Absolute order means the absence of variability, which could be an
unified process . . . . 55
V-model . . . . . . . . . 42
waterfall model . . . 41
QUICK What is it? A process model pro- demand only those activities, controls, and
LOOK vides a specific roadmap for soft- work products that are appropriate for the proj-
ware engineering work. It defines ect team and the product that is to be produced.
the flow of all activities, actions and What are the steps? The process model pro-
tasks, the degree of iteration, the work prod- vides you with the “steps” you’ll need to per-
ucts, and the organization of the work that form disciplined software engineering work.
must be done. What is the work product? From the point
Who does it? Software engineers and their of view of a software engineer, the work prod-
managers adapt a process model to their uct is a customized description of the activities
needs and then follow it. In addition, the peo- and tasks defined by the process.
ple who have requested the software have a How do I ensure that I’ve done it right?
role to play in the process of defining, build- There are a number of software process assess-
ing, and testing it. ment mechanisms that enable organizations
Why is it important? Because process pro- to determine the “maturity” of their software
vides stability, control, and organization to an process. However, the quality, timeliness, and
activity that can, if left uncontrolled, become long-term viability of the product you build are
quite chaotic. However, a modern software the best indicators of the efficacy of the pro-
engineering approach must be “agile.” It must cess that you use.
40
Communication
project initiation Planning
estimating Modeling
requirements gathering analysis Construction
scheduling
code Deployment
tracking design delivery
test
support
feedback
The waterfall model, sometimes called the classic life cycle, suggests a system-
atic, sequential approach2 to software development that begins with customer
specification of requirements and progresses through planning, modeling, con-
The V-model illustrates
struction, and deployment, culminating in ongoing support of the completed
how verification and
validation actions are software (Figure 4.1).
associated with earlier A variation in the representation of the waterfall model is called the V-model.
engineering actions. Represented in Figure 4.2, the V-model [Buc99] depicts the relationship of quality
assurance actions to the actions associated with communication, modeling, and
early construction activities. As a software team moves down the left side of the
V, basic problem requirements are refined into progressively more detailed and
technical representations of the problem and its solution. Once code has been
generated, the team moves up the right side of the V, essentially performing a
series of tests (quality assurance actions) that validate each of the models cre-
ated as the team moves down the left side.3 In reality, there is no fundamental
difference between the classic life cycle and the V-model. The V-model provides
a way of visualizing how verification and validation actions are applied to earlier
engineering work.
The waterfall model is the oldest paradigm for software engineering. How-
ever, over the past four decades, criticism of this process model has caused even
ardent supporters to question its efficacy [Han95]. Among the problems that are
sometimes encountered when the waterfall model is applied are:
1. Real projects rarely follow the sequential flow that the model proposes.
? Why does
the waterfall Although the linear model can accommodate iteration, it does so indi-
model sometimes rectly. As a result, changes can cause confusion as the project team
fail? proceeds.
2. It is often difficult for the customer to state all requirements explicitly. The
waterfall model requires this and has difficulty accommodating the natu-
ral uncertainty that exists at the beginning of many projects.
2 Although the original waterfall model proposed by Winston Royce [Roy70] made provision for
“feedback loops,” the vast majority of organizations that apply this process model treat it as if
it were strictly linear.
3 A detailed discussion of quality assurance actions is presented in Part 3 of this book.
FIGURE 4.2
The V-model
Requirements Acceptance
modeling testing
Architectural System
design testing
Component Integration
design testing
Code Unit
generation testing
Executable
software
Author unknown model in situations where requirements are fixed and work is to proceed to com-
pletion in a linear manner.
FIGURE 4.3
The incremen- Communication
tal model
Planning
delivery of
increment # 2 nth increment
delivery of
increment # 1 2nd increment
delivery of
1st increment
FIGURE 4.4
The prototyp-
ing paradigm
Quick plan
Communication
Modeling
Quick design
Deployment
Delivery
Construction
& Feedback
of
prototype
But what do you do with the prototype when it has served the purpose de-
scribed earlier? Brooks [Bro95] provides one answer:
In most projects, the first system built is barely usable. It may be too slow, too big,
awkward in use or all three. There is no alternative but to start again, smarting but
smarter, and build a redesigned version in which these problems are solved.
The prototype can serve as “the first system.” The one that Brooks recom-
mends you throw away. But this may be an idealized view. Although some pro-
totypes are built as “throwaways,” others are evolutionary in the sense that the
prototype slowly evolves into the actual system.
Both stakeholders and software engineers like the prototyping paradigm.
Users get a feel for the actual system, and developers get to build something im-
mediately. Yet, prototyping can be problematic for the following reasons:
S AFE H OME
Selecting a Process Model, Part 1
The scene: Meeting room for the Doug (smiling): I want to be a bit more professional
software engineering group at CPI in our approach. I went to a short course last week and
Corporation, a (fictional) company that makes consumer learned a lot about software engineering . . . good
products for home and commercial use. stuff. We need a process here.
The players: Lee Warren, engineering manager; Jamie (with a frown): My job is to build computer
Doug Miller, software engineering manager; Jamie programs, not push paper around.
Lazar, software team member; Vinod Raman, software Doug: Give it a chance before you go negative on
team member; and Ed Robbins, software team member. me. Here’s what I mean. (Doug proceeds to describe
The conversation: the process framework described in Chapter 3 and the
Lee: So let’s recapitulate. I’ve spent some time dis- prescriptive process models presented to this point.)
cussing the SafeHome product line as we see it at the Doug: So anyway, it seems to me that a linear model
moment. No doubt, we’ve got a lot of work to do to is not for us . . . assumes we have all requirements up
simply define the thing, but I’d like you guys to begin front and, knowing this place, that’s not likely.
thinking about how you’re going to approach the Vinod: Yeah, and it sounds way too IT-oriented . . .
software part of this project. probably good for building an inventory control system
Doug: Seems like we’ve been pretty disorganized in or something, but it’s just not right for SafeHome.
our approach to software in the past. Doug: I agree.
Ed: I don’t know, Doug, we always got product out Ed: That prototyping approach seems okay. A lot like
the door. what we do here anyway.
Doug: True, but not without a lot of grief, and this Vinod: That’s a problem. I’m worried that it doesn’t
project looks like it’s bigger and more complex than provide us with enough structure.
anything we’ve done in the past.
Doug: Not to worry. We’ve got plenty of other
Jamie: Doesn’t look that hard, but I agree . . . our ad options, and I want you guys to pick what’s best for the
hoc approach to past projects won’t work here, particu- team and best for the project.
larly if we have a very tight time line.
The Spiral Model. Originally proposed by Barry Boehm [Boe88], the spiral
model is an evolutionary software process model that couples the iterative na-
ture of prototyping with the controlled and systematic aspects of the waterfall
model. It provides the potential for rapid development of increasingly more
complete versions of the software. Boehm [Boe01a] describes the model in the
following manner:
The spiral development model is a risk-driven process model generator that is used
to guide multi-stakeholder concurrent engineering of software intensive systems.
It has two main distinguishing features. One is a cyclic approach for incrementally
The spiral model growing a system’s degree of definition and implementation while decreasing its de-
can be adapted to gree of risk. The other is a set of anchor point milestones for ensuring stakeholder
apply throughout the
commitment to feasible and mutually satisfactory system solutions.
entire life cycle of
an application, from Using the spiral model, software is developed in a series of evolutionary re-
concept development
leases. During early iterations, the release might be a model or prototype. During
to maintenance.
later iterations, increasingly more complete versions of the engineered system
are produced.
A spiral model is divided into a set of framework activities defined by the soft-
ware engineering team. For illustrative purposes, we use the generic framework
activities discussed earlier.4 Each of the framework activities represent one seg-
ment of the spiral path illustrated in Figure 4.5. As this evolutionary process be-
gins, the software team performs activities that are implied by a circuit around
the spiral in a clockwise direction, beginning at the center. Risk (Chapter 35) is
considered as each revolution is made. Anchor point milestones—a combination
of work products and conditions that are attained along the path of the spiral—
are noted for each evolutionary pass.
FIGURE 4.5
A typical Planning
spiral model estimation
scheduling
risk analysis
Communication
Modeling
analysis
design
Start
Deployment
Construction
delivery
code
feedback test
4 The spiral model discussed in this section is a variation on the model proposed by Boehm.
For further information on the original spiral model, see [Boe88]. More recent discussion of
Boehm’s spiral model can be found in [Boe98].
WebRef The first circuit around the spiral might result in the development of a prod-
Useful information uct specification; subsequent passes around the spiral might be used to develop
about the spiral model a prototype and then progressively more sophisticated versions of the software.
can be obtained at:
Each pass through the planning region results in adjustments to the project plan.
www.sei.cmu.
edu/publications/ Cost and schedule are adjusted based on feedback derived from the customer
documents/00. after delivery. In addition, the project manager adjusts the planned number of
reports/00sr008.
iterations required to complete the software.
html.
Unlike other process models that end when software is delivered, the spiral
model can be adapted to apply throughout the life of the computer software.
Therefore, the first circuit around the spiral might represent a “concept develop-
ment project” that starts at the core of the spiral and continues for multiple iter-
ations5 until concept development is complete. If the concept is to be developed
into an actual product, the process proceeds outward on the spiral and a “new
product development project” commences. The new product will evolve through
a number of iterations around the spiral. Later, a circuit around the spiral might
be used to represent a “product enhancement project.” In essence, the spiral,
when characterized in this way, remains operative until the software is retired.
If your management
There are times when the process is dormant, but whenever a change is initiated,
demands fixed-budget
development (gen- the process starts at the appropriate entry point (e.g., product enhancement).
erally a bad idea), The spiral model is a realistic approach to the development of large-scale
the spiral can be a systems and software. Because software evolves as the process progresses, the
problem. As each
developer and customer better understand and react to risks at each evolution-
circuit is completed,
project cost is revisited ary level. The spiral model uses prototyping as a risk reduction mechanism but,
and revised. more important, enables you to apply the prototyping approach at any stage in
the evolution of the product. It maintains the systematic stepwise approach sug-
gested by the classic life cycle but incorporates it into an iterative framework
that more realistically reflects the real world. The spiral model demands a direct
consideration of technical risks at all stages of the project and, if properly ap-
uote: plied, should reduce risks before they become problematic.
“I’m only this far But like other paradigms, the spiral model is not a panacea. It may be difficult
and only tomorrow to convince customers (particularly in contract situations) that the evolutionary
leads my way.” approach is controllable. It demands considerable risk assessment expertise
Dave and relies on this expertise for success. If a major risk is not uncovered and man-
Matthews Band aged, problems will undoubtedly occur.
5 The arrows pointing inward along the axis separating the deployment region from the commu-
nication region indicate a potential for local iteration along the same spiral path.
S AFE H OME
Selecting a Process Model, Part 2
The scene: Meeting room for the can have something on the market fast and then add
software engineering group at CPI functionality with each version, er, increment.
Corporation, a company that makes consumer products Lee: Wait a minute. Did you say that we regenerate
for home and commercial use. the plan with each tour around the spiral, Doug? That’s
The players: Lee Warren, engineering manager; not so great; we need one plan, one schedule, and
Doug Miller, software engineering manager; Vinod and we’ve got to stick to it.
Jamie, members of the software engineering team. Doug: That’s old-school thinking, Lee. Like the guys
The conversation: (Doug describes evolutionary said, we’ve got to keep it real. I submit that it’s better to
process options.) tweak the plan as we learn more and as changes are
Jamie: Now I see something I like. An incremental requested. It’s way more realistic. What’s the point of a
approach makes sense, and I really like the flow of that plan if it doesn’t reflect reality?
spiral model thing. That’s keepin’ it real. Lee (frowning): I suppose so, but . . . senior manage-
Vinod: I agree. We deliver an increment, learn from ment’s not going to like this . . . they want a fixed plan.
customer feedback, re-plan, and then deliver another Doug (smiling): Then you’ll have to reeducate them,
increment. It also fits into the nature of the product. We buddy.
defined for the spiral model is accomplished by invoking one or more of the fol-
Project plans must lowing software engineering actions: prototyping, analysis, and design.6
be viewed as living Figure 4.6 provides an example of the concurrent modeling approach. An
documents; progress activity—modeling—may be in any one of the states7 noted at any given time.
must be assessed often
Similarly, other activities, actions, or tasks (e.g., communication or construction)
and revised to take
changes into account. can be represented in an analogous manner. All software engineering activities
exist concurrently but reside in different states.
For example, early in a project the communication activity (not shown in the
figure) has completed its first iteration and exists in the awaiting changes state.
The concurrent model
is often more appro- The modeling activity (which existed in the none state while initial communica-
priate for product engi- tion was completed) now makes a transition into the under development state.
neering projects where If, however, the customer indicates that changes in requirements must be made,
different engineering the modeling activity moves from the under development state into the awaiting
teams are involved.
changes state.
Concurrent modeling defines a series of events that will trigger transitions
uote: from state to state for each of the software engineering activities, actions, or tasks.
“Every process in For example, during early stages of design (a major software engineering action
your organization that occurs during the modeling activity), an inconsistency in the requirements
has a customer,
and without a
customer a process
has no purpose.” 6 It should be noted that analysis and design are complex tasks that require substantial discus-
sion. Part 2 of this book considers these topics in detail.
V. Daniel Hunt 7 A state is some externally observable mode of behavior.
FIGURE 4.6
One element of
the concurrent Inactive
process model
Modeling activity
Awaiting
changes
Under review
Under
revision
Baselined
Done
model is uncovered. This generates the event analysis model correction, which
will trigger the requirements analysis action from the done state into the await-
ing changes state.
Concurrent modeling is applicable to all types of software development and
provides an accurate picture of the current state of a project. Rather than con-
fining software engineering activities, actions, and tasks to a sequence of events,
it defines a process network. Each activity, action, or task on the network exists
simultaneously with other activities, actions, or tasks. Events generated at one
point in the process network trigger transitions among the states associated with
each activity.
? What are
the potential
Indeed, a software process that focuses on flexibility, extensibility, and speed of
development over high quality does sound scary. And yet, this idea has been pro-
weaknesses of
evolutionary posed by a number of well-respected software engineering experts (e.g., [You95],
process models? [Bac97]).
The intent of evolutionary models is to develop high-quality software9 in an
iterative or incremental manner. However, it is possible to use an evolutionary
process to emphasize flexibility, extensibility, and speed of development. The
challenge for software teams and their managers is to establish a proper balance
between these critical project and product parameters and customer satisfac-
tion (the ultimate arbiter of software quality).
8 It is important to note, however, that being the first to reach a market is no guarantee of suc-
cess. In fact, many very successful software products have been second or even third to reach
the market (learning from the mistakes of their predecessors).
9 In this context software quality is defined quite broadly to encompass not only customer satis-
faction, but also a variety of technical criteria discussed in Part 2 of this book.
10 In some cases, these specialized process models might better be characterized as a collec-
tion of techniques or a “methodology” for accomplishing a specific software development goal.
However, they do imply a process.
11 Object-oriented concepts are discussed in Appendix 2 and are used throughout Part 2 of this
book. In this context, a class encompasses a set of data and the procedures that process the
data. A package of classes is a collection of related classes that work together to achieve some
end result.
When formal methods (Appendix 3) are used during development, they pro-
vide a mechanism for eliminating many of the problems that are difficult to over-
come using other software engineering paradigms. Ambiguity, incompleteness,
and inconsistency can be discovered and corrected more easily—not through ad
hoc review, but through the application of mathematical analysis. When formal
methods are used during design, they serve as a basis for program verification
and therefore enable you to discover and correct errors that might otherwise go
undetected.
Although not a mainstream approach, the formal methods model offers the
promise of defect-free software. Yet, concern about its applicability in a business
environment has been voiced:
WebRef Regardless of the software process that is chosen, the builders of complex soft-
A wide array of ware invariably implement a set of localized features, functions, and information
resources and infor- content. These localized software characteristics are modeled as components
mation on AOP can be
(e.g., object-oriented classes) and then constructed within the context of a sys-
found at: aosd.net.
tem architecture. As modern computer-based systems become more sophisti-
cated (and complex), certain concerns—customer required properties or areas
of technical interest—span the entire architecture. Some concerns are high-level
properties of a system (e.g., security, fault tolerance). Other concerns affect func-
tions (e.g., the application of business rules), while others are systemic (e.g., task
synchronization or memory management).
When concerns cut across multiple system functions, features, and informa-
AOSD defines tion, they are often referred to as crosscutting concerns. Aspectual requirements
“aspects” that express define those crosscutting concerns that have an impact across the software ar-
customer concerns that chitecture. Aspect-oriented software development (AOSD), often referred to as
cut across multiple
aspect-oriented programming (AOP) or aspect-oriented component engineering
system functions,
features, and (AOCE) [Gru02], is a relatively new software engineering paradigm that provides
information. a process and methodological approach for defining, specifying, designing, and
S OFTWARE T OOLS
Process Management (www.informatik.uni-bremen.de/uniform/
gdpa/home.htm), provides a wide array of
Objective: To assist in the definition,
process modeling and management functions.
execution, and management of prescriptive
process models. ALM Studio, developed by Kovair Corporation (http://
www.kovair.com/) encompasses a suite of tools
Mechanics: Process management tools allow a for process definition, requirements management,
software organization or team to define a complete issue resolution, project planning, and tracking.
software process model (framework activities, actions,
ProVision BPMx, developed by OpenText (http://
tasks, QA checkpoints, milestones, and work products).
bps.opentext.com/), is representative of many
In addition, the tools provide a road map as software
tools that assist in process definition and workflow
engineers do technical work and a template for
automation.
managers who must track and control the software
process. A worthwhile listing of many different tools associ-
ated with the software process can be found at www
Representative tools: 12
.computer.org/portal/web/swebok/html/ch10.
GDPA, a research process definition tool suite,
developed at Bremen University in Germany
Today, the trend in software is toward bigger, more complex systems. That is due in
part to the fact that computers become more powerful every year, leading users to
expect more from them. This trend has also been influenced by the expanding use of
12 Tools noted here do not represent an endorsement, but rather a sampling of tools in this cate-
gory. In most cases, tool names are trademarked by their respective developers.
the Internet for exchanging all kinds of information . . . Our appetite for ever-more
sophisticated software grows as we learn from one product release to the next how
the product could be improved. We want software that is better adapted to our needs,
but that, in turn, merely makes the software more complex. In short, we want more.
In some ways the Unified Process is an attempt to draw on the best features
and characteristics of traditional software process models, but characterize them
in a way that implements many of the best principles of agile software develop-
ment (Chapter 5). The Unified Process recognizes the importance of customer
communication and streamlined methods for describing the customer’s view of
a system (the use case).13 It emphasizes the important role of software architec-
ture and “helps the architect focus on the right goals, such as understandability,
reliance to future changes, and reuse” [Jac99]. It suggests a process flow that
is iterative and incremental, providing the evolutionary feel that is essential in
modern software development.
13 A use case (Chapter 8) is a text narrative or template that describes a system function or fea-
ture from the user’s point of view. A use case is written by the user and serves as a basis for the
creation of a more comprehensive analysis model.
14 The Unified Process is sometimes called the Rational Unified Process (RUP) after the Rational
Corporation (subsequently acquired by IBM), an early contributor to the development and re-
finement of the UP and a builder of complete environments (tools and technology) that support
the process.
FIGURE 4.7
Elaboration
The Unified
Process
Inception
ing
plann ling
mode
tion
unica uction
comm constr
t
ymen Construction
deplo
Release Transition
software increment
Production
is no exception. Figure 4.7 depicts the “phases” of the UP and relates them to
the generic activities that have been discussed in Chapter 1 and earlier in this
chapter.
The inception phase of the UP encompasses both customer communication
and planning activities. By collaborating with stakeholders, business require-
ments for the software are identified; a rough architecture for the system is pro-
UP phases are similar
in intent to the generic posed; and a plan for the iterative, incremental nature of the ensuing project is
framework activities developed. Fundamental business requirements are described through a set of
defined in this book. preliminary use cases (Chapter 8) that describe which features and functions
each major class of users desires. Architecture at this point is nothing more
than a tentative outline of major subsystems and the functions and features that
populate them. Later, the architecture will be refined and expanded into a set
of models that will represent different views of the system. Planning identifies
resources, assesses major risks, defines a schedule, and establishes a basis for
the phases that are to be applied as the software increment is developed.
The elaboration phase encompasses the communication and modeling activ-
ities of the generic process model (Figure 4.7). Elaboration refines and expands
the preliminary use cases that were developed as part of the inception phase
and expands the architectural representation to include five different views of
the software—the use case model, the analysis model, the design model, the im-
plementation model, and the deployment model. In some cases, elaboration cre-
ates an “executable architectural baseline” [Arl02] that represents a “first cut”
executable system.15 The architectural baseline demonstrates the viability of the
15 It is important to note that the architectural baseline is not a prototype in that it is not thrown
away. Rather, the baseline is fleshed out during the next UP phase.
architecture but does not provide all features and functions required to use the
system. In addition, the plan is carefully reviewed at the culmination of the elab-
oration phase to ensure that scope, risks, and delivery dates remain reasonable.
Modifications to the plan are often made at this time.
WebRef The construction phase of the UP is identical to the construction activity de-
An interesting dis- fined for the generic software process. Using the architectural model as input,
cussion of the UP in the construction phase develops or acquires the software components that will
the context of agile
make each use case operational for end users. To accomplish this, analysis and
development can be
found at www. design models that were started during the elaboration phase are completed to
ambysoft.com/ reflect the final version of the software increment. All necessary and required
unifiedprocess/
features and functions for the software increment (i.e., the release) are then im-
agileUP.html.
plemented in source code. As components are being implemented, unit tests16
are designed and executed for each. In addition, integration activities (compo-
nent assembly and integration testing) are conducted. Use cases are used to de-
rive a suite of acceptance tests that are executed prior to the initiation of the
next UP phase.
The transition phase of the UP encompasses the latter stages of the generic
construction activity and the first part of the generic deployment (delivery and
feedback) activity. Software is given to end users for beta testing, and user feed-
back reports both defects and necessary changes. In addition, the software team
creates the necessary support information (e.g., user manuals, troubleshooting
guides, installation procedures) that is required for the release. At the conclu-
sion of the transition phase, the software increment becomes a usable software
release.
The production phase of the UP coincides with the deployment activity of the
generic process. During this phase, the ongoing use of the software is monitored,
support for the operating environment (infrastructure) is provided, and defect
reports and requests for changes are submitted and evaluated.
It is likely that at the same time the construction, transition, and production
phases are being conducted, work may have already begun on the next software
increment. This means that the five UP phases do not occur in a sequence, but
rather with staggered concurrency.
A software engineering workflow is distributed across all UP phases. In the
context of UP, a workflow is analogous to a task set (described in Chapter 3). That
is, a workflow identifies the tasks required to accomplish an important software
engineering action and the work products that are produced as a consequence
of successfully completing the tasks. It should be noted that not every task iden-
tified for a UP workflow is conducted for every software project. The team adapts
the process (actions, tasks, subtasks, and work products) to meet its needs.
WebRef Every developer uses some process to build computer software. The process
A wide array of may be haphazard or ad hoc; may change on a daily basis; may not be efficient,
resources for PSP can effective, or even successful; but a “process” does exist. Watts Humphrey [Hum05]
be found at
suggests that in order to change an ineffective personal process, an individual
http://www.sei
.cmu.edu/tsp/ must move through four phases, each requiring training and careful instrumen-
tools/academic/. tation. The Personal Software Process (PSP) emphasizes personal measurement
of both the work product that is produced and the resultant quality of the work
product. In addition PSP makes the practitioner responsible for project planning
(e.g., estimating and scheduling) and empowers the practitioner to control the
quality of all software work products that are developed. The PSP model defines
five framework activities:
Planning. This activity isolates requirements and develops both size and
resource estimates. In addition, a defect estimate (the number of defects
projected for the work) is made. All metrics are recorded on worksheets
or templates. Finally, development tasks are identified and a project
schedule is created.
High-level design. External specifications for each component to be
? What
framework constructed are developed and a component design is created. Proto-
activities are used types are built when uncertainty exists. All issues are recorded and
during PSP? tracked.
17 It’s worth noting the proponents of agile software development (Chapter 5) also argue that the
process should remain close to the team. They propose an alternative method for achieving this.
WebRef Because many industry-grade software projects are addressed by a team of prac-
Information on building titioners, Watts Humphrey extended the lessons learned from the introduction
high-performance of PSP and proposed a Team Software Process (TSP). The goal of TSP is to build
teams using TSP and
a “self-directed” project team that organizes itself to produce high-quality soft-
PSP can be obtained
at www.sei.cmu ware. Humphrey [Hum98] defines the following objectives for TSP:
.edu/tsp/.
• Build self-directed teams that plan and track their work, establish goals,
and own their processes and plans. These can be pure software teams or
integrated product teams (IPTs) of 3 to about 20 engineers.
• Show managers how to coach and motivate their teams and how to help
them sustain peak performance.
4. 5 PROCESS TECHNOLOGY
One or more of the process models discussed in the preceding sections must be
adapted for use by a software team. To accomplish this, process technology tools
have been developed to help software organizations analyze their current process,
organize work tasks, control and monitor progress, and manage technical quality.
18 The Capability Maturity Model (CMM), a measure of the effectiveness of a software process, is
discussed in Chapter 37.
19 In Chapter 5 we discuss the importance of “self-organizing” teams as a key element in agile
software development.
S OFTWARE T OOLS
Process Modeling Tools detailed guidance on the content or description of each
process element, and then manage the process as it is
Objective: If an organization works to
conducted. In some cases, the process technology tools
improve a business (or software) process,
incorporate standard project management tasks such as
it must first understand it. Process modeling tools (also
estimating, scheduling, tracking, and control.
called process technology or process management tools)
are used to represent the key elements of a process so Representative tools:20
that it can be better understood. Such tools can also Igrafx Process Tools—tools that enable a team to map,
provide links to process descriptions that help those measure, and model the software process (http://
involved in the process to understand the actions and www.igrafx.com/)
work tasks that are required to perform it. Process Adeptia BPM Server—designed to manage, automate,
modeling tools provide links to other tools that provide and optimize business processes (www.adeptia
support to defined process activities. .com)
Mechanics: Tools in this category allow a team ALM Studio Suite—a collection of tools with a heavy
to define the elements of a unique process model emphasis on the management of communication and
(actions, tasks, work products, QA points), provide modeling activities (http://www.kovair.com/)
About every ten years give or take five, the software community redefines “the
problem” by shifting its focus from product issues to process issues. Thus, we have
20 Tools noted here do not represent an endorsement, but rather a sampling of tools in this cate-
gory. In most cases, tool names are trademarked by their respective developers.
4.7 SUMMARY
Prescriptive process models have been applied for many years in an effort to
bring order and structure to software development. Each of these models sug-
gests a somewhat different process flow, but all perform the same set of generic
framework activities: communication, planning, modeling, construction, and
deployment.
Sequential process models, such as the waterfall and V-models, are the oldest
software engineering paradigms. They suggest a linear process flow that is often
inconsistent with modern realities (e.g., continuous change, evolving systems,
tight time lines) in the software world. They do, however, have applicability in
situations where requirements are well defined and stable.
Incremental process models are iterative in nature and produce working ver-
sions of software quite rapidly. Evolutionary process models recognize the itera-
tive, incremental nature of most software engineering projects and are designed
to accommodate change. Evolutionary models, such as prototyping and the spiral
model, produce incremental work products (or working versions of the software)
quickly. These models can be adopted to apply across all software engineering
activities—from concept development to long-term system maintenance.
The concurrent process model allows a software team to represent iterative
and concurrent elements of any process model. Specialized models include the
component-based model that emphasizes component reuse and assembly; the
formal methods model that encourages a mathematically based approach to
software development and verification; and the aspect-oriented model that ac-
commodates crosscutting concerns spanning the entire system architecture. The
Unified Process is a “use case driven, architecture-centric, iterative and incre-
mental” software process designed as a framework for UML methods and tools.
Personal and team models for the software process have been proposed. Both
emphasize measurement, planning, and self-direction as key ingredients for a
successful software process.
4.2. Provide three examples of software projects that would be amenable to the prototyping
model. Be specific.
4.3. What process adaptations are required if the prototype will evolve into a delivery sys-
tem or product?
4.4. Provide three examples of software projects that would be amenable to the incremen-
tal model. Be specific.
4.5. As you move outward along the spiral process flow, what can you say about the software
that is being developed or maintained?
5 A GILE
D EVELOPMENT
KEY n 2001, Kent Beck and 16 other noted software developers, writers, and con-
CONCEPTS
acceptance tests . . . 75
agile alliance. . . . . . 70
agile process. . . . . . 69
I
sultants [Bec01] (referred to as the “Agile Alliance”) signed the “Manifesto
for Agile Software Development.” It stated:
QUICK What is it? Agile software engi- conventional software engineering for cer-
LOOK neering combines a philosophy and tain classes of software and certain types of
a set of development guidelines. software projects. It has been demonstrated to
The philosophy encourages cus- deliver successful systems quickly.
tomer satisfaction and early incremental deliv- What are the steps? Agile development might
ery of software; small, highly motivated project best be termed “software engineering lite.” The
teams; informal methods; minimal software basic framework activities—communication,
engineering work products; and overall de- planning, modeling, construction, and
velopment simplicity. The development guide- deployment—remain. But they morph into a
lines stress delivery over analysis and design minimal task set that pushes the project team
(although these activities are not discouraged), toward construction and delivery (some would
and active and continuous communication argue that this is done at the expense of prob-
between developers and customers. lem analysis and solution design).
Who does it? Software engineers and other What is the work product? Both the cus-
project stakeholders (managers, customers, tomer and the software engineer have the
end users) work together on an agile team—a same view—the only really important work
team that is self-organizing and in control of its product is an operational “software increment”
own destiny. An agile team fosters communi- that is delivered to the customer on the appro-
cation and collaboration among all who serve priate commitment date.
on it. How do I ensure that I’ve done it right? If
Why is it important? The modern business the agile team agrees that the process works,
environment that spawns computer-based and the team produces deliverable software
systems and software products is fast-paced increments that satisfy the customer, you’ve
and ever-changing. Agile software engineer- done it right.
ing represents a reasonable alternative to
66
5.1 W H AT I S A G I L I T Y ?
Just what is agility in the context of software engineering work? Ivar Jacobson
[Jac02a] provides a useful discussion:
Agility has become today’s buzzword when describing a modern software process.
Everyone is agile. An agile team is a nimble team able to appropriately respond to
changes. Change is what software development is very much about. Changes in the
software being built, changes to the team members, changes because of new technol-
ogy, changes of all kinds that may have an impact on the product they build or the
project that creates the product. Support for changes should be built-in everything
we do in software, something we embrace because it is the heart and soul of software.
An agile team recognizes that software is developed by individuals working in teams
and that the skills of these people, their ability to collaborate is at the core for the
success of the project.
In Jacobson’s view, the pervasiveness of change is the primary driver for agil-
ity. Software engineers must be quick on their feet if they are to accommodate
the rapid changes that Jacobson describes.
But agility is more than an effective response to change. It also encompasses
the philosophy espoused in the manifesto noted at the beginning of this chapter.
Don’t make the It encourages team structures and attitudes that make communication (among
mistake of assuming team members, between technologists and business people, between software
that agility gives you
engineers and their managers) more facile. It emphasizes rapid delivery of
license to hack out
solutions. A process is operational software and deemphasizes the importance of intermediate work
required and discipline products (not always a good thing); it adopts the customer as a part of the devel-
is essential. opment team and works to eliminate the “us and them” attitude that continues
to pervade many software projects; it recognizes that planning in an uncertain
world has its limits and that a project plan must be flexible.
Agility can be applied to any software process. However, to accomplish this, it
is essential that the process be designed in a way that allows the project team to
adapt tasks and to streamline them, conduct planning in a way that understands
the fluidity of an agile development approach, eliminate all but the most essen-
tial work products and keep them lean, and emphasize an incremental delivery
strategy that gets working software to the customer as rapidly as feasible for the
product type and operational environment.
FIGURE 5.1
Change costs
as a function
of time in
development
Development cost
Cost of change
using conventional
software processes
Cost of change
using agile processes
specification can be edited. The costs of doing this work are minimal, and the
uote:
time required will not adversely affect the outcome of the project. But what if we
“Agility is dynamic, fast-forward a number of months? The team is in the middle of validation testing
content specific, (something that occurs relatively late in the project), and an important stake-
aggressively
holder is requesting a major functional change. The change requires a modifi-
change embracing,
and growth cation to the architectural design of the software, the design and construction
oriented.” of three new components, modifications to another five components, the design
Steven Goldman of new tests, and so on. Costs escalate quickly, and the time and cost required
et al. to ensure that the change is made without unintended side effects is nontrivial.
Proponents of agility (e.g., [Bec00], [Amb04]) argue that a well-designed agile
process “flattens” the cost of change curve (Figure 5.1, shaded, solid curve), allowing
a software team to accommodate changes late in a software project without dra-
matic cost and time impact. You’ve already learned that the agile process encom-
An agile process
reduces the cost passes incremental delivery. When incremental delivery is coupled with other agile
of change because practices such as continuous unit testing and pair programming (discussed later
software is released in in this chapter), the cost of making a change is attenuated. Although debate about
increments and change
the degree to which the cost curve flattens is ongoing, there is evidence [Coc01a] to
can be better controlled
within an increment. suggest that a significant reduction in the cost of change can be achieved.
5. 3 W H AT I S AN AGILE PROCESS?
Any agile software process is characterized in a manner that addresses a num-
ber of key assumptions [Fow02] about the majority of software projects:
WebRef 2. For many types of software, design and construction are interleaved. That
A comprehensive is, both activities should be performed in tandem so that design models
collection of articles are proven as they are created. It is difficult to predict how much design is
on the agile process
necessary before construction is used to prove the design.
can be found at
http://www 3. Analysis, design, construction, and testing are not as predictable (from a
.agilemodeling
planning point of view) as we might like.
.com/.
Given these three assumptions, an important question arises: How do we cre-
ate a process that can manage unpredictability? The answer, as we have already
noted, lies in process adaptability (to rapidly changing project and technical con-
ditions). An agile process, therefore, must be adaptable.
But continual adaptation without forward progress accomplishes little.
Therefore, an agile software process must adapt incrementally. To accom-
plish incremental adaptation, an agile team requires customer feedback
(so that the appropriate adaptations can be made). An effective catalyst for
customer feedback is an operational prototype or a portion of an operational
system. Hence, an incremental development strategy should be instituted.
Software increments (executable prototypes or portions of an operational
system) must be delivered in short time periods so that adaptation keeps
pace with change (unpredictability). This iterative approach enables the cus-
tomer to evaluate the software increment regularly, provide necessary feed-
back to the software team, and influence the process adaptations that are
made to accommodate the feedback.
Although agile 1. Our highest priority is to satisfy the customer through early and continu-
processes embrace ous delivery of valuable software.
change, it is still
2. Welcome changing requirements, even late in development. Agile pro-
important to examine
the reasons for change. cesses harness change for the customer's competitive advantage.
3. Deliver working software frequently, from a couple of weeks to a couple of
months, with a preference to the shorter timescale.
4. Business people and developers must work together daily throughout the
Working software project.
is important, but
5. Build projects around motivated individuals. Give them the environment
don’t forget that it
must also exhibit and support they need, and trust them to get the job done.
a variety of quality 6. The most efficient and effective method of conveying information to and
attributes including
within a development team is face-to-face conversation.
reliability, usability, and
maintainability. 7. Working software is the primary measure of progress.
Not every agile process model applies these 12 principles with equal weight,
and some models choose to ignore (or at least downplay) the importance of one
or more of the principles. However, the principles define an agile spirit that is
maintained in each of the process models presented in this chapter.
If you have further interest, see [Hig01], [Hig02a], and [DeM02] for an enter-
taining summary of other important technical and political issues.
Planning. The planning activity (also called the planning game) begins with
listening—a requirements gathering activity that enables the technical members
FIGURE 5.2
The Extreme simple design spike solutions
Programming CRC cards prototypes
process user stories
values
acceptance test criteria
iteration plan n
desig
ing
plann g
codin
refactoring
pair programming
test
Release
software increment unit test
project velocity computed continuous integration
acceptance testing
WebRef of the XP team to understand the business context for the software and to get a
A worthwhile XP broad feel for required output and major features and functionality. Listening
“planning game” leads to the creation of a set of “stories” (also called user stories) that describe
can be found at:
required output, features, and functionality for software to be built. Each story
http://csis.pace.
edu/~bergin/xp/ (similar to use cases described in Chapter 8) is written by the customer and is
planninggame placed on an index card. The customer assigns a value (i.e., a priority) to the
.html.
story based on the overall business value of the feature or function.2 Members of
the XP team then assess each story and assign a cost—measured in development
weeks—to it. If the story is estimated to require more than three development
weeks, the customer is asked to split the story into smaller stories and the as-
signment of value and cost occurs again. It is important to note that new stories
can be written at any time.
Customers and developers work together to decide how to group stories into
the next release (the next software increment) to be developed by the XP team.
Once a basic commitment (agreement on stories to be included, delivery date,
and other project matters) is made for a release, the XP team orders the stories
that will be developed in one of three ways: (1) all stories will be implemented
immediately (within a few weeks), (2) the stories with highest value will be moved
up in the schedule and implemented first, or (3) the riskiest stories will be moved
up in the schedule and implemented first.
After the first project release (also called a software increment) has been de-
livered, the XP team computes project velocity. Stated simply, project velocity is
the number of customer stories implemented during the first release. Project
Project velocity is a
velocity can then be used to (1) help estimate delivery dates and schedule for
subtle measure of
team productivity. subsequent releases and (2) determine whether an overcommitment has been
made for all stories across the entire development project. If an overcommitment
occurs, the content of releases is modified or end delivery dates are changed.
As development work proceeds, the customer can add stories, change the
value of an existing story, split stories, or eliminate them. The XP team then re-
XP deemphasizes the considers all remaining releases and modifies its plans accordingly.
importance of design.
Not everyone agrees. Design. XP design rigorously follows the KIS (keep it simple) principle. A sim-
In fact, there are times ple design is always preferred over a more complex representation. In addition,
when design should be the design provides implementation guidance for a story as it is written—nothing
emphasized.
less, nothing more. The design of extra functionality (because the developer as-
sumes it will be required later) is discouraged.3
XP encourages the use of CRC cards (Chapter 10) as an effective mech-
anism for thinking about the software in an object-oriented context. CRC
2 The value of a story may also be dependent on the presence of another story.
3 These design guidelines should be followed in every software engineering method, although
there are times when sophisticated design notation and terminology may get in the way of
simplicity.
Because XP design uses virtually no notation and produces few, if any, work
products other than CRC cards and spike solutions, design is viewed as a tran-
sient artifact that can and should be continually modified as construction pro-
ceeds. The intent of refactoring is to control these modifications by suggesting
small design changes that “can radically improve the design” [Fow00]. It should
be noted, however, that the effort required for refactoring can grow dramatically
as the size of an application grows.
A central notion in XP is that design occurs both before and after coding com-
mences. Refactoring means that design occurs continuously as the system is con-
structed. In fact, the construction activity itself will provide the XP team with
guidance on how to improve the design.
WebRef
Coding. After stories are developed and preliminary design work is done, the
Useful information on
XP can be obtained at team does not move to code, but rather develops a series of unit tests that will
www.xprogram- exercise each of the stories that is to be included in the current release (software
ming.com. increment).5 Once the unit test6 has been created, the developer is better able to
focus on what must be implemented to pass the test. Nothing extraneous is added
(KIS). Once the code is complete, it can be unit-tested immediately, thereby pro-
viding instantaneous feedback to the developers.
A key concept during the coding activity (and one of the most talked-about as-
? What
pair
is
pects of XP) is pair programming. XP recommends that two people work together
programming? at one computer workstation to create code for a story. This provides a mechanism
for real-time problem solving (two heads are often better than one) and real-time
quality assurance (the code is reviewed as it is created). It also keeps the develop-
ers focused on the problem at hand. In practice, each person takes on a slightly
different role. For example, one person might think about the coding details of a
particular portion of the design while the other ensures that coding standards (a
required part of XP) are being followed or that the code for the story will satisfy the
unit test that has been developed to validate the code against the story.7
Many software teams As pair programmers complete their work, the code they develop is inte-
are populated by grated with the work of others. In some cases this is performed on a daily basis
individualists. You’ll by an integration team. In other cases, the pair programmers have integration
have to work to
responsibility. This “continuous integration” strategy helps to avoid compatibility
change that culture if
pair programming is to and interfacing problems and provides a “smoke testing” environment (Chap-
work effectively. ter 22) that helps to uncover errors early.
Testing. The unit tests that are created should be implemented using a frame-
? How are unit
tests used
work that enables them to be automated (hence, they can be executed easily and
in XP? repeatedly). This encourages a regression testing strategy (Chapter 22) when-
ever code is modified (which is often, given the XP refactoring philosophy).
As the individual unit tests are organized into a “universal testing suite”
[Wel99], integration and validation testing of the system can occur on a daily
basis. This provides the XP team with a continual indication of progress and also
can raise warning flags early if things go awry. Wells [Wel99] states: “Fixing small
problems every few hours takes less time than fixing huge problems just before
the deadline.”
XP acceptance tests, also called customer tests, are specified by the customer
and focus on overall system features and functionality that are visible and re-
XP acceptance tests
are derived from user viewable by the customer. Acceptance tests are derived from user stories that
stories. have been implemented as part of a software release.
5.4.2 Industrial XP
Joshua Kerievsky [Ker05] describes Industrial Extreme Programming (IXP) in
? What new
practices are the following manner: “IXP is an organic evolution of XP. It is imbued with XP’s
appended to XP to minimalist, customer-centric, test-driven spirit. IXP differs most from the origi-
create IXP? nal XP in its greater inclusion of management, its expanded role for customers,
and its upgraded technical practices.” IXP incorporates six new practices that
7 Pair programming has become so widespread throughout the software community that
The Wall Street Journal [Wal12] ran a front-page story about the subject.
are designed to help ensure that an XP project works successfully for significant
projects within a large organization:
In addition to the six new practices discussed, IXP modifies a number of exist-
ing XP practices and redefines certain roles and responsibilities to make them
more amenable to significant projects for large organizations. For further discus-
sion of IXP, visit http://industrialxp.org.
S AFE H OME
Considering Agile Software Development
The scene: Doug Miller’s office. Doug: Sure Jamie, what’s up?
The Players: Doug Miller, software engineering Jamie: We’ve been thinking about our process discus-
manager; Jamie Lazar, software team member; Vinod sion yesterday . . . you know, what process we’re going
Raman, software team member. to choose for this new SafeHome project.
The conversation: Doug: And?
(A knock on the door, Jamie and Vinod enter Doug’s Vinod: I was talking to a friend at another company,
office.) and he was telling me about Extreme Programming. It’s
Jamie: Doug, you got a minute? an agile process model . . . heard of it?
Doug: Yeah, some good, some bad. Vinod: Doug, before you said “some good, some
Jamie: Well, it sounds pretty good to us. Lets you bad.” What was the bad?
develop software really fast, uses something called pair Doug: The thing I don’t like is the way XP downplays
programming to do real-time quality checks . . . it’s analysis and design . . . sort of says that writing code is
pretty cool, I think. where the action is . . .
Doug: It does have a lot of really good ideas. I like the (The team members look at one another and smile.)
pair-programming concept, for instance, and the idea Doug: So you agree with the XP approach?
that stakeholders should be part of the team.
Jamie (speaking for both): Writing code is what
Jamie: Huh? You mean that marketing will work on we do, Boss!
the project team with us?
Doug (laughing): True, but I’d like to see you spend
Doug (nodding): They’re a stakeholder, aren’t they? a little less time coding and then recoding and a little
Jamie: Jeez . . . they’ll be requesting changes every more time analyzing what has to be done and design-
five minutes. ing a solution that works.
Vinod: Not necessarily. My friend said that there are Vinod: Maybe we can have it both ways, agility with
ways to “embrace” changes during an XP project. a little discipline.
Doug: So you guys think we should use XP? Doug: I think we can, Vinod. In fact, I’m sure of it.
Jamie: It’s definitely worth considering.
Doug: I agree. And even if we choose an incremental
model as our approach, there’s no reason why we can’t
incorporate much of what XP has to offer.
Stephen been proposed and are in use across the industry. In this section, we present
Hawrysh and a brief overview of four common agile methods: Scrum, DSSD, Agile Modeling
Jim Ruprecht (AM), and Agile Unified Process (AUP).
8 This is not a bad thing. Before one or more models or methods are accepted as a de facto
standard, all must contend for the hearts and minds of software engineers. The “winners”
evolve into best practice, while the “losers” either disappear or merge with the winning models.
every 24
hours
New functionality
is demonstrated
at end of sprint
Product Backlog:
Prioritized product features desired by the customer
5.5.1 Scrum
WebRef Scrum (the name is derived from an activity that occurs during a rugby match)9
Useful Scrum informa- is an agile software development method that was conceived by Jeff Sutherland
tion and resources can and his development team in the early 1990s. In recent years, further devel-
be found at www.
controlchaos.com.
opment on the Scrum methods has been performed by Schwaber and Beedle
[Sch01b].
Scrum principles are consistent with the agile manifesto and are used to guide
development activities within a process that incorporates the following frame-
work activities: requirements, analysis, design, evolution, and delivery. Within
each framework activity, work tasks occur within a process pattern (discussed in
the following paragraph) called a sprint. The work conducted within a sprint (the
number of sprints required for each framework activity will vary depending on
product complexity and size) is adapted to the problem at hand and is defined
and often modified in real time by the Scrum team. The overall flow of the Scrum
process is illustrated in Figure 5.3.
9 A group of players forms around the ball and the teammates work together (sometimes
violently!) to move the ball downfield.
Scrum emphasizes the use of a set of software process patterns [Noy02] that
have proven effective for projects with tight timelines, changing requirements,
and business criticality. Each of these process patterns defines a set of develop-
ment activities:
10 A time-box is a project management term (see Part 4 of this book) that indicates a period of
time that has been allocated to accomplish some task.
required, the degree of formalism suggested, the sheer size of the models for
large projects, and the difficulty in maintaining the model(s) as changes occur.
Is there an agile approach to software engineering modeling that might provide
some relief?
At “The Official Agile Modeling Site,” Scott Ambler [Amb02a] describes agile
modeling (AM) in the following manner:
Agile Modeling (AM) is a practice-based methodology for effective modeling and doc-
umentation of software-based systems. Simply put, Agile Modeling (AM) is a collec-
tion of values, principles, and practices for modeling software that can be applied
on a software development project in an effective and light-weight manner. Agile
uote:
models are more effective than traditional models because they are just barely good,
“I was in the they don’t have to be perfect.
drugstore the other
day trying to get a Agile modeling adopts all of the values that are consistent with the agile man-
cold medication . . . ifesto. The agile modeling philosophy recognizes that an agile team must have
Not easy. There’s the courage to make decisions that may cause it to reject a design and refactor.
an entire wall of
The team must also have the humility to recognize that technologists do not have
products you need.
You stand there all the answers and that business experts and other stakeholders should be re-
going, Well, this spected and embraced.
one is quick acting Although AM suggests a wide array of “core” and “supplementary” modeling
but this is long
principles, those that make AM unique are [Amb02a]:
lasting ... Which is
more important, Model with a purpose. A developer who uses AM should have a specific goal
the present or the
(e.g., to communicate information to the customer or to help better understand
future?”
some aspect of the software) in mind before creating the model. Once the goal
Jerry Seinfeld for the model is identified, the type of notation to be used and level of detail
required will be more obvious.
Use multiple models. There are many different models and notations that
can be used to describe software. Only a small subset is essential for most proj-
ects. AM suggests that to provide needed insight, each model should present a
different aspect of the system and only those models that provide value to their
intended audience should be used.
Travel light. As software engineering work proceeds, keep only those models
that will provide long-term value and jettison the rest. Every work product that
“Traveling light” is an is kept must be maintained as changes occur. This represents work that slows
appropriate philosophy the team down. Ambler [Amb02a] notes that “Every time you decide to keep a
for all software engi-
model you trade off agility for the convenience of having that information avail-
neering work. Build
only those models that able to your team in an abstract manner (hence potentially enhancing commu-
provide value . . . no nication within your team as well as with project stakeholders).”
more, no less. Content is more important than representation. Modeling should impart in-
formation to its intended audience. A syntactically perfect model that imparts
little useful content is not as valuable as a model with flawed notation that
nevertheless provides valuable content for its audience.
Know the models and the tools you use to create them. Understand the
strengths and weaknesses of each model and the tools that are used to create it.
Adapt locally. The modeling approach should be adapted to the needs of the
agile team.
Although the AUP has historical and technical connections to the Unified
Modeling Language, it is important to note that UML modeling can be used in
conjunction with any of the agile process models described in this chapter.
S OFTWARE T OOLS
Agile Development support the agile approach. The tools noted here
Objective: The objective of agile have characteristics that make them particularly
development tools is to assist in one or more useful for agile projects.
aspects of agile development with an emphasis on OnTime, developed by Axosoft (www.axosoft.com),
facilitating the rapid generation of operational software. provides agile process management support for
These tools can also be used when prescriptive process various technical activities within the process.
models (Chapter 4) are applied. Ideogramic UML, developed by Ideogramic (http://
Mechanics: Tool mechanics vary. In general, agile tool ideogramic-uml.software.informer.com/) is a
sets encompass automated support for project planning, UML tool set specifically developed for use within an
use case development and requirements gathering, rapid agile process.
design, code generation, and testing. Together Tool Set, distributed by Borland (www.
Representative tools:13 borland.com), provides a tools suite that supports
Note: Because agile development is a hot topic, most many technical activities within XP and other agile
software tools vendors purport to sell tools that processes.
13 Tools noted here do not represent an endorsement, but rather a sampling of tools in this cate-
gory. In most cases, tool names are trademarked by their respective developers.