Object Oriented Software Engineering 3rd Edition 614 817
Object Oriented Software Engineering 3rd Edition 614 817
From a dynamic point of view, a project can be in one of several phases. which we have
already mentioned in Chapter 3. We refine this model by adding another state, Conception (see
Figure 14-1).
GoAhead ScopeDefined
Conception Start
do/FormulateIdea do/Infrastructure Setup
do/Cost-BenefitAnalysis Definition do/Skill Identification
do/FeasibilityStudy do/Team Formation
do/Review do/Problem Statement do/Project Kickoff
do/Software Architecture
do/Software Plan
Termination
do/Client Acceptance Steady State Infrastructure
do/Delivery New Technology Setup Completed
do/Post Mortem New Need do/Develop System &&
do/Controlling Teams Assembled
do/Risk Management
System Done do/Replanning
Project conception. During this phase, also called concept phase, the idea for the project is
born. In a software project this is usually a new requirement triggered by the need of an existing
a market or a new technology. The concept phase is handled in many different ways. For a small
project it may consist of an informal discussion between interested people and a go-ahead
decision based on a verbal agreement.
In a larger project, the idea is investigated thoroughly, usually with a cost–benefit analysis
and a technical feasibility study. The cost–benefit analysis is a comparative assessment of all
costs that will be incurred to perform the project and of all benefits anticipated from the project’s
outcome. Some benefits can be reduced operating costs or increased revenue. Other benefits
might include improved morale, reduced turnover, increased productivity, or fewer absences.
580 Chapter 14 • Project Management
The technical feasibility study investigates if the outcome is technically feasible. A typical issue
to be addressed is whether the required innovation can be made available in time during the
duration of the project. Proceeding to the next phase usually requires a formal review and a
formal go-ahead decision.
Project definition. During this phase, the project manager, a client, and the software architect
are involved. The project manager can be one of the interested people from the concept phase or,
as it is quite common, brought in from the outside at the beginning of this phase. The project
definition phase includes the following activities:
• Problem definition. During this activity, the client and the project manager define the
scope of the system in terms of functionality, constraints, and deliverables. The client
and the project manager also agree on acceptance criteria and target dates. The
resulting document, called the problem statement, serves as the starting point of the
Requirements Analysis Document (RAD), which is developed during the steady state
phase.
• Initial Software Project Management Plan (SPMP). During this activity, the project
manager provides an overview of the project, a description of the results to be
produced, a work breakdown structure, roles and responsibilities, a project schedule,
budgets for required resources, and a description of how risks will be identified and
managed.
• Initial software architecture. This activity is performed in parallel to the development
of the SPMP. The focus is on the software architecture, in particular on the
decomposition of the system into subsystems. The software architecture is crucial for
managing the project, because it also serves as the basis for the initial team
organization. It therefore requires a close interaction between the software architect and
the project manager. The software architect revises the subsystem decomposition
during the steady state phase. The initial software architecture document will expand
into the System Design Document (SDD).
• Project Agreement definition. The client and the project manager formally agree on
the scope of the system and the delivery date as baselined in the Project Agreement
document.
Project start. During this phase, the project manager sets up the project infrastructure, hires
participants, organizes them in teams, and kicks off the project. Project start includes the
following activities:
Project steady state. During project definition and project start, most decisions are made by
the project manager. During the steady state, team leaders are taking over some management
functions. In particular, they are responsible for tracking the status of their team and identifying
problems in team meetings. Team leaders report the status of their team to the project manager,
who then evaluates the status of the complete project. Team leaders respond to deviations from
the plan by reallocating tasks to developers or obtaining additional resources from the project
manager. The project manager is responsible for the interaction with the client, obtaining formal
agreements and renegotiating resources and deadlines. Steady state project management
includes the following activities:
• Project scope definition. Once the analysis model is stable, the client and the project
manager formally agree on the functional and nonfunctional requirements of the
system, which might lead to an update in the Project Agreement document.
• Controlling. Throughout the remaining project phases, team leaders and the project
manager monitor status in a weekly meeting and compare it with the planned schedule
from the SPMP. The team leaders are responsible for collecting status information
through meetings, reviews, problem reports, and work product completion. They are
also responsible to report status to the project manager.
1. Depending on the size and complexity of the project, financial and personal management systems are set up as well.
These systems are not covered in this book.
582 Chapter 14 • Project Management
Project termination. During this phase, the project outcome is delivered to the customer and
the project history is collected. Most of the developers’ involvement with the project ends just
before this phase when they clean up models and code and complete the documentation. A
handful of key developers, the technical writers, and the team leaders are involved with
wrapping up the system for installation and acceptance and collecting the project history for
future use.
• Delivery. This activity consists of two subactivities, the client acceptance test and
installation, usually in that order.
• Client acceptance test. The software system is evaluated with the client according
to the acceptance criteria set forth in the Project Agreement. Functional and
nonfunctional requirements are demonstrated and tested using scenarios defined in
the Project Agreement. The client formally accepts the product at this stage.
• Installation. The system is deployed in the target environment and documents are
delivered. The installation may include user training and a roll-out phase, during
which data is migrated from the previous system to the new system.
• Postmortem. The project manager and the team leaders collect the history of the
project to allow the organization to learn from it. By capturing the history of major and
minor failures and by analyzing their causes, an organization can avoid repeating
mistakes and improve its practice.
Each of the states allows significant parallelism of the project management activities. This
is modeled in the activity diagram in Figure 14-2. In the following we describe these activities in
more detail. In the next section we describe project management models used for the various
project phases, in particular for the work to be performed, schedules, and team-based
organizations. We also describe how to document these models in a software project
management plan.
An Overview of Project Management 583
Conception
Definition
Project agreement
Start
Project kickoff
Steady state
Termination
Assigned
Task name Description Task input Task output
role
Related tasks are grouped into activities. Activities are larger units of work. Their duration
is often the same as a development phase, such as requirements analysis or system design. When
activities span the whole duration of a project, they are called project functions. Examples of
project functions are configuration management and project management itself (Figure 14-3).
Work
*
Task Activity
«invariant»
Project Function duration = project.duration
Figure 14-3 Tasks, Activities, and Project Functions (UML class diagram).
A manager assigns tasks, activities, and project functions to participants or a team, who carry it
out, while the manager monitors the progress and completion of the work. In a small project this
can be done informally, often with a shake of hands. In larger projects, this must be spelled out
more explicitly in form of a work package (Figure 14-4). A work package describes the work
products to be produced, the resources needed to perform the work, the expected duration,
dependencies on inputs, which are work products produced by other tasks as well as
dependencies on other tasks. It also specifies the acceptance criteria and the name of the
responsible individual or organizational unit.
Work Package
describes
* * produced-by
Outcome Work
*
Figure 14-4 Relationship between Outcome, Work, and Work Packages (UML class diagram).
586 Chapter 14 • Project Management
Work packages are important management artifacts, because we assign them to participants
to do the work. We can specify a work package right after the tasks have been identified. An
example of a small work package is an action item, which contains only the name of the
participant, the description of the task to be performed, and the time by which it must be
completed. Examples of larger work packages are descriptions for creating an object model, a class
diagram, source code, a document section, or a document. For example, each section of the
requirements analysis document can correspond to a work package specifying who has to write the
section and by when.
Any work product to be delivered to the customer is called a deliverable. The software
system and the accompanying documentation, such as the user manual, are deliverables. All
other types of work products consumed only by other project participants are called internal
work products. For example, action items are internal work products.
Task Activity
Figure 14-5 The Work Breakdown Structure is the aggregation of all the work to be performed in a
project (UML class diagram).
Project Management Concepts 587
Build Foundation
Build Roof
Install Electric
Figure 14-6 Partial work breakdown structure for a house (UML instance diagram).
Database subsystem
req. elicitation
Database subsystem
design
Database subsystem
implementation
Database subsystem
test plan
Database subsystem
inspection
Database subsystem
test
Figure 14-7 An example of a task model with temporal dependencies for the database subsystem example
of Table 14-1 (UML activity diagram).
588 Chapter 14 • Project Management
Tasks have a duration, which corresponds to the actual time needed to complete the task
given the number of required participants. Durations are estimated by the project manager
before the project starts. Once dependencies among tasks and task durations are known, the
project manager can compute the shortest possible time in which the project can be completed.
This is simply the longest path in the task model, called critical path, that proceeds from the
first task in the project to the last, where the length of the path is computed by adding the task
durations. The project manager focuses particularly on the tasks on the critical path, as any delay
in these tasks results in delays of the overall project and missed deadlines. A task’s slack time is
the maximum amount of time a task can be postponed without delaying the rest of the project.
By definition, tasks on the critical path have a zero slack time.
Time constraints can be used to specify the start or end of a task independent from the
relationship of the task to other tasks. Time constraints are usually the result of an interaction of
the project manager with the client. If the system must be finished in the first week of December,
it has an MFO constraint. If a task T must start on a Monday, it has an MSO (see Table 14-2)
constraint. ASAP is the most commonly used constraint by people ordering tasks; ALAP is the
most commonly used constraint by people receiving tasks.
Table 14-2 Time constraints.
Constraint Definition
A skills matrix is a convenient form of relating the skills, knowledge, and interests of
people to the tasks to be performed in the project. The rows of a skill matrix (see Table 14-3)
denote the units of work—tasks, activities, and project functions—from the work breakdown
structure. The columns denote project participants. An entry in the matrix identifies the skill and
knowledge level of the particular participant for the task. We distinguish three types of entries:
primary skill, a secondary skill, and an interest. A primary skill or knowledge qualifies a person
to lead a unit of work. A secondary skill or knowledge qualifies a person to participate in a task.
Interest means the person is interested but has no skill in a task.
Control Design
Database Design
Configuration Management
Equipment
Project
* Facility
Resource
Fund
* Organi-
Work zation
Breakdown
es
Structure Work
s
sum
Schedule
ibe Package
r *
con
sc
e
*
bl
* * de
si
produces Organizational
Outcome
on
Work Unit *
*
sp
*
plays
re
depends
Role
Set of Work Work
Products Product Activity Task Participant Staff
Internal Project
Project Function Department Team
Work Product Deliverable
Figure 14-8 Model of a Project from a project manager’s point of view. This is a refinement of the model
used in Chapter 3: we have added three composite patterns to generalize the classes WorkProduct, Task and
Participant (UML class diagram).
each team and of the management are defined and responsibilities assigned. Communication
roles, such as liaisons, are also described in this section. By reading this section, developers are
able to identify the participants in other teams they need to communicate with.
The fifth section of the SPMP, Managerial process plans, describes how management
deals with project initiation, steady state, and termination, and how it addresses unforeseen
problems. Anticipated risks and contingency plans are made public.
The sixth section of the SPMP, Technical process plans, describes the technical standards
that all teams are required to adopt. These cover the process model, development methodology,
the coding guidelines, infrastructure, and the product acceptance plan.
The seventh section of the SPMP, Supporting process plans, includes provisions for each
of the supporting processes, such as configuration management, verification and validation,
documentation, quality assurance, reviews and audits, problem reporting, subcontractor
management, and process improvement.
An initial version of the SPMP should be written by the project manager during the project
definition phase, and it should be coordinated with its companion document, the initial software
architecture document.
We call the software project management plan and the software architecture initial,
because the documents should not be finalized until the beginning of the project steady state
Project Management Concepts 591
phase. In fact, we recommend a baseline of these documents only after the requirements analysis
phase. Only then will all the project participants be able to understand the impact of the
requirements on the work.
The completed SPMP document should be reviewed both by management and by
developers to ensure that the plans are feasible and realized in the project.
The evolution section of the SPMP provides a history of changes, including the author
responsible for the change, date of change, and a brief description of the change. The SPMP
should be updated whenever decisions that effect the outcome are made or problems are
discovered. In very large-scale projects this project function continues during the duration of the
592 Chapter 14 • Project Management
project. In this case updating all aspects of the SPMP is assigned to a separate person employed
as a planner.
In smaller projects, the role of the planner is usually played by the project manager.
Keeping the SPMP constantly up-to-date might become impossible because of the high
workload. In this case, we recommend that the project manager create three versions of the
SPMP: an initial version as the basis for project planning, the baselined version after the project
agreement is signed, and a final version at the end of the project termination as the basis for the
postmortem session.
• Planning the Project (Section 14.4.1): defining the problem, identifying the initial task
model and organization structure, estimating needed resources such as personnel and
funds.
• Organizing the Project (Section 14.4.2): hiring participants, skill identification,
mapping roles and responsibilities to participants, and organizing tutorials and the
project kick-off meeting.
• Controlling the Project (Section 14.4.3): project monitoring, risk management, and the
project agreement.
• Terminating the Project (Section 14.4.4): the client acceptance test, installation, and
project postmortem.
In this section, we focus on classical projects, in which the scope of the product is
relatively well defined at the beginning of the project and the goal of the project is to deliver
within a specific deadline and budget. In Section 14.5, we revisit these activities for an agile
project, in which the scope and requirements of the product are defined as the project progresses,
and the product is delivered in increments.
• The problem statement is a short document describing the problem the system should
address, the target environment, client deliverables, and acceptance criteria. The
problem statement is an initial description and is the seed for the Project Agreement,
formalizing the common understanding of the project by the client and management,
and for the Requirements Analysis Document (RAD), a precise description of the
system under development.
• The top-level design represents the initial decomposition of the system into
subsystems. It is used to assign subsystems to individual teams. The top-level design
will be the seed for the System Design Document (SDD), a precise description of the
software architecture.
• The Software Project Management Plan (SPMP) describes all the managerial
aspects of the project, in particular the work breakdown structure, the schedule,
organization, work packages, and budget.
Deliverables
Project Planning Products
Project Agreement
Problem Statement
Requirements Analysis
Document (RAD)
System Design
Top-level Design Document (SDD)
Organization
Software Project
Task Model Management Plan (SPMP)
Schedule
Figure 14-10 Work products generated during project planning and their relationship with typical project
deliverables (UML class diagram).
Moving the design of the software architecture to the beginning is called architecture-
centric project management. Designing the top-level design and the SPMP in parallel is highly
desirable. However, pushing the design of the subsystem decomposition into the project
594 Chapter 14 • Project Management
The Problem Statement is developed by the project manager and the client as a mutual
understanding of the problem to be addressed by the system. The problem statement describes
the current situation, the functionality it should support, and environment in which the system
will be deployed. It also defines the deliverables expected by the client, together with delivery
dates and a set of acceptance criteria. The problem statement may also specify constraints on the
development environment, such as the programming language to be used. The problem
statement is not a precise or complete specification of the system. Instead, it is a high-level
summary of two project documents yet to be developed, the RAD and the SPMP.
The problem statement is developed iteratively by the project manager and the client.
Developing the problem statement is both a negotiation activity and an information-gathering
activity during which each party learns the expectations and constraints of the other. The
problem statement contains a high-level description of the functionality of the system. It should
also provide concrete examples to ensure that both parties are sharing the same vision. Scenarios
are used for describing both the current situation and the future situation (see Chapter 4,
Requirements Elicitation).
Figure 14-11 is an example outline for a problem statement. The first section describes the
problem domain. Section 2 of the problem statement provides example scenarios describing the
interaction between users and the system for the essential functionality. Scenarios are used for
describing both the current situation and the future situation. Section 3 summarizes the
functional requirements of the system. Section 4 summarizes the nonfunctional requirements
including constraints placed by the client, such as the choice of the programming language,
component reuse, or selection of a separate testing team. Section 5 describes the deployment
environment, including platform requirements, a description of the physical environment, users,
and so on. Section 6 lists client deliverables and their associated deadlines.
The top-level design describes the software architecture of the system. The top-level
design should be done by the software architect. A project manager assuming the role of the
software architect must have enough technical expertise to accomplish this.
Classical Project Management Activities 595
PROBLEM STATEMENT
1. Problem domain
2. Scenarios
3. Functional requirements
4. Nonfunctional requirements
5. Target environment
6. Deliverables & deadlines
Figure 14-11 Outline of problem statement document. Note that the sections 2, 3, and 4 are not a complete
or precise specification of the system. They provide the basis for requirements elicitation. Section 6,
however, describes contractual deliverables and their associated due dates.
There are several different approaches to developing the work breakdown structure (WBS)
for a project. The most commonly used approach is functional decomposition based on the
software process. For example, the work breakdown structure in Table 14-4 is based on a
functional breakdown of the work to be performed.
A functional decomposition based on the functions of the product itself can also be used to
define the tasks. This is often used in a high-risk projects where the system functionality is
released incrementally in a set of prototypes. For example, if a software system provides three
main functions, a system function–oriented work breakdown structure could consist of tasks that
build and deliver these system functions in a series of three prototypes.
An object-oriented work breakdown structure is also possible. For example, if a product
consists of five components, an object-oriented WBS would include five tasks associated with
the construction of each of these components. Specifying the development of these subsystems
of the software architecture as tasks comes quite naturally in object-oriented software projects.
596 Chapter 14 • Project Management
Table 14-4 Example of functional work breakdown structure for a simple ATM.
UserInterface Develop
System
Develop Database
Database Subsystem
Figure 14-12 An example of an object-oriented work breakdown structure where the subsystem
decomposition is used to identify high-level activities and tasks (UML object diagram).
Figure 14-12 shows such a work breakdown structure for a system consisting of three
subsystems.
Another decomposition is based on geographical areas. If the project has developer teams
in different geographical regions, the tasks might be identified for each of these regions. Another
Classical Project Management Activities 597
WBS is based on organizational units. These can be the organizational units of the company
(marketing, operations, and sales) or they can be based on the people in the project.
No matter what approach is used, the ultimate goal is to decompose the total work into
tasks that are small enough to be doable, whose duration can easily be estimated, and that can be
assigned to a single person.2
When creating a work breakdown structure, the following heuristics are quite useful for
the project manager:
• Reuse an existing WBS. Consult people who have worked on similar projects.
Incorporate the information into the work breakdown structure.
• Involve key developers. Developers with knowledge about the solution domain should
participate in the development of the work breakdown structure. If they join the project
after the work breakdown structure is developed, they should be able to review and
critique it before they begin to work on their assigned tasks.
• Identify work gaps. All work to be performed in the project must be mapped onto tasks.
Work that is associated with an activity must eventually be addressed by at least one
task. If new work appears, an activity should be found or newly defined that includes
this task.
• Identify work overlaps. The same task should not be included in more than one activity.
For example, the project manager should not let the developers do subsystem testing, if
all subsystems tests are performed by a separate testing team.
After the temporal dependencies are established in the task model, we can create a
schedule. This requires the estimation of durations for each of the tasks. Estimating task
durations is quite difficult. Estimated times can of course be based on prior experience of the
manager or the estimator, but they often do not give the needed precision. It is impossible to
come up with a precise model for the complete project. One solution is to start with an initial
schedule representing deadlines mutually agreed by the client and the project manager. These
dates are generous enough that, even in the event of change, they can still be met.
Initially, the project manager should create a schedule that is detailed enough for the first
weeks of the project, showing events for the project kick-off meetings, the initial team meetings,
and tutorials. The rest of the project schedule should not be more detailed than the schedule in
the problem statement. The initial version of the SPMP should be viewed as a proposed version
2. There are things you have to do in a project such as coming to work, eating food, etc., which are usually not
considered tasks. That is, the project participant is not responsible to report the status of these things to the project
manager or team leader. Managers who try to turn these things into tasks as well are often called “micro-managers”
because they get too involved and manage low-level details.
598 Chapter 14 • Project Management
to be reviewed by the software architecture and subsystem teams before it can be considered
binding for all project participants.
The individual teams should start working on a revision of the initial version of the
subsystem decomposition right after the initial team meeting, focusing on their subsystem and
work breakdown structure for the development of the subsystem.
This planning activity has to be done by the team in parallel with ongoing requirements
analysis and system design activities. The newly found tasks should be presented during a
formal planning review scheduled during or near the end of the analysis phase. The result of the
planning review should be a revised work breakdown structure and software architecture. This
revision, in turn, is the basis for the second version of the SPMP, which should be baselined and
used as the basis for the project agreement with the client.
Scheduling requires a continuing trade-off between resources, time, and implemented
functionality and should be done regularly by the project manager. However, creating and
updating schedules are complicated activities, especially when people have to juggle between
commitments on more than one project. Resolving overloaded resources is a topic that is beyond
the scope of this book.
Clear and accurate communication is critical for the success of a development project.
Moreover, communication becomes crucial when the number of project participants increases.
Consequently, setting up the communication infrastructure for a project must occur as early as
possible. The project manager needs to address the following modes of communication:
telephone conference calls. The manager schedules dates and designates facilitators for
each of these interactions.
• Event-based modes of communication. These include problem reports, change requests,
issue discussion, and resolution. Event-based modes usually arise from unforeseen
problems and crises. Asynchronous mechanisms such as E-mail, groupware, and
problem databases need to be set up early, and participants need to be trained to use
them. When the number of participants is large, centralized infrastructures, such as
Web sites and bulletin boards, are preferable as they make information visible to more
people than E-mail or bilateral conversations.
Identifying skills
Once the initial work breakdown structure and task models have been created, the project
manager knows the type of skills required for each task. For example, tasks related to
requirements elicitation require application domain knowledge. Tasks that involve discussions
with the client require effective communication skills. Tasks related to testing require attention
to detail and quality-oriented thinking. In general, a software engineering development project
requires a variety of skills:
• Application domain skills. These include knowledge of the application domain, such as
banking terms and procedures and credit rating formulae in the context of banking
applications.
• Communication skills. These include the ability to communicate with stakeholders who
are not familiar with software development or with the application domain, the ability
to summarize and present complex ideas, and the ability to negotiate and achieve
consensus.
• Technical skills. These include knowledge of specific technology used in the project,
such as programming skills or knowledge of a specific component, the ability to assess
risks and bottlenecks in a software design, and the ability to find workarounds to
unexpected problems.
• Quality skills. These include attention to detail, the ability to identify boundary cases
and generate the corresponding test cases, and the ability follow procedures.
• Management skills. These include the ability to assess personal skills, motivate, provide
feedback, and assess project-level risks.
The task of the project manager, when organizing the project, is to identify individuals
with the right combination of skills for each task using a skill matrix (see Section 14.3.5). The
rows of the skill matrix come from the required skills for each tasks. The columns come from
the pool of available staff. In project-based organizations, the skills of each individual are
recorded in a profile, as the individual gains experience through projects and attends specific
courses. For resources hired from outside the organization (e.g., freelancers), a profile can be
600 Chapter 14 • Project Management
reconstituted from a combination of self-assessment (e.g., the individual’s resume) and from the
organization’s own assessment (e.g., interviews, tests). The set of profiles available to an
organization represents the competence of the organization.
process (see Chapter 15, Software Life Cycle) as a means to disseminate skills through the
organization with minimal formal training.
Formal training and learning by practice is a trade-off the project manager evaluates
within the given project time constraints. Formal training enables developers to become more
productive earlier; however, it is expensive and constitutes a longer-term investment benefiting
future projects.
Although technical roles can be assigned to teams, the size of a single team is constrained
by management and communication overhead. When there are more participants on a team, then
the communication overhead is higher and team effectiveness is lower. The observations below
are adapted from [Kayser, 1990], who originally applied these heuristics to the formation of
subgroups during meetings. Given that team meetings are a significant tool for collecting status,
negotiation, and decision making, constraints on the number of participants in meetings are the
upper limits on the team size:
• Three members. During meetings, every member has a chance to speak. Issues are
discussed thoroughly and resolved easily. A possible problem with this team size is that
one member can dominate the other two. Also, small teams suffer from the cumulation
of multiple roles for each participant (“too many hats” syndrome).
• Four members. Starting with teams of this size allows the team to continue to function
even if a participant drops out. Reaching consensus with a team of even numbers can be
problematic since there can be a tie when voting. As a result, resolving issues can take
a relatively long time.
• Five and six members. This is the ideal size for a software development team. Members
can still meet face to face. Diverse perspectives, supported by a mix of ideas, opinions,
and attitudes, promotes creative thinking. Single roles can be assigned to each member,
creating a mini-organization in which each member complements the others.
• Seven members. This is still a relatively effective team size, but team meetings tend to
become long. Reviewing the status requires more than half an hour. If teams of seven
are necessary, it is advisable to form subteams during the formal team meetings, each
having the task to discuss and resolve a subset of the open issues from the agenda.
• Eight and more members. Teams of this size become difficult to manage. The internal
structure often starts to break down into subteams. Coalitions and side conversations
often occur during formal meetings. Members have more opportunities to compete than
to cooperate. Although results are usually satisfactory, the time to reach these results is
longer than with a team of smaller size.
602 Chapter 14 • Project Management
The next step in the project organization phase is to assemble the teams who will produce
the deliverables. The project manager selects the team leaders before the teams are formed. In
addition to being capable of understanding the team status, the team leader needs to be able to
communicate effectively, recognize pending crises (technical or social), and make trade-offs
taking into account project level concerns.
The project start phase is an ideal time for training team leaders and familiarizing them
with project procedures and ground rules. The team leader role is distinct from the role of
technical leader. The technical leader, usually the liaison to the architecture team, interacts with
the chief architect and the architecture liaisons from the other teams and has final say on the
technical decisions within the team. The role of architecture liaison requires excellent technical
skill and development experience.
In a training context, such as a university project course or an industrial pilot project
exploring a new software method, the team leader can be split into two roles. A coach trains,
explains, advises the team and acts as a liaison to the project manager. A team leader trainee fills
all other responsibilities of the team leader, including facilitating status meetings and assigning
tasks. In a university project course, this role can be filled by the instructor or an experienced
teaching assistant, whereas the architecture liaison can be filled by a student. In a development
project at a company, the team leader is filled by a developer who has experience and knowledge
with the organization’s management procedures, whereas the architecture liaison is filled by a
developer who has strong technical skills.
Developers who will work for the project can be assigned to the project all at once (flat
staffing), or the project can be gradually ramped up by hiring people as needed (gradual
staffing). On the one hand, gradual staffing is motivated by saving resources in the early part of
the project. Requirements elicitation and analysis do not require as many people as coding and
testing. Moreover, analyst and implementor are roles requiring different skills and thus should
be assigned to different people. On the other hand, flat staffing has the advantage of establishing
teams early and the social environment necessary for spontaneous communication. Some of the
developers can be assigned to the analysis activities with the analysts, and the others may
already start other activities such as setting up the configuration management environment,
technology survey and evaluation, and training. With shorter projects and market deadlines, flat
staffing is becoming the preferred staffing scheme. The dilemma between gradual staffing and
flat staffing has been discussed in length by Brooks [Brooks, 1995].
Kick-off meeting
The project manager, the team leaders, and the client officially start the project in a kick-
off meeting with all developers present. The purpose of kick-off meetings is to share information
with all the project participants about the scope of the project, the communication infrastructure,
and the responsibilities of each team. The presentation should be split between client and project
Classical Project Management Activities 603
manager. The client presents the requirements and the scope of the project. The project manager
presents the project infrastructure, top-level design and team responsibilities.
The Project Agreement represents the baseline of the client acceptance test. Any change in
the functionality to be delivered, the nonfunctional requirements, the deadlines, or the budget of
the project requires the renegotiation of the Project Agreement.
After the completion of the project kick-off and agreement in the project scope, the project
enters steady state.
Meetings
• Periodic status meetings. Status meetings conducted at the team level have the best
potential for reporting status and information required for corrective decisions. Status
meetings, however, can also provide inaccurate status information if team members do
not cooperate. Participants are naturally reluctant to report problems or mistakes. They
604 Chapter 14 • Project Management
cooperate only if they can trust a manager not to step into problems that they can
resolve themselves. Managers need to make problem reporting beneficial to developers
by intervening only when necessary.
• Sharp milestones. Progress can be measured by determining if developers deliver work
products on time. Managers can increase the accuracy of this method by defining sharp
milestones such that they can be accurately monitored. For example, the “coding
completed” milestone is not a sharp milestone, because it does not take into account the
quality of the code delivered. The code could contain few or many defects and the
milestone would be considered completed in either case. Conversely, defining a
milestone as the completion of the test, demonstration, documentation, and integration
of a specific feature yields better status information. When defining and monitoring
sharp milestones, managers do not need the cooperation of developers.
• Project reviews. A project review is a means for all participants to exchange status and
plan information about all the teams with formal presentation. Project reviews suffer
from similar problems as status meetings. If participants are already reluctant to admit
problems in front of their team leader, they definitively will not admit problems in a
public forum.
• Code inspections. Formal peer review of code is an effective method for discovering
defects early. When performed frequently, results can also be used as an indication of
progress.
• Prototype demonstrations. Prototype demonstrations are partial implementations of the
system for evaluating technology or functionality. They usually do not illustrate how
borderline cases are dealt with or how robust the implementation is. They are good for
measuring initial progress, but are not sharp measures of completion.
Metrics
measured. For example, if the size of a subsystem in lines of source code increases rapidly,
maybe the developers assigned to the subsystem are productive, or they maybe are duplicating
code. With iterative and architecture-centric approaches, however, software components to test
and measure become available much earlier. Moreover, metrics can also measure attributes of
the process, such as deviations with the schedule, resources expended, and number of
participants leaving prematurely.
• Measuring financial status. Comparing planned costs against actual costs in the context
of actual progress enables a manager to assess the financial health of the project.
Software development projects are labor intensive; consequently, most of the cost
associated with the project is staffing. The planned staffing profile of the project over
time provides a cost baseline against which to compare actual costs. In addition, the
task model and the schedule provides us with the estimated effort and the deadline for
each task. An earned value assessment enables us to assess both the cost and schedule
situation of a project using one chart. For example, in Figure 14-13, the thin line
depicts the planned costs of the project over time. A project that is on budget and on
schedule would follow the same line very closely. The thick line represents the actual
costs of the project over time. In the example of Figure 14-13, we actually spent less
than planned. However, if we only looked at these two curves, we would not be able to
assess whether or not the project is in a good financial state. The project could be under
cost because we accomplished the planned work for less money, or because we did not
accomplish as much as planned. Consequently, we plot a third curve, the earned value,
which represents the value of the work we completed so far. The earned value is
measured by adding the planned costs of the tasks that have been completed. In this
example, the earned value is between the actual cost and the planned cost, indicating
that the project is under budget and late. If the earned value had been above the planned
costs, the project would have been under budget and early.
Planned cost
Earned value
Actual cost
Time
Current
time
Figure 14-13 Assessing the financial status of a project using earned value. An earned value above actual
costs indicates that more work was accomplished for the same a mount of money (i.e., the project is under
budget). An earned value below planned costs indicates that not as much work was completed as planned
(i.e., the project is late).
• Measuring stability. Once an initial version of the system is baselined, change requests
are issued to control and track changes to the baseline. Measuring the rate of new
change requests corresponding to defects in the system indicates how stable the system
becomes over time. Measuring the rate of change requests to the requirements similarly
indicates how stable the requirements have become in the view of the client. If work
completion indicates that the project is almost finished but the rate of change requests
is still high, the project may not be achieving its target quality goals.
• Measuring modularity. Breakage is a measure of the impact of a change on the baseline
(which can be measured in terms of lines of code, number of files, function points, or
any size metric that is appropriate in the context of the project). It is expected that early
changes affect more source code than later ones, as the architecture should become
more modular over the project time. Measuring breakage can encourage this trend and
make visible early any architectural issues (e.g., identifying specific types of changes
that yield high breakage). Increasing breakage indicates a degrading modularity over
the lifetime of the project, probably resulting from an inadequate architecture or
specific nonfunctional requirements that are difficult to meet.
• Measuring maturity. Mean time between failures measures the time between
discovered defects during testing. As the project nears delivery, the number of
discovered defects should decrease, indicating an increasing maturity of the product. A
decreasing maturity can indicate that developers are under pressure to address open
change requests and do not pay sufficient attention to quality. Decreasing maturity can
also result from a lack of stability (see measuring stability, above).
Classical Project Management Activities 607
Finally, independently of the methods used for determining status, the project manager,
the team leaders, and the developers need to communicate status information in understandable
terms. Next, we describe risk management as a method for controlling projects, communicating
potential problems, and planning contingencies.
Managing risk
The focus of risk management is to identify possible problems in the project and address
them before they can significantly affect the delivery date or the budget. The key element of risk
management is to set up the appropriate information flows such that risks and problems are
accurately reported in a timely manner. Many projects fail either because simple problems were
reported too late or because the wrong problem was addressed. In this section, we focus on the
activities of risk management for identifying, analyzing, and addressing risks. For more details
on risk management in software engineering, we refer the reader to the specialized literature
(e.g., [Boehm, 1991] and [Charette, 1989]).
The first step of risk management is to identify risks. Risks are potential problems that
result from an area of uncertainty. Risks can be managerial or technical. Managerial risks
include any uncertainty related to the organization, work products, roles, or task plan. Technical
risks include any uncertainty related to the system models, including changes of the
functionality of the system, the nonfunctional requirements, the architecture, or the
implementation of the system. In particular, technical risks include defects discovered late in the
development. Table 14-5 depicts examples of risks in a software project.
Behavior of a commercial off-the-shelf (COTS) component does not comply with Technical
published standard.
Users are not willing to use chosen user interface to interact with system. Technical
Selected middleware is too slow to meet performance requirement for data logging. Technical
Developers are often aware of the risks applicable to their tasks. The challenge is to
encourage developers to report risks so they can be managed. This entails rewarding developers
for reporting risks and problems and making the risk management activities directly beneficial
to developers. Spontaneous risk reporting is usually not sufficient. Project participants, including
the client, the developers, and the managers, are usually reluctant to communicate potential
608 Chapter 14 • Project Management
failures or shortcomings and are too optimistic about their outcome. A more systematic
approach to risk identification is to interview the project participants using a structured
questionnaire. Participants are asked in group sessions to list the risks they anticipate with
respect to specific tasks. Figure 14-14 depicts example questions from the Taxonomy-Based
Risk Identification process [Carr et al., 1993]. In this example, the interviewer attempts to
determine if there are any risks related to nonfunctional requirements. Depending on the answer
to the first question, the interviewer can ask follow-up questions to make sure no other related
risks are present. The rationale behind this questionnaire is to cover all the areas of development
in which risks are typically found.
1. Requirements
...
d. Performance
...
[23] Has a performance analysis been done?
(Yes) (23.a) What is your level of confidence in the performance analysis?
(Yes) (23.b) Do you have a model to track performance through design and implementation?
Figure 14-14 Questions for eliciting performance risks in the Taxonomy-Based Risk Identification
process. If the question to question 23 is positive, questions 23.a and 23.b are asked of the developers [Carr
et al., 1993].
Systematic risk identification produces a large number of managerial and technical risks,
some of them critical, others unimportant. Prioritizing risks allows managers to focus on the
critical risks. Risks are characterized by the likelihood they can become problems and by their
potential impact to the project when they become problems. By using these two attributes, risks
can be assigned to one of four categories:
Managers should worry about the risks of the first category: likely, high potential impact.
For these risks, developers and managers should draw contingency plans and monitor the risk
carefully. If the likelihood of the risk increases, managers can activate the contingency plan and
address the problem in time. Moreover, managers should monitor the risks of the second
category: unlikely, high potential impact. Contingency plans do not need to be drawn for them
unless their likelihood increases. Finally, the risks in the third and fourth categories can be
ignored unless sufficient resources are available for monitoring them. Table 14-6 orders the risks
presented in Table 14-5.
Classical Project Management Activities 609
Users are not willing to use user interface. Likely for users spending less High
than 2 hours per day in front of
a computer
Selected middleware is too slow to meet Not likely, low sampling High
performance requirement for data logging. frequency
Once risks have been identified and prioritized, mitigation strategies should be designed
for the critical risks. Mitigation strategies can include lowering the likelihood of the risk or
decreasing its potential impact. Risks are usually caused by an area of uncertainty, such as
missing information or lack of confidence in some information. Developers decrease the
likelihood of a risk by further investigating the causes of the risk, by changing suppliers or
components, or by selecting a redundant supplier or component. Similarly, developers reduce
the impact of the risk on the project by developing an alternate or redundant solution. In most
cases, however, mitigating a risk incurs additional resources and cost. Table 14-7 describes
mitigation strategies for the risks presented in Table 14-5.
Once risks are identified, prioritized, and mitigated, the risk management plan should be
communicated to all concerned. Risk management relies on timely communication.
Spontaneous and timely reporting of potential problems should be encouraged. Risk
management plans and technical documents are communicated using the same channels.
Developers and other project participants review risks at the same time they review the technical
content of the project. As mentioned earlier, communication is the most significant barrier when
dealing with uncertainty.
In the project termination phase the project manager prepares for the client acceptance test,
manages the system integration, testing, and installation at the client’s site. Finally the project
manager oversees the project postmortem.
610 Chapter 14 • Project Management
Behavior of a COTS component does not comply • Run benchmarks to identify nonconformance.
with published standard. • Investigate if nonconforming functions can be
avoided.
COTS component delivery date later than • Monitor risk by asking manufacturer for
planned. intermediate status reports.
Users are not willing to use user interface. • Perform usability studies using mock-ups.
• Develop alternate interface.
Selected middleware is too slow to meet • Monitor risk. Plan for a performance
performance requirement for data logging. evaluation prototype.
Development of components takes more time than • Increase the priority of this task with respect to
scheduled. other implementation tasks.
• Assign key developers to this task.
The purpose of the client acceptance test is the presentation of the system and the approval
of the client according to acceptance criteria set forth in the Project Agreement. The result is the
formal acceptance (or rejection) of the system by the client. Installation of the system and field
tests by the client may already have occurred. The client acceptance test constitutes the visible
end of the project.
The client acceptance test is conducted as a series of presentations of functionality and
novel features of the system. Important scenarios from the Problem Statement are exercised and
demonstrated by the developers or by future users. Additional demonstrations focus on the
nonfunctional requirements of the system such as accuracy, reliability, response time, or
security. If installation and user evaluations occurred prior to the client acceptance test, their
results are presented and summarized. Finally, the client acceptance test also serves as a
discussion forum for subsequent activities such as maintenance, knowledge transfer, or system
enhancement.
Installation
The installation phase of a project includes the field test of the system, the comparison of
the system results with the legacy system, the rollout of the legacy system, and the training of
users. The installation may be conducted by the supplier, by a contractor, or by the client,
depending on the Project Agreement.
Agile Project Management Activities 611
To minimize risks, installation and field testing are usually done incrementally, with
noncritical sites used as a field test environment. When the client is convinced that the disruption
to his business will be minimal, the delivered system enters full-scale operation. Replacement
systems and upgrades are rarely introduced in a “big-bang” fashion because the largest number
of problems are discovered during the first few days of operation.
Postmortem
Every project uncovers new problems, unforeseen events, and unexpected failures. Each
project, therefore, constitutes an opportunity for learning and anticipating new risks. Many
software companies conduct a postmortem study of each project after its completion. The
postmortem includes collecting data about planned vs. actual delivery dates and number of
defects discovered, qualitative information about technical and managerial problems
encountered, and suggestions for future projects. Although this phase is the least visible in the
life cycle, the company depends on it for learning and improving its efficiency.
The project is started with a project kick off meeting, during which the product owner
and the Scrum master brainstorm a first version of the requirements. At the end of the kick off,
the requirements are prioritized into a list called the product backlog. The project backlog starts
as a vision formulated in terms of business requirements, and is updated and refined in terms of
system requirements as the team makes progress in realizing the product. The project backlog
reflects the current understanding of the product between the client and the project, rather than a
fixed contract specifying the final product.
A sprint starts with a sprint planning meeting, during which the stakeholders (the client,
management, and the team) select which items of the product backlog should be considered for
the next product increment. The team then determines a set of tasks, together with an effort
estimate, for realizing the selected requirements. The list of tasks and their effort estimates
constitute the sprint backlog. At the end of the sprint planning meeting, the team takes
responsibility for the sprint backlog and commits to delivering the product increment at the end
of the sprint. A sprint is timeboxed to typically 30 days. At the end of the sprint, the product
increment is reviewed and the scope of the next sprint is defined. Any unfinished work is
returned to the product backlog.
The items in the product backlog are grouped into releases with planned release dates. As
sprints result into completed increments, the product owner has three options:
• The product owner is responsible for the requirements. The product owner
participates in the creation of the product backlog, and prioritizes the product backlog
before each sprint. The product owner represents the client and users with a single
voice. The product owner changes and re-prioritizes the product backlog before each
sprint to reflect lessons learned. The product owner is solely responsible for the product
backlog and has no influence on the team during the sprint.
• The Scrum master is a management role responsible for the process. The Scrum
master sets up and enforces the rules and practices of the project. The Scrum master
facilitates the daily Scrum meetings, monitors progress, and removes obstacles
preventing the team to do its work. The Scrum master is the interface between the
Scrum team and the product owner, ensures the team productivity, and shields the team
from distractions.
Agile Project Management Activities 613
• The Scrum team is responsible for developing the product increment. The team is
cross functional including all the skills required to build the product increment. The
team is self organizing in that each member commits to work based on their own skills
and availability. There are no roles or job descriptions assigned to specific members,
such as analysts, programmers, or testers. Members learn and adapt their skills based
on the work to be done. The team participates in the sprint planning meeting and
commits to the list of tasks defined in the sprint backlog.
14.5.3 Controlling the Project: Daily Scrums and Burn Down Charts
The Scrum master monitors the progress of the project with daily Scrum meetings and burn
down charts.
The daily Scrum meeting takes place at the beginning of the work day, and lasts at most
15 minutes. During the daily Scrum meeting, each team member reports individually:
Reporting on these three points allows the Scrum master to monitor the progress of each
member and to identify corrective actions, such as:
• Planning new work that was not identified in the sprint planning meeting or in the
previous daily Scrum meetings
• Reallocation of tasks between members due to mismatch of skills or lack of interest
• Removing obstacles
estimate for a task that turned out to be more complex increases the remaining effort in the
sprint. As the sprint burn down chart plots the cumulative estimated amount of work for the
sprint backlog, the Scrum master can assess the general trend of the sprint and identify any need
for corrective actions
Remaining
effort
[hours]
2000
1000
Time [days]
3 6 9 12 15 18 21 24 27 30
Figure 14-15 Assessing progress trend with a burn down chart. An increase corresponds to an upward
revision of estimated work (new work, tasks initially underestimated). A decrease corresponds to a
downward estimate of remaining work (work completed, obsolete tasks taken out of the plan).
Similarly, a release burn down chart, updated at the end of every sprint, shows the
remaining effort in days for releases, based on estimates of product backlog items in days.
:Problem Statement
:Product Backlog
Plan Sprint
:Sprint Backlog
Daily Scrum:
Review Actions, Identify Obstacles
:Product Increment
[continue sprint]
[end sprint]
Review Sprint
[new increment]
[new release]
Deliver
Product Release
:Product Release
14.7 Exercises
14-1 In Figure 14-1, we modeled the phases of a project with a state chart. Use the state pat-
tern by making each of these phases a different class. Use the project management
activities introduced in this chapter to make them public operations on these classes.
Assume a team-based project organization.
14-2 What are the relative advantages of flat staffing versus gradual staffing?
14-3 What is the difference between reporting status and making decisions in a meeting?
Should they always be kept separate in a meeting?
14-4 Why should the software architect and project leader be different people?
14-5 Draw a UML model of the team organization of the ARENA project for each the main
phases (i.e., conception, definition, start, steady state, termination).
14-6 Draw a task model of the system design of the MyTrip system presented in Chapter 6,
System Design: Decomposing the System.
14-7 Estimate the time to complete each task of the task model produced in Exercise 14-6
and determine the critical path.
14-8 Identify, prioritize, and plan for the top five risks related to the system design of MyTrip
presented in Chapter 6, System Design: Decomposing the System.
14-9 Identify, prioritize, and plan for the top five risks related to the user interface subsystem
of CTC presented in Chapter 12, Rationale Management.
14-10 Linux, developed using the bazaar model, is more reliable and more responsive than
many operating systems running on Intel PCs. Make a case why the bazaar model
should or should not be used for the Space Shuttle control software.
14-11 Organize the project participants into teams of four people. Each team has the
following resources available: 2 eggs, 1 roll of TESA film, 1 roll of toilet paper, a cup
with water, a bucket with two liters of sand, 20 foam balls (each about 1 cm diameter),
1 table whose surface is about 1 meter above the ground. Each team has 25 minutes
time to build and test an artifact that allows an egg to be released 75 cm above the table
such that the egg falls on the table without cracking. Each team has another 5 minutes
to demonstrate the artifact to project management.
14-12 Organize the project into teams of four people. Each team has the following resources
available: 2 buckets of DUPLO pieces, 2 tables separated by a distance of 1.50 meters.
Each team has 25 minutes time to build and test a bridge solely out of the available
DUPLO pieces that hangs free for at least one minute between the two table surfaces.
Each team has another 5 minutes to demonstrate the artifact to project management.
14-13 Specify all management models for the icebreaker project described in Exercise 14-11.
14-14 Write an SPMP for the icebreaker project described in Exercise 14-11.
14-15 What does a flat section in a burn down chart mean (for example the section between
days 3 and 6 in Figure 14-15)?
618 Chapter 14 • Project Management
References
[Albrecht & Gaffney, 1983] A. J. Albrecht & J. E. Gaffney, Jr., “Software function, source lines of code, and
development effort prediction: A software science validation,” IEEE Transactions on
Software Engineering, Vol. SE-9, No. 6, November 1983.
[Boehm, 1991] B. Boehm, “Software risk management: Principles and practices,” IEEE Software,
Vol. 1, pp. 32–41, 1991.
[Boehm et al., 2000] B. Boehm, E. Horowitz, R. Madachy, D. Reifer, B. K. Clark, B. Steece, A. W. Brown,
S. Chulani, & C. Abts, Software Cost Estimation with COCOMO II, Prentice Hall,
Upper Saddle River, NJ, 2000.
[Brooks, 1995] F. P. Brooks, The Mythical Man Month, Anniversary Edition: Essays on Software
Engineering, Addison-Wesley, Reading, MA, 1995.
[Carr et al., 1993] M. J. Carr, S. L. Konda, I. Monarch, F. C. Ulrich, & C. F. Walker, Taxonomy-Based
Risk Identification, Technical Report CMU/SEI-93-TR-6, Software Engineering
Institute, Carnegie Mellon University, Pittsburgh, PA, 1993.
[Charette, 1989] R. N. Charette, Software Engineering Risk Analysis and Management, McGraw-Hill,
New York, 1989.
[Cohn, 2006] M. Cohn, Agile Estimating and Planning, Pearson, Upper Saddle River, NJ, 2006.
[Elssamadisy, 2009] A. Elssamadisy, Agile Adoption Patterns, Addison-Wesley, Reading, MA, 2009.
[Grenning, 2002] J. Grenning, Planning Poker, http://www.planningpoker.com/ 2002.
[Halstead, 1977] M. H. Halstead, Elements of Software Science, Elsevier, New York, 1977.
[IEEE Std. 1058-1998] IEEE Standard for Software Project Management Plans, IEEE Computer Society,
New York, 1998.
[Katzenbach & Smith, 1994] J. R. Katzenbach & D. K. Smith, The Wisdom of Teams: Creating The High-
Performance Organization, Harper Business, 1994.
[Kayser, 1990] T. A. Kayser, Mining Group Gold, Serif, El Segundo, CA, 1990.
[McCabe, 1976] T. McCabe, “A software complexity measure,” IEEE Transactions on Software
Engineering, Vol. 2, No. 12, December 1976.
[Paulish, 2001] D. J. Paulish, Architecture-Centric Software Project Management: A Practical Guide,
SEI Series in Software Engineering, Addison-Wesley, Reading, MA, 2001.
[Portny, 2001] S. E. Portny, Project Management for Dummies, John Wiley & Sons, 2000.
[Rogers et al., 1986] The Presidential Commission on the Space Shuttle Challenger Accident Report.
Washington, DC, June 6, 1986.
[Royce, 1998] W. Royce, Software Project Management: A Unified Framework, Addison-Wesley,
Reading, MA, 1998.
[Schwaber, 1995] K, Schwaber, “Scrum Development Process,” Business Object Design and
Implementation Workshop, OOPSLA’95, Austin, TX, October 1995.
[Schwaber & Beedle, 2002] K. Schwaber & M. Beedle, Agile Software Development with Scrum, Prentice Hall,
Upper Saddle River, 2002.
[Schwaber, 2004] K. Schwaber, Agile Project Management With Scrum, Microsoft, Redwood, 2004.
[Vaughan, 1996] D. Vaughan, The Challenger Launch Decision: Risky Technology, Culture, and
Deviance at NASA, The University of Chicago Press, Chicago, 1996.
[Weinberg, 1971] G. M. Weinberg, The Psychology of Computer Programming, Van Nostrand, New
York, 1971.
[Wigand et al., 1997] R. T. Wigand, A. Picot, & R. Reichwald, Information, Organization and Management:
Expanding Markets and Corporate Boundaries, John Wiley & Sons, London, 1997.
This page intentionally left blank
15
620
15
Software Life Cycle
A software life cycle model represents all the activities and work products necessary to
develop a software system. Life cycle models enable managers and developers to deal with the
complexity of the process of developing software in the same way as an analysis model or a
system design model enables developers to deal with the complexity of a software system. In the
case of software systems, the reality being modeled includes phenomena such as watches,
accidents, trains, sensors, and buildings. In the case of software development, the reality
includes phenomena such as participants, teams, activities, and work products. Many life cycle
models have been published in the literature in an attempt to better understand, measure, and
control the development process. Life cycle models make the software development activities
and their dependencies visible and manageable.
In this chapter, we revisit the activities described in previous chapters from the perspective
of life cycle modeling. The modeling techniques we used for modeling software systems can
also be used to represent life cycles. Whereas life cycle models are usually represented with ad
hoc notations, we try to use UML diagrams whenever possible. First, we describe the typical
activities and work products of a software life cycle as defined by the IEEE standard 1074 [IEEE
Std. 1074-2006]. Next, we introduce the Capability Maturity Model, a framework for assessing
the maturity of organizations and their life cycles. We then discuss different life cycle models
that have been proposed for developing complex software systems; these include the waterfall
model, the spiral model, the V-model, and the unified software process. We also discuss a life cycle
model called the issue-based model, in which products and activities are modeled as a set of
issues stored in a knowledge base. The issue-based model is an entity-centered view of the
software life cycle that can accommodate frequent changes over the duration of a project.
621
622 Chapter 15 • Software Life Cycle
Polynesian navigation
Polynesia is a large set of islands roughly forming a triangle with Tahiti at the center, Hawaii at the
north, Easter Island at the east, and New Zealand at the southwest. Polynesians came from southeast
Asia, settling Pacific islands systematically from west to east. Polynesians had already completed their
settlement several hundreds of years before Columbus arrived in the Caribbean. They reached Tahiti in
1400 B.C., Hawaii in 500 A.D., and New Zealand sometime between 500 A.D. and 1100 A.D.
Polynesian fishermen would discover a new island opportunistically, identify its location, and tell
people back home. The settlement of the new island was deliberate, involving the transplantation of
families, plants such as bananas, sugar cane, and yams, and domesticated animals such as dogs, pigs,
and chickens.
What makes this feat even more remarkable was that Polynesians were technologically in the Stone
Age. They built multi-hulled canoes with tools of bones and stones and without using any metal. Their
canoes were designed to stay on a specific course and withstand storms, and could sail significantly
faster than the European ships of the time. They transmitted knowledge of seafaring and the location of
islands by word of mouth from one generation to the next.
Polynesians navigated without instruments, relying on the rising and setting of stars, the direction of the
wind, and the swell of the ocean to maintain a course. The people of the island of Truk in Micronesia,
east of Polynesia, have preserved these ancient navigation skills and enable us to speculate about how
Polynesians managed to travel several thousands of kilometers by canoe. Near the equator, stars rise and
set around a north–south axis. Altair, for example, rises in the east and sets in the west. Some stars rise
and set further north: Vega rises in the northeast and sets in the northwest. Other stars rise and set further
south: Antares rises in the southeast and sets in the southwest. When facing the rising point of Vega, the
navigator would turn his back on the setting point of Antares. By memorizing the relative position of 16
stars, the Polynesian navigator could always find a visible star to adjust his course. During the day or
overcast nights, the navigator would use the direction of the wind and the swell of the ocean, which he
would have memorized in relationship with these stars.
Near landfall, the shape and sound of the waves would change. At that point, they looked for specific
species of land-based birds that would fly out to sea in the morning to fish and return to land in the
evening. When spotting these birds in the evening, they would follow their flight. When spotting them
in the morning, they would sail toward their point of origin.
By contrast, the shipbuilders of the age of Columbus had mastered the use of metal for several
thousands of years. Columbus’s logs indicate that he was not a celestial navigator. Instead of following
stars, he used dead reckoning: the helmsman held course by looking at a magnetic compass. Every hour,
the speed of the boat was measured by throwing a piece of flotsam in the water and by measuring the
time it took to clear the length of the ship. By knowing the direction and the speed of the ship at all
times, Columbus could compute the distance he had sailed since leaving port. We know from records
that he did not use a corrected compass, as his course towards America drifted to the south. On his way
back, his course drifted by the same amount to the north, so he did not notice the limitations of the
magnetic compass.
Introduction: Polynesian Navigation 623
The example above illustrates how similar goals can be accomplished with very different
processes. Polynesians evolved their craft of navigation and their knowledge of the stars during
increasingly long ocean trips, as the distance between islands increased significantly as they
moved toward the east. They invented and refined a process that could be repeated accurately
every time a new island was discovered. At the time of Columbus, most navigators stayed close
to the coast, as they sailed toward the East Indies around Africa using dead reckoning. Columbus
applied an existing navigation process to cross the Atlantic. In both cases, the navigator had a
goal (e.g., settling a specific island, finding a transatlantic route to the Indies) and a set of
survival skills applied to local situations that eventually supported that goal (e.g., recognizing
the proximity of islands, ability to set a course, ability to correct a course). If Columbus and the
Polynesians had met and been able to communicate, each could have learned a range of new
skills and modified their respective processes accordingly. This transfer of knowledge, however,
assumes that Columbus and the Polynesians would have been able to share a common model of
navigation.
In the previous chapters, we used UML as a modeling language for describing and
communicating about systems. In this chapter, we focus on models of the software development
process, called software life cycle models. Modeling the software life cycle is a difficult
undertaking because it is a complex and changing system. Like software systems, software life
cycles can be described by several different models. Most proposed life cycle models have
focused on the activities of software development and represented them explicitly as class
objects. This view of the software life cycle is called activity centered. Another view of the
software life cycle is to focus on the work products created by these activities. This other view is
called entity centered. The activity-centered view leads participants to focus on how work
products are created. The entity-centered view leads participants to focus on the content and
structure of the work products. Figure 15-1 depicts a simple life cycle for software development
using three activities: Problem definition, System development, and System operation.
Figure 15-2 shows an activity-centered view of this simplistic life cycle model. The
associations between the activities show a linear time dependency, which is implied by the use of
the activity diagram notation: the problem statement precedes system development, which in
turn precedes system operation. Other time dependencies are possible.
For example, in the software life cycle of Figure 15-3, the activities System development
and Market creation can be done concurrently.
Figure 15-4 is an entity-centered view of the model depicted by Figure 15-2. Software
development produces four entities: a Market survey document, a Requirements
specification document, an Executable system, and a Lessons learned document.
The activity-centered and entity-centered views are complementary, as illustrated by
Figure 15-5. Every product is generated by one or more activities. The Problem definition
activity uses a Market survey document as input and generates a Requirements
specification document. The System development activity takes the Requirements
specification document as input and produces an Executable system. System operation
624 Chapter 15 • Software Life Cycle
Software development
«include» «include»
«include»
Figure 15-1 Simple life cycle for software development (UML use case diagram).
Figure 15-2 Simple life cycle for software development (UML activity diagram).
System
development
activity
System
upgrade
activity
Market
creation
activity
generates a Lessons learned document that could be used during the development of the next
product. Alternatively, every activity generates one or more products.
In Section 15.2, we describe the life cycle activities defined by the IEEE 1074 standard
[IEEE Std. 1074-2006]. This standard introduces precise definitions that enable project
participants to understand and communicate effectively about the life cycle. In this section, we
also describe the information flows between activities.
Introduction: Polynesian Navigation 625
Software Development
Requirements specification
document Executable system
Market survey
consumes document
Problem definition
activity
produces
Specification
consumes document
System development
activity
produces
Executable system
consumes
System operation
activity
produces Lessons learned
document
Figure 15-5 Activities and products of the simple life cycle of Figure 15-2 (UML class diagram).
In Section 15.3, we describe the Capability Maturity Model, a framework for assessing the
maturity of organizations and their life cycles. This framework enables organizations and
projects to be compared based on the activities of their life cycles.
In Section 15.4, we survey several activity-centered life cycle models that propose
different orderings of activities. We discuss two sequential models, the waterfall model [Royce,
1970] and the V-model [Jensen & Tonies, 1979], and two iterative models, the spiral model
[Boehm, 1987] and the Unified Software Process [Jacobson et al., 1999]. We also describe an
entity-based life cycle model based on issues.
626 Chapter 15 • Software Life Cycle
• the Requirements Process during which the developers develop the system models
• the Design Process during which developers decompose the system into components
• the Implementation Process during which developers realize each component.
Development Requirements
Design
Implementation
Post-Development Installation
Operation and Support
Maintenance
Retirement
• Define and Develop Software Requirements during which the functionality of the
system is defined precisely
• Define Interface Requirements during which the interactions between the system and
the user are defined precisely
• Prioritize and Integrate Software Requirements during which all requirements are
integrated for consistency and prioritized by client preference.
Tasks consume resources (e.g., personnel, time, money) and produce a work product.
During planning, activities are decomposed into project-specific tasks, are given a start and
ending date, and are assigned to a team or a project participant (Figure 15-6). During the project,
actual work is tracked against planned tasks, and resources are reallocated to respond to
problems.
Money
*
Participant
*
Process *
Resource
*
Work Unit
consumed by *
*
Activity Task Work Product
produces
Figure 15-6 Model of the software life cycle (UML class diagram). A software life cycle consists of
process groups, which in turn consist of processes. A process accomplishes a specific purpose (e.g.,
requirements, design, installation). A process consists of activities, which in turn consist of subactivities or
tasks. Tasks represent the smallest piece of work that is relevant to management. Tasks consume resources
and produce one or more work products. A project is an instance of a software life cycle.
628 Chapter 15 • Software Life Cycle
The processes required by IEEE 1074 are listed in Table 15-1. From the developers’ point
of view, the first six processes (i.e., the Life Cycle Modeling, the Project Management, and the
Pre-Development Processes) have often already been initiated before their involvement with the
project.
During Life Cycle Modeling, the project manager customizes the activities defined in IEEE 1074
for a specific project (i.e., for an instance of a life cycle model). Not all projects require the same
activities and the same sequencing of activities. For example, projects that do not deal with a
persistent storage do not need to execute the activity Design Data Base. The selected life cycle
model serves as input to the Project Initiation Process described in the next section.
During Project Management, the project manager initiates, monitors, and controls the project
throughout the software life cycle. Project Management consists of three processes (Table 15-2).
The Project Initiation Process creates the infrastructure for the project. During this
process, the task plan, schedule, budget, organization, and project environment are defined. The
project environment includes project standards, communication infrastructure, meeting and
reporting procedures, development methodology, and development tools. Most of the
Table 15-2 Project management processes.
a. The Clause Column in this table and the other tables in this chapter refers to a clause number in IEEE 1074.
This is a cross-reference to the standards document as published in [IEEE Std. 1074-2006].
IEEE 1074: Standard for Developing Life Cycle Processes 629
information generated during this process is documented in the Software Project Management
Plan (SPMP). The Project Initiation Process is complete as soon as a stable environment for the
project is established.
The Project Monitoring and Control Process ensures that the project is executed
according to the task plan and budget. If the project manager observes any deviation from the
schedule, she will take corrective action such as reallocating some of the resources, changing
procedures, or replanning the schedule. The SPMP is updated to reflect any of these changes.
The Project Monitoring and Control Process is active throughout the life cycle.
The Software Quality Management Process ensures that the system under construction
meets the required quality standards (which were selected during Project Initiation). This
process is executed by a separate quality management team to avoid conflicts of interest (i.e., the
goal of the developers is to complete the system on time, and the goal of the quality management
team is to ensure that the system is not considered complete until it meets the required quality
standard). The Software Quality Management Process is active throughout most of the life cycle.
We described in Chapter 14, Project Management, the activities of Project Initiation and
Project Monitoring and Control that are related to planning, organization, and tracking. The
activity Establish Project Environment requires particular attention in the context of a team-
based project. One of the critical parts of the project environment is the communication
infrastructure that will support the dissemination of information among the participants. To be
able to react rapidly to changes and report problems without introducing unreasonable
overhead, all project participants need to be aware of the information flow through the project
and the mechanisms for disseminating information. We described in Chapter 3, Project
Organization and Communication, the activities related to defining and using the
communication infrastructure. Note that to define the development team structure, and thereby
the communication infrastructure, the initial system architecture (produced by the System
Allocation Process described in the next section) must first be defined.
15.2.4 Pre-Development
During Pre-Development, management (or marketing) and a client identify an idea or a need.
This can be addressed with a new development effort (greenfield engineering), or a change to the
interface of an existing system (interface engineering), or software replacement of an existing
business process (reengineering). The System Allocation Process establishes the initial system
architecture and identifies hardware, software, and operational requirements. Note that the
subsystem decomposition is the foundation of the communication infrastructure among the
project members. The requirements, subsystem decomposition, and communication
infrastructure are described in the Problem Statement,1 which serves as input for the
Development process. The Pre-Development processes are depicted in Table 15-3.
1. The Statement of Need mentioned in the IEEE 1074 standard is similar to the Problem Statement, but does not
contain any project organization information.
630 Chapter 15 • Software Life Cycle
15.2.5 Development
Development consists of the processes directed toward the construction of the system
(Table 15-4).
The Requirements Process starts with the informal description of the requirements and
defines the system requirements in terms of high-level functional requirements, producing a
complete specification of the system and a prioritization of the requirements. We describe the
Requirements Process in Chapter 4, Requirements Elicitation, and Chapter 5, Analysis.
The Design Process takes the architecture produced during the System Allocation Process
and the specification from the Requirements and produces a coherent and well-organized
representation of the system. The activities Perform Architectural Design and Design Interfaces
Table 15-4 Development processes.
refine the subsystem decomposition. This also includes the allocation of requirements to
hardware and software systems, the description of boundary conditions, the selection of off-the-
shelf components, and the definition of design goals. The detailed design of each subsystem is
done during the Perform Detailed Design activity. The Design Process results in the definition
of design objects, their attributes and operations, and their organization into packages. By the
end of this activity, all methods and their type signatures are defined. New classes are introduced
to take into account nonfunctional requirements and component-specific details. The Design
process used in this book is described in Chapter 6, System Design: Decomposing the System,
Chapter 8, Object Design: Reusing Pattern Solutions, and Chapter 9, Object Design: Specifying
Interfaces.
The Implementation Process takes the design model and produces an equivalent
executable representation. The Implementation Process includes integration planning and
integration activities. Note that tests performed during this process are independent of those
performed during quality control or Verification and Validation. We describe in Chapter 11,
Testing, the testing and integration aspects of the Implementation.
15.2.6 Post-Development
Post-Development consists of the installation, maintenance, operation and support, and
retirement processes (Table 15-5).
During Installation, the system software is distributed and installed at the client site. The
installation culminates with the client acceptance test according to the criteria defined in the
Project Agreement. Operation and Support is concerned with user training and operation of the
system. Maintenance is concerned with the resolution of software errors, faults, and failures
after the delivery of the system. Maintenance requires a ramping of the software life cycle
Table 15-5 Post-development processes.
processes and activities into a new project. Retirement removes an existing system, terminating
its operations or support; this occurs when the system is upgraded or replaced by a new system.
To ensure a smooth transition between the two systems, both systems are often run in parallel
until the users have gotten used to the new system. Except for client delivery and acceptance, we
do not address the post-development processes in this book.
Collect and Analyze Metric Data generates project data that can also serve for future projects
and contribute to the knowledge of the organization. The activities Plan Testing and Develop
Test Requirements can be initiated as early as after the completion of the requirements. In large
projects, these tasks are performed by different participants than the developers. We describe
mechanisms for reviews, audits, and inspections in Chapter 3, Project Organization and
Communication. We describe specific reviews associated with requirements elicitation, analysis,
and system design in Chapters 4, 5, and 6, respectively. We describe testing activities in
Chapter 11, Testing.
The Configuration Management Process focuses on the tracking and control of changes of
work products. Items under configuration management include the source code for the system,
all development models, the software project management plan, and all documents visible to the
project participants. We describe configuration management in Chapter 13, Configuration
Management.
The Documentation Process deals with the work products (excluding code), documenting
the results produced by the other processes. Document templates are selected during this
activity. The IEEE 1074 standard, however, does not prescribe any specific document or
template. Development and cross-development specific documentation issues are discussed in
chapters where documents are produced (e.g., Chapter 5, Analysis, discusses the Requirements
Analysis Document; Chapter 13, Configuration Management, discusses the Software
Configuration Management Plan).
Basic project management processes are used to track cost and schedule. New projects are based
on the experience of the organization with similar previous projects and success is predictable
for projects in similar application domains. The client interacts with the organization at well-
defined points in time, such as client reviews and the client acceptance test, allowing some
corrections before delivery.
Level 3: Defined. This level uses a documented software life cycle model for all managerial
and technical activities across the organization. A customized version of the model is produced
at the beginning of each project during the Life Cycle Modeling activity. The client knows the
standard model and the model selected for a specific project.
Level 4: Managed. This level defines metrics for activities and deliverables. Data are
constantly collected during the duration of the project. As a result, the software life cycle model
can be quantitatively understood and analyzed. The client is informed about risks before the
project begins and knows the measures used by organization.
Level 5: Optimized. The measurement data are used in a feedback mechanism to improve the
software life cycle model over the lifetime of the organization.The client, project managers, and
developers communicate and work together during the development of the project.
To be able to measure the maturity of an organization, a set of key process areas (KPA)
has been defined by the Software Engineering Institute (SEI). To achieve a specific level of
maturity, the organization must demonstrate that it addresses all the key process areas defined
for that level. Some of these key process areas go beyond activities defined in the IEEE 1074
standard. Table 15-7 shows a mapping between maturity level and key process areas.
Table 15-7 Mapping process maturity level and key process areas.
3. Defined Focus: Establish an infrastructure that allows a single effective software life cycle
model across all projects.
• Organization process focus: The organization has a permanent team to constantly
maintain and improve the software life cycle model.
• Organization process definition: A standard software life cycle model is used for
all projects in the organization. A database is used for software life cycle-related
information and documentation.
• Training program: The organization identifies the needs for training for specific
projects and develops training programs.
• Integrated software management: Each project team can its tailor its specific
process from the standard process.
• Software product engineering: The software is built in accordance with the
defined software life cycle, methods, and tools.
• Intergroup coordination: The project teams interact with each other to address
requirements and issues.
• Peer reviews: Developers examine each other’s deliverables to identify potential
defects and areas where changes are needed.
4. Managed Focus: Quantitative understanding of the software life cycle process and deliverables.
• Quantitative process management: Productivity and quality metrics are defined
and constantly measured across the project. It is critical that these data are not
immediately used during the project, in particular to assess the performance of
developers, but are stored in a database to allow for comparison with other
projects.
• Quality management: The organization has defined a set of quality goals for
software products. It monitors and adjusts the goals and products to deliver high-
quality products to the user.
5. Optimized Focus: Keep track of technology and process changes that may cause changes in the
system model or deliverables, even during a project.
• Defect prevention: Failures in past projects are analyzed, using data from the
metrics database. If necessary, specific actions are taken to prevent those defects
from occurring again.
• Technology change management: Technology enablers and innovations are
constantly investigated and shared throughout the organization.
• Process change management: The software process is constantly refined and
changed to deal with inefficiencies identified by the software process metrics.
Constant change is the norm, not the exception.
636 Chapter 15 • Software Life Cycle
System
Allocation
Process
Design
Process
Installation
Process
Maintenance
Process Verification
& Validation
Process
Retirement
Process
Figure 15-7 Process interrelationships in the IEEE 1074 standard (UML activity diagram, adapted from
[IEEE Std. 1074-2006]). As suggested by this picture, dependencies among processes and activities are
complex and seldom allow a sequential execution of processes.
Life Cycle Models 637
In this section we review several life cycle models. Most of these models focus on the
development processes exclusively.
Waterfall model
The waterfall model, first described by Royce [Royce, 1970], is an activity-centered life
cycle model that prescribes sequential executions of subsets of the development processes and
management processes described in the previous section (Figure 15-8).
Project
Initiation
Process
Concept
Exploration
Process
System
Allocation
Process
Requirements
Process
Design
Process
Implementation
Process
Verification
& Validation
Process
Installation
Process
Operation &
Support Process
Figure 15-8 The waterfall model of software development is an activity-centered view of the software life
cycle. Software development activities are performed in sequence (UML activity diagram adapted from
[Royce, 1970] using IEEE 1074 names; project management and cross-development processes are omitted).
638 Chapter 15 • Software Life Cycle
All requirements activities are completed before the system design activity starts. The goal
is never to turn back once an activity is completed. The key feature of this model is the constant
verification activity (called “verification step” by Royce) which ensures that each development
activity does not introduce unwanted or delete mandatory requirements. This model provides a
simple (or even simplistic) view of software development that measures progress by the number
of tasks that have been completed. The model assumes that software development can be
scheduled as a step-by-step process that transforms user needs into code.
V-Model
The V-model is a variation of the waterfall model that makes explicit the dependency
between development activities and verification activities. The difference between the waterfall
model and the V-model is that the latter depicts the level of abstraction. All activities from
requirements to implementation focus on building an increasingly detailed representation of the
system, whereas all activities from implementation to operation focus on validating the system.
Figure 15-9 depicts the V-model.
System
Requirements Operation
Analysis
Software Client
Requirements Acceptance
Elicitation
Requirements System
Analysis Integration
& Test
Preliminary Component
Design Integration
& Test
Detailed Unit
Design Test
Implementation
Figure 15-9 V-model of software development (UML activity diagram; adapted from [Jensen & Tonies,
1979]). The horizontal object flow denotes the information flow between activities at the same abstraction
level. The V-shape layout of the activities was conserved to reflect the original drawing. However, the layout
of the activities has no semantics in UML.
Life Cycle Models 639
Higher levels of abstractions of the V-model deal with the requirements in terms of
elicitation and operation. The middle level of the V-model focuses on mapping the problem into a
software architecture. The lower level of the V-model focuses on details such as the assembly of
software components and the coding of new ones. For example, the goal of the Unit Test activity
is to validate units against their description in the detailed design. The Component Integration
and Test activity validates functional components against the preliminary (or high-level) design.
In many aspects, the waterfall model and its variants are simplistic abstractions of the software
development process. The weakness of these models is that they assume that after an activity is
finished and reviewed, the associated work product can be baselined. Such an idealized model is
appropriate only if the specification of the requirements is highly reliable and stable. In practice,
system development rarely conforms to this ideal model. Changes during an activity often
require reworking a prior activity.
Spiral model
Boehm’s spiral model [Boehm, 1987] is an activity-centered life cycle model that was
devised to address the source of weaknesses in the waterfall model, in particular, to
accommodate infrequent change during the software development. It is based on the same
activities as the waterfall model; however, it adds several activities such as risk management,
reuse, and prototyping to each activity. These extended activities are called cycles or rounds.
The spiral model focuses on addressing risks incrementally, in order of priority. Each
round is composed of four phases (Figure 15-10). During the first phase (upper left quadrant),
developers explore alternatives, define constraints, and identify objectives. During the second
phase (upper right quadrant), developers manage risks associated with the solutions defined
during the first phase. During the third phase (lower right quadrant), developers realize and
validate a prototype or the part of the system associated with the risks addressed in this round.
The fourth phase (lower left quadrant) focuses on planning the next round based on the results of
the current round. The last phase of the round is usually conducted as a review involving the
project participants, including developers, clients, and users. This review covers the products
developed during the previous and current rounds and the plans for the next round. Boehm’s
spiral model distinguishes the following rounds: Concept of Operation, Software Requirements,
Software Product Design, Detailed Design, Code, Unit Test, Integration and Test, Acceptance
Test, and Implementation.2
2. Note that the figure illustrates only the first three activities (Concept of Operation, Software Requirements, and
Software Product Design). The rounds for the remaining activities—Detailed Design, Code, Unit Test, Integration
and Test, Acceptance Test—are not shown in detail, but only as blocks at the end of the last layer of the spiral.
640 Chapter 15 • Software Life Cycle
Each round follows the waterfall model and includes the following activities:
1. Determine objectives
2. Specify constraints
3. Generate alternatives
4. Identify risks
5. Resolve risks
6. Develop and verify next-level product
7. Plan.
The first two activities define the problem addressed by the current cycle. The third
activity, Generate alternatives, defines the solution space. The activities Identify risks and
Resolve risks identify future problems that may result in high cost or cancellation of the project.
The activity Develop and verify next-level product is the realization of the cycle. The activity
Plan is a management activity to prepare for the next cycle. These rounds can be viewed in a
Risk
analysis
Risk
analysis
Risk
analysis
P1
Prototype3
Prototype2
Prototype1
Concept of
Requirements operation
plan
Software System
Requirements Product Detailed
Design Design
Development Requirements
plan validation
P2
Code
Figure 15-10 Boehm’s spiral model (adapted from [Boehm, 1987]). The distance from the origin
represents the cost accumulated by the project. The angle from the horizontal represents the type of activity.
For example, the project P1 is currently in the risk analysis activity associated with software requirements.
The project P2 is in the development of the system product design.
Life Cycle Models 641
polar-coordinate system shown in Figure 15-10. The first round, Concept of Operation, starts in
the upper left quadrant. Subsequent rounds are represented as additional layers on the spiral. The
notation makes it easy to determine the status of the project at any time. The distance from the
origin is the cost accumulated by the project. The angular coordinate indicates the progress
accomplished within each phase.
The Unified Software Development Process (also called the Unified Process) is a life
cycle model proposed by Booch, Jacobson, and Rumbaugh [Jacobson et al., 1999]. The unified
process distinguishes important time ranges called cycles in the lifetime of a software system.
Note that these are different from the cycles in the spiral model: they can be thought of as
characterizing the stage of maturity of the software system during its lifetime. Cycles have no
specific names. However, starting with the “birth” of the system, we can think of the system to
be in the “childhood,” “adulthood,” or “retirement” cycle until it “dies.” A cycle generally ends
with a release of the system as a product to a customer. Each cycle can be in one of four states
called phases: Inception, Elaboration, Construction, and Transition (see Figure 15-11). During
the inception phase, the scope of the system is established, in particular what should be included
and not included. This phase also identifies the use cases that will drive the trade-off decisions
between conflicting design goals; these use cases are also called the core use cases. At least one
candidate software architecture is identified, and the core use cases are demonstrated against this
architecture. A first estimation and schedule for the entire project, including detailed estimates
for the elaboration phase, are also established during this phase.
During the elaboration phase, the user’s view of the requirements is captured in a
repository. The software architecture is designed, and an initial set of build vs. buy decisions is
made, so that cost, schedule, and resource estimates can be derived. During the construction
phase, components are bought or built, and the release is compared with the acceptance criteria.
The transition phase is entered when the baselined system is mature enough for deployment to
the user community.
Inception Elaboration
Transition Construction
Figure 15-11 States of a software system called phases in the Unified Process. The Unified Process
distinguishes four phases: inception, elaboration, construction, and transition (UML state machine diagram).
642 Chapter 15 • Software Life Cycle
Each phase can consist of a number of iterations. Each iteration addresses a set of related
use cases or mitigates some of the risks identified at the beginning of the iteration. An iteration
in the Unified Process is generally associated with a project as we defined it in Chapter 14,
Project Management.
For the duration of each iteration, several activities are performed in parallel. To
emphasize the parallelism and the fact that they are active across the complete iteration, these
activities are called workflows in the Unified Process.3 Development-oriented workflows are
called engineering workflows. The Unified Process distinguishes between Requirements,
Design, Implementation, and Test as engineering workflows (Figure 15-12). These workflows
have already been described in previous chapters of this book. The Requirements workflow
involves analysis of the application domain and creation of requirements artifacts such as the
analysis model (see Chapter 5). The Design workflow focuses on the creation of solution and
design artifacts such as the system design model (see Chapter 6) or the object design model (see
Chapter 8). The Implementation workflow realizes the solution in source code (see Chapter 10).
The Test workflow is involved in the testing of the models and the maintenance of
implementation and deployment artifacts (source code) (see Chapter 11).
The Unified Process distinguishes four cross-functional activities called supporting
workflows: Management, Environment, Assessment, and Deployment. The Management
workflow addresses all planning aspects for the software system as described in Chapter 14. The
Environment workflow is concerned with the automation of the software process itself and
Figure 15-12 Workflows in the unified software life cycle used by Royce [Royce, 1998] (UML class
diagram).
3. The Unified Process does not follow the naming conventions in the IEEE standard. Workflows can be considered as
special activities spanning more than one iteration (project). Engineering workflows are project functions because
their duration is the same as the duration of an iteration, i.e., the project. The term supporting workflow can be
equated with integral process.
Life Cycle Models 643
Management Workflow
Environment Workflow
Requirements Workflow
Design Workflow
Implementation Workflow
Assessment Workflow
Deployment Workflow
Time
Figure 15-13 The seven workflows in the Unified Process–Management, Environment, Requirements,
Design, Implementation, Assessment, and Deployment–are project functions performed during the entire
lifetime of a system. Each of the workflows has different resource needs depending on the phase and
iteration of the software system. The histograms for each workflow indicate the amount of work per
iteration—the higher the block, the more resources are consumed by the workflow in that iteration (adapted
from [Jacobson et al., 1999] and [Royce, 1998]).
644 Chapter 15 • Software Life Cycle
All models are related to each other through traceability dependencies. A model element
can be traced to at least one element in an associated model. For example, every use case has a
traceable relationship with at least one class in the analysis model. Traceability allows us to
understand the effect of change in one model on other models, in particular, it allows us to
provide traceability in the requirements.
The dependencies between the models in Figure 15-14 can be maintained in different
ways. During forward engineering, analysis and design models are established from the use
case model, and the implementation model and test models are then generated from these
models. During reverse engineering, the analysis and design models are extracted or updated
from existing code. Round-trip engineering is a combination of reverse and forward
engineering. It allows the developer to switch between these development modes at any time,
depending on which model is undergoing the most amount of change.
realized by
Analysis model
distributed by
Design model
implemented by
Deployment model
verified by
Implementation
model
Test model
Figure 15-14 Entity-centered life cycle view of the models of the Unified Process (UML class diagram).
The dependencies depict traceability. There are dependencies between all models. Only the dependencies
between the use case model and the other models are shown [Jacobson et al., 1999].
If the time between changes is significantly smaller than the duration of an activity, and if
changes can occur in the application domain as well as in the solution domain, both the waterfall
model and the spiral model exhibit problems. For example, assume that the development team
selects the hardware platform and that new platforms appear every three to four years. As long
as the project time is significantly less than three years, the knowledge of the development team
at the beginning of the project is usually sufficient to select a platform once during system
design. However, if a new platform appears every three to four months and the duration of the
Life Cycle Models 645
project is also three or four months, the platform decision will probably have to be reconsidered
during the project.
In this section, we describe an entity-centered life cycle model, called the issue-based life
cycle model, that aims at dealing with frequent changes. This model is based on the rationale
behind the system as an issue model (Chapter 12, Rationale Management). Each project starts
with a set of issues. If the project starts from scratch, these issues are drawn from the project
manager’s experience or from a standard template. In a reengineering or interface project, issues
may be available from the rationale of the previous project. If the project has a long history, the
rationale should be well populated. Examples of issues are What should be the initial teams?
Should the mechanic have access to driver-specific information? What is the appropriate
middleware? What software architecture should we use? and Which implementation language
should we use? All issues are stored in an issue base accessible to project participants.
The status of an issue can be closed or open. A closed issue is an issue that has been
resolved. For example, a closed issue can be a decision about the platform on which the system
should run (e.g., Solaris). Closed issues can be reopened, however, as changes occur in the
application or solution domain. For example, if we need to support additional platforms (e.g.,
Linux and Windows NT), we reopen the issue, reevaluate the alternatives, and provide a new
resolution. Open issues are resolved by discussion and negotiation among project participants
(see Chapter 3, Project Organization and Communication). An issue i2 depends on another
issue i1 if the resolution of i1 constrains the alternatives available for i2. Tracking the
dependencies among issues enables developers to assess the impact of revisiting a given issue.
The issue base also tracks dependencies among issues. Figure 15-15 shows a snapshot of the
issue base of a project, depicting the issue status and dependencies.
i1:Issue
status={Closed} i4:Issue
status = {Open}
i2:Issue
status = {Open} i5:Issue
status={Closed}
i3:Issue
status = {Open}
i6:Issue
status = {Open}
Figure 15-15 Snapshot of a project issue base (UML object diagram). Issues i1 and i5 have been
resolved, whereas all other issues are still open. Dependencies among issues indicate that the resolution of
an issue can constrain the alternatives for dependent issues.
646 Chapter 15 • Software Life Cycle
Issues can be mapped to the activities of life cycle models described earlier. For example,
assume the activities Planning and System Design are part of the selected life cycle model. How
do we set up the initial teams? can be categorized as a planning issue, and What software
architecture shall we use? can be categorized as a system design issue. The status of issues can
then be used to track the status of each activity. If any system design issues are still open, the
System Design activity has not yet been completed. The life cycle models we described earlier
can then be seen as special cases of the issue-based model. In the Waterfall model, for example,
developers completely resolve the issues associated with an activity before moving to the next
activity. Figure 15-16 depicts the state of a project during System Design.
In Boehm’s spiral model, risks correspond to issues that are evaluated and reopened at the
beginning of each round. Issues are resolved in the order of their priority as defined during risk
analysis. Note, however, that “issue” is a more general concept than “risk.” For example, the
issue Which access control model should we use? is a design problem, not a risk.
In the general case (Figure 15-17), all activities may still have associated open issues,
which means that all activities must be managed concurrently. The goal of the project manager is
to keep the number of open issues small and manageable without imposing time or activity-
based constraints on the resolution of issues. Using issues and their dependencies for managing
the life cycle activities allows all life cycle activities to proceed concurrently.
i1:Issue i4:Issue
status={Closed} status={Closed}
i2:Issue
i5:Issue
status={Closed}
status={Closed}
i3:Issue
status={Closed} System Design
i6:Issue
status = {Open}
Figure 15-16 The waterfall model as a special case of the issue-based life cycle model (UML object
diagram). All issues that belong to the same issue category are contained in the same UML package. In the
project status shown in the figure, all the requirements elicitation and analysis issues have been closed; that
is, the requirements elicitation and analysis activities have been completed.
Further Readings 647
i1:Issue i4:Issue
status={Open} status={Open}
i2:Issue
i5:Issue
status={Closed}
status={Closed}
i3:Issue
status={Closed} System Design
i6:Issue
status = {Open}
Figure 15-17 In a complex project state, all activities can still have some open issues, which means that
all activities need to be managed concurrently.
Waterfall-based software life cycle models are still widely used. Into the 1990s, software
companies contracted by the U.S. Department of Defense, for example, were required to use the
2167A standard [DoD-STD-2167A], which was based on the waterfall model. The sawtooth
model [Rowen, 1990] was an attempt to improve the V-model by solving discrepancies between
the user and software developer’s perception of the system at different levels of abstractions over
time.
ISO/IEC 12207: 1995 Standard for Information Technology–Software life cycle processes
[ISO/IEC 12207, 1995] is a framework for software life cycle processes, with well-defined
terminology, processes, activities, and tasks to be applied during the acquisition, supply,
development, operation, and maintenance of software. This standard is occasionally (and
erroneously) thought to be a replacement for IEEE 1074, the standard covered in this chapter
[IEEE Std. 1074-2006]. ISO/IEC 12207 is a high-level description of the activities needed in a
two-party relationship, one acquiring software, the other supplying software. It describes an
architecture for software life cycles, but does not specify details about how particular activities
should be implemented or performed. The IEEE 1074 standard is at a lower level of abstraction,
as it is targeted for the user who needs to build a specific software life cycle for project or set of
projects. For example, IEEE 1074 specifies dependencies and interfaces between the activities in
terms of documents and work products. IEEE has subsequently adopted ISO/IEC 12207 as
648 Chapter 15 • Software Life Cycle
IEEE/EIA 12207.0-1996 with the addition of guidance and clarifications and revised IEEE 1074
in 1997 so that both standards are compatible [IEEE/EIA, 1996].
The Unified Process is becoming the de facto standard for iterative activity-centered
software life cycle models. It has its roots in the Objectory process described in [Jacobson et al.,
1992] and [Jacobson et al., 1995]. Objectory was the basis for the Rational Unified Process
[Kruchten, 1998], which in turn formed the basis for the Unified Process.
15.6 Exercises
15-1 Model as classes the activities of Figure 15-2 and the work products of Figure 15-4 and
draw a UML class diagram depicting the relationships between activities and work
products.
15-2 Assume that the waterfall model shown in Figure 15-8 has been derived from the IEEE
standard model in Figure 15-7 during the activity Life Cycle Modeling. What processes
and activities have been omitted in the waterfall model?
15-3 Redraw Boehm’s spiral model in Figure 15-10 as a UML activity diagram. Compare
the readability of the original figure with the activity diagram.
15-4 Draw a UML activity diagram describing the dependency between activities for a life
cycle in which requirements, design, implementation, test, and maintenance occur
concurrently. (This is called an evolutionary life cycle.)
15-5 Describe how testing activities can be initiated well before implementation activities.
Explain why this is desirable.
15-6 In project management, a relationship between two tasks is usually interpreted as a
precedence relationship; that is, one task must complete before the next one is initiated.
In a software life cycle, a relationship between two activities is a dependency; that is,
one activity uses a work product from another activity. Discuss this different. Provide
an example in the context of the V-model.
15-7 Assume you are part of the IEEE committee that will revise the IEEE 1074 standard.
You have been assigned the task of modeling communication as an explicit integral
process. Make a case for the activities that would belong to this process.
References 649
References
[Boehm, 1987] B. Boehm, “A spiral model of software development and enhancement,” Software
Engineering Project Management, pp. 128-142, 1987.
[DoD-STD-2167A] DoD-STD-2167A, Military Standard, Defense Systems Software Development, US
Department of Defense, Washington, DC, 1988.
[IEEE Std. 1074-2006] IEEE Standard for Developing Software Life Cycle Processes, IEEE Computer
Society, New York, 2006.
[IEEE/EIA, 1996] IEEE/EIA 12207.0-1996. Industry Implementation of International Standard ISO/
IEC 12207: 1995 Standard for Information Technology–Software life cycle
processes, IEEE Computer Society & Electronic Industries Association, March
1998.
[ISO/IEC 12207, 1995] ISO/IEC 12207, Information technology–Software life cycle processes, International
Organization for Standardization & International Electrotechnical Commission,
August 1995.
[Jacobson et al., 1992] I. Jacobson, M. Christerson, P. Jonsson, & G. Overgaard, Object-Oriented Software
Engineering—A Use Case Driven Approach, Addison-Wesley, Reading, MA, 1992.
[Jacobson et al., 1995] I. Jacobson, M. Ericsson, & A. Jacobson, The Object Advantage: Business Process
Reengineering with Object Technology, Addison-Wesley, Reading, MA, 1995
[Jacobson et al., 1999] I. Jacobson, G. Booch, & J. Rumbaugh, The Unified Software Development Process,
Addison-Wesley, Reading, MA, 1999.
[Jensen & Tonies, 1979] R. W. Jensen & C. C. Tonies, Software Engineering, Prentice Hall, Englewood
Cliffs, NJ, 1979.
[Kruchten, 1998] P. Kruchten, The Rational Unified Process: An Introduction, Addison-Wesley,
Reading, MA, 1998.
[Paulk et al., 1995] M. C. Paulk, C. V. Weber, & B. Curtis (eds.), The Capability Maturity Model:
Guidelines for Improving the Software Process, Addison-Wesley, Reading, MA,
1995.
[Rowen, 1990] R. B. Rowen, “Software project management under incomplete and ambiguous
specifications,” IEEE Transactions on Engineering Management, Vol. 37, No. 1,
1990.
[Royce, 1970] W. W. Royce, “Managing the development of large software systems,” in Tutorial:
Software Engineering Project Management, IEEE Computer Society, Washington,
DC, pp. 118–127, 1970.
[Royce, 1998] W. Royce, Software Project Management: A Unified Framework, Addison-Wesley,
Reading, MA, 1998.
16
650
P 16
Methodologies:
Putting It All Together
We should be careful to get out of an experience only the
wisdom that is in it—and stop there; lest we be like the cat that
sits down on a hot stove-lid. She will never sit down on a hot
stove-lid again—and that is well; but also she will never sit
down on a cold one anymore.
—Mark Twain, Following the Equator: A Journey
Around the World
651
652 Chapter 16 • Methodologies: Putting It All Together
When Mount Everest (8,850 m) was successfully climbed with oxygen in 1953—after many
unsuccessful attempts without oxygen—it was assumed that one had to use oxygen to reach a summit in
such an extreme altitude. When the second highest peak K2 (8,611 m) was attempted by an Italian
expedition in 1954, oxygen was included in the equipment list.
Unplanned bivouac on K2
On July 30, 1954, Walter Bonatti and high-altitude porter Mahdi started at Camp 8 with a crucial carry
of oxygen to Camp 9. The oxygen load was for the lead climbers Achille Compagnoni and Lino
Lacedelli, who had arrived at Camp 9 earlier. The expedition leader had selected them as candidates for
the final summit push, and the oxygen was intended to help them climb in the extreme altitude. When
Bonatti and Mahdi arrived at the location of the agreed Camp 9 spot, they could not find anybody.
Constantly searching for Compagnoni and Lacedelli, they eventually established voice communication
with the lead climbers, but they were not able to join them. Around 9:30 P.M. they were forced to
bivouac.
An unplanned bivouac at an altitude of 8,100 m is a very serious affair. Bonatti and Mahdi endured a
horrible night in a snow blizzard without any protection from the winds. Unbelievably, Bonatti came out
of the ordeal unhurt, but Mahdi got severe frostbite and eventually had to undergo various amputations
on his fingers and toes. The next day, Bonatti and Mahdi left their load at the bivouac site and stumbled
down to Camp 8. Compagnoni and Lacedelli left their tent, went to the bivouac site to pick up the
oxygen and started for the summit. In the official account of the climb, Compagnoni and Lacedelli ran
out of oxygen about 200 m below the summit, which they reached at 6 P.M. Some of the summit pictures
show the oxygen packs at their feet.
Discussion
The fact that Bonatti was unscathed from the bivouac led to many accusations, in particular that he had
tried to climb K2 against the order of the expedition leader.
Compagnoni and Lacedelli claimed they ran out of oxygen early because Bonatti had used up part of the
oxygen supply during the unplanned bivouac so he would stay strong enough for the summit attempt.
Bonatti did not have a respirator mask with him, so he could have not possibly used oxygen. A detailed
analysis of the summit pictures in 1993 demonstrated that Compagnoni and Lacedelli had worn their
oxygen masks all the way up to the summit of K2 [Marshall, 2001]. Why did they lie? Marshall thinks
that Compagnoni must have been horrified when going back to Camp 8 after the successful summit
push to discover what happened the night before. He must have worried he would be blamed,
particularly if he felt even partially responsible for the unplanned bivouac. He must have also felt
threatened when he was questioned by the expedition leader about Mahdi’s injuries.
Mahdi told his liaison officer, who in turn relayed it to the expedition leader, that Bonatti had intended
to reach the summit. Bonatti cannot possibly have told his intentions to Mahdi, because he spoke only
Italian and Mahdi spoke only Urdu. But how did Mahdi arrive at this conclusion?
1. This discussion leaves out many of the fascinating details of the problems that occurred during the first ascent of
K2. To fully appreciate the complex interdependencies between equipment, motivations, reward structures, hidden
agendas, expectations, novices and experts, and different view points, we refer the reader to the K2 chapters in
Bonatti’s book [Bonatti, 2001].
Introduction: The First Ascent of K2 653
Before the Second World War, all 8,000-m summit attempts were made with the help of experienced
high-altitude Sherpas from Nepal. Even expeditions to K2 and Nanga Parbat, located in the Karakorum,
hired Sherpas. After the war, Karakorum expeditions would get their climbing permit only if they hired
local porters. The Hunzas in the north of Pakistan were the obvious choice. Hunzas are highly capable
mountain people, but at that time they were still rather inexperienced in high-altitude expeditions.
In 1953, the Hunza Mahdi was hired as a rookie porter during the first ascent of Nanga Parbat. The
Nanga Parbat expedition started as a traditional fixed-rope expedition with a hierarchical organization,
but the final summit push was made by Hermann Buhl in a heroic 40-hour solo climb. Buhl did this
against the order of the expedition leader [Buhl, 1956].
By observing Buhl’s method, Mahdi must have concluded how successful climbing of 8,000-m peaks
had to be done. He had reason to assume that Bonatti was attempting to copy Buhl’s feat, instead of
simply delivering oxygen bottles to the lead climbers so they could reach the summit.
Mahdi’s (false) allegation, that Bonatti had plotted to reach the summit first, must have produced quite
an explosive reaction in Compagnoni because this was in violation of the expedition leader’s orders.
Compagnoni now thought he had a perfect excuse to lay the entire blame for Mahdi’s injuries on
Bonatti. To protect themselves further from being responsible for Mahdi’s injuries, Compagnoni and
Lacedelli most probably invented the story of the early loss of oxygen as well.
An expedition leader has to make several key decisions to create a successful expedition:
which mountain should be climbed, what process should be used, what type of tools, and who
should be part of the team. The answers to these questions lead to a variety of styles. The fixed-
rope style focuses on the creation of a base camp followed by several high camps. These camps
are then connected by fixed ropes that allow the climbers to move fast between these camps. In
the Alpine style, climbers do not use fixed ropes at all. The climbers carry everything they need,
setting up camp only when the night falls or when the weather stops them.
After the failures on Mount Everest and K2 in the 1920s and 1930s, it became an almost
universal opinion that Mount Everest and K2 could not be climbed without oxygen. After Mount
Everest was climbed with oxygen in 1953, oxygen was seen as fundamental to a successful
climb. In 1978, Reinhold Messner and Peter Habeler climbed Mount Everest without oxygen.
Even the question whether an expedition leader is needed at all can be answered in
different ways. From the early 1920s to the late 1960s, many expeditions were organized almost
like the military. They used a hierarchical organization with an expedition leader, several lead
climbers, a support team, many porters, and a liaison officer, whose task was to resolve difficult
communication problems between the porters and the rest of the expedition members. The 1954
expedition to K2 involved more than 300 porters. In 1980, Reinhold Messner went to Mt.
Everest with a support team of two people who accompanied him only to base camp. From there
he went solo without oxygen all the way to the summit and back in one single push.
Like an expedition leader, the project manager of a software project must deal with key
decisions about project goals, software life cycle, project organization, tools, methods, and team
members. Although some of these decisions are made by other people or even imposed by the
organization, the character of the project and the ability for the project manager to respond to
654 Chapter 16 • Methodologies: Putting It All Together
unexpected events are strongly formed by these decisions. In Chapter 14, Project Management,
we discussed project management decisions such as those related to time, schedule, cost, and
project organization. In Chapter 15, Software Life Cycle, we discussed project-independent
decisions, such as process model, dependencies among activities, process maturity, and process
improvement. To deal with the complexity of the material, we discussed these issues separately
in Chapters 14 and 15. During a project, however, the manager has to deal with these issues
together, as they depend on the project context and are strongly interdependent. In this chapter,
we discuss how to approach these decisions within a coherent framework. To facilitate this
discussion, we distinguish between project goals, environment, methods, tools, and software
engineering methodologies (Table 16-1).
The project goals include the criteria that are used to evaluate the success of a project. The
project goal may be simply the on-time delivery of the specified system. In other cases, project
goals can include broader strategic aspects, such as ensuring repeat business from the client or
decreasing business costs.
Table 16-1 Examples of goals, environments, methods, and methodologies in mountain climbing and in
software engineering.
The environment includes the elements present at the beginning of the project. In
software development, the environment is defined by the client and by the current state of the
development organization. The environment constrains the project manager. Examples includes
the participants’ background, the problem type, and the location of the project.
Methods are recipes that the project manager can freely select to bring the project to a
successful end in the given environment. Examples include the methods we described so far in
this book, such as use case requirements elicitation or design pattern reuse. Different methods
work in different environments; an expedition using oxygen needs more porters.
Tools are devices or programs that support specific activities. Mountaineering tools
include oxygen bottles, ropes, pitons, tents, and so on. Software engineering tools include
modeling tools, compilers, debuggers, change tracking tools, and version control tools.
Developers often rely on specific tools to automate steps stipulated by the methods they use.
A software engineering methodology is a collection of methods and tools for developing
and managing a software system to achieve a specific goal in a given environment. It specifies
when methods or tools should be used and what to do when unexpected events occur.
Section 16.2 describes typical elements of the environment that have a high impact on the
project. Section 16.3 discusses typical issues that are addressed by methodologies considering a
given environment and a set of available methods. Section 16.4 describes two general software
engineering methodologies, Extreme Programming [Beck & Andres, 2005] and Royce’s
software engineering unified methodology [Royce, 1998], to illustrate the spectrum of
methodologies available to a software project manager. Section 16.5 discusses the typical
methodology issues in the context of three case studies.
• The local king client is a client who can answer developer questions and make
decisions without having to ask anybody else. The local king has deep knowledge of
656 Chapter 16 • Methodologies: Putting It All Together
the application domain and is usually collocated with the project. Local kings do not
report to anybody else and can effectively collaborate with the developers and the
project manager.
• The proxy client stands in for the real client. Proxy clients are sent by the real client,
either because of lack of time or because of physical distance would make
collaboration with an organization difficult. Proxy clients have sufficient knowledge of
the application domain to answer clarification questions from the developers, but do not
have sufficient power of representation to make major decisions.
• The pseudo client is a member of the development organization (e.g., the marketing
department) who acts as a client, because the system is targeted at a new market
segment, as opposed to a single individual or company. Pseudo clients can make
decisions within a short time and can collaborate well with the development
organization, but have a limited knowledge of the application domain. Often developers
act as pseudo clients.
• No client. Many projects start without a client, for example, when a visionary product
is developed before a market segment is opened. In most cases, however, the project
selects a pseudo client, so that the stakes of the developers can be balanced against the
stakes of the future user.
Table 16-2 Types of clients, decision power, and knowledge of the application domain.
End user access. Although clients may have deep domain knowledge, they have different
stakes than the end user. Clients are usually interested in an early delivery date, with as much
functionality as possible, and low cost. End users are interested in a system with a user interface
that they are familiar with or is easy to learn and that supports their specific task well. When the
stakes of the client and the end user are different, the project success may also depend on a
usability test conducted by end users.
Technological climate. Depending on the requirements expressed by the client, a project may
be constrained in the technological components it has to use. A project improving a legacy
system deals with well-known and mature technology. A project developing a first-of-a-kind
prototype based on a technology enabler may have to deal with preliminary versions of
components and immature technology.
Methodology Issues 657
Geographical distribution. Projects where all participants are located in a single room are
the easiest to manage, as all participants can get to know each other and much of the important
coordination can occur informally. However, there are many situations when single-room
projects are not possible or not desirable. The organization may have resulted from the merger or
acquisition of several individual companies with different skills. In other situations, the
development organization is a consortium or a temporary alliance of several subcontractors,
located in different geographical locations. In yet other situations, some part of the development
organization may need to be collocated with the client. While geographical distribution
increases the availability of skill, it also introduces new challenges, such as slower
communication, lower awareness among teams, and loss of information between sites. In the
first successful ascent of K2, the organization was highly distributed, which contributed to the
information loss: the expedition leader remained in the base camp, the lead climbers were in
Camp 9, and the support climbers bringing the last bottles of oxygen were in Camp 8.
Project duration vs. rate of change. The relationship between the project duration and the
rate of requirements and technological change affects which life cycles can be selected for the
project. A short project in which requirements do not change does not require extensive
configuration management or rationale management. Conversely, a multi-year project with
many requirement changes and staff turnover benefits from systematic configuration
management and rationale management approaches.
to those described by Taylor in the early 1920s [Taylor, 1911] for the production of many
identical cars, but not for building systems that require creative problem solving and reactivity to
change.
The Polynesian navigator begins with an objective instead of a plan. He sets off toward the
objective and responds to conditions as they arise in an ad hoc fashion. He uses his skills and
experience by observing the wind, the waves, the tides and currents, the fauna, the stars, the
clouds, the sound of the water on the side of the boat, to figure out the direction of his objective
or the proximity of land. If asked, he can point to his objective at any moment, but he cannot
describe his course. This type of project management is the key element of agile methodologies
and can be used with advantage in projects exploring new technology—projects whose purpose
is break existing paradigms.
Another limitation of plans is described in [Suchman, 2007]: “In planning to run a series
of rapids in a canoe, one is very likely to sit for a while above the falls and plan one’s descent.
The plan might go something like: ‘I’ll get as far over to the left as possible, try to make it
between those large rocks, then backferry hard to the right to make it around that next bunch.’ ...
But, however detailed, the plan stops short of the actual business of getting your canoe through
the falls. When it really comes down to the details of responding to currents and handling a
canoe, you effectively abandon the plan and fall back on whatever embodied skills are available
to you.”
In general, software project management plans are especially useful to kick off a software
project and to stay on course when no major changes are expected. They are limited in helping
the project manager or developers control the project when unexpected change occurs. In this
case a project manager generally cannot anticipate an alternative activity, or its consequence,
until some course of action is already under way. “It is frequently only on acting in a present
situation that its possibilities become clear, and we often do not know ahead of time, or at least
not with any specificity, what future state we desire to bring about” [Suchman, 2007].
• Architecture reuse. In this case, the project participants adopt a preexisting system
design and adapt it to the system (Chapter 6). As no actual software is reused, assessing
Methodology Issues 659
an existing architecture is not more difficult than assessing an ad hoc architecture built
from scratch. Given an architecture that fits the needs of the system, selecting an
existing architecture is always more advantageous than recreating one from scratch.
The challenge in this approach, however, is to select an architecture that will enable
participants to meet the nonfunctional requirements of the system.
• Design pattern reuse. Similar to architecture reuse, design pattern reuse does not
involve existing software (Chapter 8). However, design patterns provide solutions to
partial design problems. Hence, developers will reuse, adapt, and combine many
different design patterns during object design. This can lead to an over-engineered
system when design patterns are used only for the sake of using design patterns. In
particular, the project manager and the chief architect should ensure that the
nonfunctional requirements and design goals are not hurt by the introduction of specific
patterns.
• Framework and component reuse. The reuse of a framework or a set of components
constrains the system design and may force developers to use specific design patterns
(Chapter 8). Moreover, components are usually black boxes provided by a vendor, and
they cannot be modified. The project manager must carefully assess the risks associated
with the reuse. In general, framework assessments are shared among several projects in
the organization, enabling projects to reduce the overhead associated with selecting a
framework.
In the end, the project environment is the determining factor for selecting a reuse strategy.
For well-defined application domains and flexible client requirements, a component-based
approach may be the most cost effective. For new systems, building from scratch may be the
only solution.
• Design. Models provide a representation that enables developers to reason about the
system. The models also form the basis for coding, as CASE tools are able to convert
models into source code templates.
• Communication. Models provide a common vocabulary that enables developers to
discuss specific design details, even though the corresponding system has not yet been
660 Chapter 16 • Methodologies: Putting It All Together
A project manager can use modeling to support one or more of the activities above. In
general, modeling presents several challenges to the manager:
• Formalizing knowledge is expensive. It takes time and effort from developers, and
requires validation and consensus so that every participant agrees on the same
meanings.
• Models introduce redundancy. If changes are made to the system, the models must be
updated as well. If several models depict the same aspects of the system, all must be
updated. If one model becomes out of sync, it loses its value.
• Models become complex. As the model complexity becomes similar to the complexity
of the system, the benefit of having a model is reduced significantly.
The project manager can choose to create activities dedicated to maintaining model
consistency and correctness or to minimize the amount of modeling by redirecting effort towards
coding and testing. In general, the trade-off depends on the project environment. On the one
hand, in a single-site project with a local king client, writing a complete requirements model is
not as critical, since the client is continuously involved in the project and available for questions.
The client can be seen as a “walking” specification of the system instead of a written
specification. On the other hand, a distributed project requires knowledge about requirements
and system design to be made as explicit as possible, as participants may have different stakes in
the project and have no opportunities to communicate this knowledge informally. Developing a
detailed use case model annotated with scenarios enables participants to converge toward a
single-system concept and to document the decisions and commitments they made (Chapter 4).
Similarly, a long-running project can challenge participants’ memories and suffer a high staff
turnaround, in which case making knowledge explicit for long-term use is an investment. In such
cases, methods such as rationale management (Chapter 12) and configuration management
(Chapter 13) enable participants to capture the justifications behind decisions and the history of
decisions, respectively.
Deciding whether or not to externalize knowledge can also depend on control factors.
Participants can make themselves indispensable to the project by refusing to share their know-
how with other participants. In the first ascent of the K2, the expedition leader actually kept
Mahdi’s account secret, because he was angry that a participant of the organization had worked
against his order (or at least that is how it seemed). As a result, for many years Bonatti actually
Methodology Issues 661
did not know why he was avoided by the fellow expedition members, who thought of him as a
liar who would sell his grandmother to get to the summit.
levels. The project manager can also define milestones as demonstration and scenario-based
reviews (as opposed to documents) to force participants to confront difficult issues early. To
control an innovative development, a project manager can increase the frequency of milestones
while leaving their exact content flexible to provide more opportunities for project goals to be
refined and redirected. Conversely, a project manager could leverage the knowledge of
experienced developers by enabling them to revise the project plan or the process model. For a
project with a mixture of experienced and novice participants, the project manager can select
peer-reviews, walkthroughs, and peer programming techniques to facilitate the transfer of
knowledge from experts to novices and to create a web of informal communication channels.
In the first ascent of the K2, the hierarchical organization led to thin communication
channels, which contributed to several miscommunications. For example, Mahdi talked with the
liaison officer, who relayed his statements to the expedition leader. However, the expedition
leader did not talk to Bonatti to confirm Mahdi’s statements.
exposed to high altitudes longer than sustainable without oxygen. Most fixed-rope style
expeditions of 8,000-m summits will then count on supplying the highest camps with oxygen
bottles. Conversely, an Alpine-style expedition can plan a quick enough attempt at the summit to
avoid prolonged exposure at critical altitudes.
In the same way, different styles of software development consist of the combinations of
different project organizations and software life cycles. Traditionally, software engineering
methodologies have evolved out of large complex, one-time projects, leading to an extensive
planning phase, detailed modeling (i.e., documentation), a hierarchical organization, and fine-
grained planning. This requires high overhead that is not always justified for shorter or routine
projects. As a reaction to these heavier methodologies, agile methodologies, such as Extreme
Programming [Beck & Andres, 2005], Feature-Driven Design [Palmer & Felsing, 2002], and
Scrum [Schwaber & Beedle, 2002], have appeared in recent years. In these more agile
methodologies, planning is accomplished incrementally, the source code is treated as the only
model of interest, and loose teams of experienced programmers are given the freedom to plan
and organize their own work. Another advantage of agile methodologies is that they can adapt to
fundamental changes in requirements [Cockburn, 2001]. A well-accepted definition of agility is
“the ability to both create and respond to change in order to profit in a turbulent business
environment” [Highsmith, 2004].
As in mountaineering, the environment constrains the set of methods that can be selected.
An Alpine-style expedition may be a way to conquer a mountain at high speed, but it is certainly
not the best way to bring paying customers to the top of Mt. Everest. Similarly, agile
methodologies can achieve spectacular results with the right set of skills, but may not be
appropriate without a critical mass of experience among participants.
In Section 16.4.1, we describe Royce’s methodology [Royce, 1998], the software
engineering equivalent of the fixed-rope climbing. Royce follows the Unified Process and
provides many project management heuristics for estimating, controlling, and monitoring
projects. In Section 16.4.2, we describe Extreme Programming (XP) [Beck & Andres, 2005], an
early agile methodology and the software engineering equivalent of Alpine climbing. XP
minimizes the generation of models and documentation by focusing on methods for making the
design of the system explicit in the source code and for disseminating knowledge among the
organization through peers. In Section 16.4.3, we describe the evolution of agile methodologies
starting with the Rugby approach from Takeuchi and Nonaka [Takeuchi & Nonaka, 1986], to
modern agile methodologies with a main focus on Scrum [Schwaber & Beedle, 2002]. Rugby
methodologies are the software engineering equivalent of expedition climbing to unknown
summits.
Royce’s methodology is based on the Unified Process life cycle described in Chapter 15. It is
iterative, focuses on risk management and change management, and departs significantly from
664 Chapter 16 • Methodologies: Putting It All Together
the conventional waterfall approaches typical of large projects. Key principles of the
methodology include
In the following, we describe how Royce’s methodology addresses the issues of planning,
modeling, reuse, process, and control.
organization of the work breakdown structure around the life cycle instead of the system shields
it from changes to the system.
While recognizing that estimation of new projects is difficult, Royce suggests to compute
the initial estimate with a model, such as COCOMO II [Boehm et al., 2000], and refine it with
the project manager, developers, and testers. This enables multiple points of view to be factored
into the estimate. Moreover, this enables the project participant to feel ownership of the estimate.
After each iteration, the plan is revised to reflect the performance of the project and to repair any
planning error.
Royce organizes artifacts based on the activities of the Unified Process (Section 15.4.2):
• The management set captures the artifacts associated with planning and monitoring
activities. These artifacts use ad hoc notations to capture the “contracts” among project
participants and other stakeholders. Specific artifacts included in this set are the
problem statement, the software process management plan, the configuration
management plan, and status descriptions.
• The requirements set consists of artifacts describing the visionary scenarios, prototypes
for user interfaces, and the requirements analysis model.
• The design set consists of artifacts describing software architecture and interface
specifications.
• The implementation set consists of source code, components, and executables needed
for testing the components and the system.
• The deployment set includes all the deliverables negotiated between the project
manager and the client: in general, the executable code, the user manual, and the
administrator manual.
666 Chapter 16 • Methodologies: Putting It All Together
Test artifacts resulting from the assessment workflow are part of each of the above sets.
The management set includes the test plan and procedures. Test specifications are part of the
requirements set. Tests are simply viewed as an integral part of the system, and the same tools
and techniques are used for developing tests.
The diagram of all artifact sets generated over the phases of a software system is called the
artifact road map. Figure 16-1 shows an example of an artifact map for managing a large
software project according to Royce’s methodology.
Management Set
1. Problem Statement
2. WBS
3. SPMP
4. SCMP
5. Project Agreement
6. Test plan
Requirements Set
1. RAD
Design Set
1. SDD
2. ODD
Implementation Set
1. Source code
2. Test cases
Deployment Set
1. User Manual
2. Administrator Manual
Figure 16-1 Example of an artifact road map of work products in a project using the Unified Process as
a software life cycle model. The artifact names are the ones used in this book. Informal releases are shown
as hollow triangles, baselined artifacts are shown as solid triangles, dotted lines represent the end of a phase
(adapted from [Royce, 1998]).
Royce’s methodology includes heuristics and guidelines for tailoring the life cycle process
based on the technical and managerial complexity of the project. Royce considers the following
factors when tailoring the process:
• Scale. The number of participants in a project is the single most important factor in
determining the process. Small projects (1 to 5 participants) require much less
A Spectrum of Methodologies 667
• Process flexibility. The rigor of the contract binding the client with the development
organization determines the rigor of the process definition. A rigorous contract, typical
in one-time, custom development contracts for the government, requires precise and
detailed process definitions, whereas internal developments, such as experimental
prototypes, enjoy much more flexibility.
• Process maturity. Organizations with mature processes are easier to manage than
organizations with immature processes. Mature organizations have achieved a level of
experience and process definition that enables precise planning and a high degree of
process automation.
When initiating a project, a project manager assesses all of these factors when deciding the
level of detailed process definition and the amount of effort to budget for each phase.
• Management metrics:
• Work: How many tasks have been completed compared to the plan?
• Costs: How many resources have been consumed compared to the budget?
• Team dynamics: How many participants leave the project prematurely, and how
many new participants are added?
• Quality metrics:
• Change traffic: How many change requests are issued over time?
• Breakage: How much source code is reworked per change?
• Rework: How much effort is needed to implement a change?
• Mean time between failures: How many defects are discovered per hour of testing?
Summary
Table 16-3 below summarizes the methods used by Royce’s methodology for each
methodological issue.
A Spectrum of Methodologies 669
Issues Methods
Process Scale
Stakeholder cohesion
Process flexibility
Process maturity
Architectural risk
Domain experience
there is no “owner” with sole authority to make the necessary changes. This form of ownership
is quite close to the egoless programming scheme originally proposed by Weinberg [Weinberg,
1971].
XP can be boiled down into five key principles:
• Rapid feedback. Confronting issues early results in more time for resolving issues. This
applies both to client feedback and feedback from testing.
• Simplicity. The design should focus on the current requirements. As many changes will
occur and few of them can be predicted, it is easier to deal with new requirements when
they occur. A simple design is easier to understand and to change than a complex one
with many layers of indirection for protecting against anticipated changes.
• Incremental change. It is easier to deal with changes one at the time instead of many
concurrent changes. Changes should be integrated one by one with the current baseline.
• Embracing change. Change is inevitable and frequent in XP projects. It should be
treated as a normal phenomenon and not as an exception to be avoided.
• Quality work. XP focuses on rapid projects where progress is demonstrated frequently.
Nevertheless, each incremental change should be implemented carefully and
completely. Investing time to do excellent work the first time will reduce scrap and
rework later.
Next, we describe how XP addresses the issues of planning, reuse, modeling, process, and
control.
In XP, planning is driven by requirements and their relative priorities. Requirements are
elicited by writing stories with the client. Stories are high-level use cases that encompass a set of
coherent features. Developers then decompose each story in terms of the development tasks
needed to realize the features of the story. Developers estimate the duration of each task in terms
of days; if a task is planned for more than a couple of weeks, it is further decomposed into
smaller tasks. After estimating the effort needed for each story, the client and the developers
meet to assign specific stories to releases, which correspond to versions of the system that will
be deployed to the end user. The user stories are organized into stacks of related functionality.
The client prioritizes the stacks so that essential requirements can be addressed early and
optional requirements later. This leads to the release plan: it specifies which story will be
implemented for which release and when it will be deployed to the end user. Releases are
scheduled frequently (e.g., every one or two months) to ensure rapid feedback from the end
users.
The effort needed to realize user stories is initially estimated in terms of ideal weeks. An
ideal week is a week in which all work time is dedicated to this single purpose. When estimating
A Spectrum of Methodologies 671
the cost of a release, this number is then adjusted by a factor to reflect such overhead activities as
meetings, holidays, and sick days. This factor also takes into account uncertainties associated
with planning. For new teams with no previous experience in XP, authors recommend starting
with a default factor of three—three actual weeks are needed to accomplish the work of a single
ideal week. This factor can be lowered as time progresses. The inverse of this factor—how many
ideal weeks can be accomplished during a fixed amount of time—is called the project velocity.
Every release is made up of a number of smaller iterations that typically last for two or
three weeks. Each iteration produces a promotion of the system, which is submitted to the client
for acceptance testing. By exposing the client to small increments of functionality, the client has
the opportunity to introduce changes many times during development. Each iteration represents
a small step toward a release, so changes are small and can easily be undone if necessary.
The beginning of an iteration starts with the so-called “planning game,” in which the client
selects the stories to be implemented. The ordering and priority of each user story scheduled for
the current release is also decided with the client. The client then specifies acceptance tests for
each story. An acceptance test is a scenario that exercises the system and is used to validate a
specific story. Acceptance tests are also used for system regression testing before each release.
At the end of an iteration, the team computes the actual project velocity by adding the
ideal weeks of the completed user stories (i.e., that passed the acceptance tests). During the next
iteration, the client can only select a set of stories whose estimated effort does not exceed the
number of ideal weeks accomplished during the previous iteration. This enables the client to
trade off functionality for cost, and developers to transparently justify the cost of each feature.
The planning for an iteration also includes time to address any acceptance tests that failed at the
end of the previous iteration. If the project velocity deviates substantially from the original plan
for more than two iterations, a new release planning meeting is called with the client to adjust
the schedule.
From a project management point of view, stories can be thought of as work packages in a
work breakdown structure. The difference with respect to traditional project management is that
the task estimations come from the developers, not from the project manager.
XP does not emphasize reuse as a key method for increasing productivity. And although
XP does not rule out the use of design patterns, developers are encouraged to select the simplest
solution that addresses the user story currently being implemented. Design patterns might be
introduced as a result of refactoring, when changes are actually implemented. In this respect, XP
differs from conventional methodologies in that it does not focus on the system architecture,
which would allow such reuse to be planned at the onset. Instead, the system architecture is
refined and discovered one story at the time, as the prototype evolves toward the complete
system.
672 Chapter 16 • Methodologies: Putting It All Together
XP follows a simple life cycle process consisting of four activities: planning, design,
coding, and testing. Planning occurs at the beginning of each iteration. Design, coding, and
testing occur incrementally in rapid succession. There are only a few constraints on these
activities, which are summarized below:
• Test first. Unit tests are written by the developer and before units are written. This
enables the developer to refine the API (Application Programmer Interface) to the class
and ensures the existence of unit tests early.
• Write tests for each new bug. When defects are discovered, a unit test is created to
reproduce the defect. Then the defect is repaired and all unit tests are run again.
• Refactor before extending. When new features are implemented, refactoring may be
necessary to create a design that accommodates the change. The refactoring is done
first, then the extension is implemented. This ensures that the design does not decay as
new features are added. As ownership of the code is shared, refactoring may affect code
that the developer did not initially write.
• Integrate often. Source code from developers is integrated into the main branch, one
contribution at the time. Unit tests for all integrated units are used for regression
testing.
XP encourages developers to improve on this process when necessary. There are, however,
no formal process instrumentation or process improvement activities; they are unnecessary given
the small project sizes for which XP is suited.
A Spectrum of Methodologies 673
XP attempts to reduce the number of meetings developers need to attend so that they can
spend more time writing tests, coding, and refactoring. Status is communicated in the team by
means of a daily stand-up meeting. All project participants stand up in a circle and take turns
briefly updating the team about the tasks they completed the previous day, the tasks they are
currently working on, and the open issues they are facing. No discussions are allowed, to keep
the meeting short. If any discussion is necessary, only the participants involved meet informally
later that day.
The need for inspections and peer review is eliminated by using pair programming. Since
all production code (including unit tests) are written in pairs, the review occurs during the code
writing. As code is not owned by any specific pair, many programmers become familiar with any
specific piece of code. Moreover, pairs are rotated often to enable a better distribution of
knowledge throughout the project.
XP replaces the command and control structure of large projects, such as those found in
Royce’s methodology, by a self-organizing system [Highsmith & Orr, 2000]. A leader (as
opposed to a manager) communicates a vision of system requirements and architecture,
cultivates an environment where innovative ideas can be promoted and elaborated, and
encourages risk taking. The leader must encourage an environment where participants can
collaborate, share information, and develop mutual trust. The leader must still make the hard
decisions to ensure that participants pull in the same direction, and get the product shipped. The
leader must be able to decide when to build consensus and when to dictate. The leader is like the
Polynesian navigator guiding his boat toward an objective, as opposed to managing his project
according to a rigid step-by-step plan.
Summary
Issue Methods
Modeling Select the simplest design that addresses the current story.
Use a system metaphor to model difficult concepts.
Use CRC cards for the initial object decomposition.
Write code that adheres to standards.
Refactor whenever possible.
event where injuries can occur. In software development, agile methodologists argue that
developers should also stop and review the situation whenever change has occurred, such as
changes in the requirements. To reduce the risk of overlooking unexpected changes, agile
methodologists propose to meet as regularly as possible to identify these changes as early as
possible. So while heavyweight methodologists tried to avoid unexpected change, agile
methodologists regard unexpected change as the normal situation to be accepted at regular
points during project-runtime.
XP described in the previous section was one of the first “light-weight” methodologies to
address the slowness and bureaucracy of these methodologies [Beck & Andres, 2005]. Based on
the Rugby approach, Ken Schwaber published the Scrum approach in 1995 [Schwaber, 1995].
Other light-weight methodologies with similar goals emerged during the same time such as
Adaptive Software Development (ASD) [Highsmith & Orr, 2000], Crystal Clear [Cockburn,
2004]. In 2005, Martin Fowler published an overview of these methodologies [Fowler, 2005].
In 2000 a group of XP experts and other methodologists discussed the relationship of XP
with other “light-weight” methodologies. During that meeting, the name agile methodology was
A Spectrum of Methodologies 675
chosen instead of light-weight methodology, because the term light-weight was considered to
evoke the wrong idea of being “light-headed”. The key points of an agile methodology were
then published with four so-called value statements in the Agile Alliance Manifesto
[AgileManifesto, 2001]:
• Individuals and interactions over processes and tools. The most important factor in a
software project are the people and how they work together. Software development is
better done by a social network of self-organizing people than an organizational
hierarchy with strict lines of authority, processes with fixed roles and sophisticated
tools.
• Working software over comprehensive documentation. The goal of software
development is to create software, not documentation.
• Customer collaboration over contract negotiation. Having a contract with the customer
is important, but it is not a substitute for communication. Successful developers work
closely with their customers to discover what they need, and they educate their
customers along the way.
• Responding to change over following a plan. A good software project should start with
a plan, but that does not mean it must be followed literally, it must be changeable if the
situation changes and change is a reality in software development. As work progresses,
the understanding of the application and solution domain, the business environment
and the underlying technology changes and developers should be able to respond to
these changes.
This uncertainty is also reflected in the estimate models used for incremental planning.
Cohn, for example, advocates three distinct estimates: The order of magnitude estimate, done at
the beginning of the project, which can be off by as much as an order of magnitude from the
eventual values. The next level estimate is the budgetary estimate with a precision of +25% to
-10%. Late in the project follows the definite estimate, with a precision of +10% to -5%
[Cohn, 2006].
Closely related to agile planning is agile estimation, such as Planning Poker
[Grenning, 2002]. Planning Poker involves a moderator and the team members. It starts with a
list of features of the system to be developed. These can be the functional or nonfunctional
requirements, often presented in terms of user stories or scenarios. Each team member gets a
deck of cards containing a set of different values, for example 1, 2, 3, 5, 8, 13, 20, 40, 100. For
each feature on the list, the team members discuss their difficulty and privately choose a value
card that they think represents the correct estimate. Then the moderator asks that all the cards are
simultaneously revealed. In general, there will not be an immediate consensus about the
estimates and the team members with the highest and lowest estimates are asked to justify their
choices. This usually leads to another round of discussion and another estimation. This process
is repeated until a consensus is reached. There are different ways to reach a consensus. For
example, the developer who is responsible for the requirement may have more weight in the
consensus vote, the moderator may also get more power to negotiate the consensus.
As agile estimation is iterative, planners improve their estimates as they gain a better
understanding of the development team and the application domain.
Rugby methodologies are used with advantage in new product development, in our
terminology greenfield engineering, where the focus is not so much on the reuse of models or
existing processes, but more on the reuse of knowledge.
Knowledge acquisition is encouraged on the individual level as well as on the team level.
Team level learning takes place on the technical level in terms of tutorials and training programs
as well as on the social level. Furthermore, the team members are encouraged to accumulate
experience in areas other than their own. This allows team members to speak with people from
other domains, an important aspect for the elicitation of requirements and the discovery of
innovative designs.
Subsequently, knowledge is transferred between projects by reassigning key experts to
different teams. While organizations learn by converting individual project successes to standard
practice, institutionalization often creates a problem when the project environment changes
significantly. In such a situation, standard practices established from previous projects are rarely
applicable. In contrast, Takeuchi and Nonaka claim that learning from mistakes is more helpful
than learning from success. Project managers as well as developers can usually learn more from
mistakes than from successes [Petroski, 1992]. Allowing mistakes during a project is an
A Spectrum of Methodologies 677
important aspect of the Scrum methodology: the key is to find the mistakes early and having the
time to correct them. This is made possible by the daily Scrum meetings.
Throughout the book we have introduced the concept of modeling as a key to solve
software engineering problems. UML has become one of the dominating languages to model
applications and software systems. We use UML to specify requirements with functional models
for the customer (use case models), we realize the dynamic behavior (workflows) with state
chart and activity diagrams, and we use deployment diagrams to describe a software installation.
We have emphasized the need for keeping the models consistent which each other
(Section 4.3.3). Ambler advocates to update models only “when it hurts” [Ambler, 2002], that is,
developers should not try to make models consistent with each other after a change in one of the
models. Agile Modeling also assumes that there are many ways to model the same concept.
Ambler also proposes to create several models in parallel, drawing models with the simplest
notations and using the simplest tools. For example, in Scrum tasks are written on slips of paper
and organized on a white board.
One particularly simple modeling technique is paper prototyping, where end users are
asked to perform realistic tasks by interacting with a paper version of the interface [Norman,
2002]. The user interface is executed by a person playing the computer, who doesn’t explain
how the user interface is going to be implemented. Paper prototyping can be used for usability
testing of any type of human-computer interaction, but is mostly used for testing Web-browsers,
and hand-held devices. Its purpose is to get quick feedback from users while the user interface
design is still in the drawing stage. User interface paper prototypes can be hand-drawn drawings
or screen shots, often changed with the help of drawing or photo-editing tools.
To encourage natural behavior, the developers often prefer to do these tests without the
end user knowing that the system is not yet implemented. This can be done with the Wizard of
Oz technique, where a human (the wizard, usually sitting in another room) simulates the
behavior of the system by intercepting all communications between the end user and the system.
That is, the end user does not know that a human generates the responses. The Wizard of Oz
technique can provide valuable information on which to base future designs, by gathering
information about the nature of the interaction, testing the interaction of a device before building
a functional model and identifying problems users will have with the devices and interactions.
For example, the user types a search query, and the wizard provides the result as if it
comes from a real search engine. This allows testing the user interface, in particular query
formulation and filtering of results, before implementing it. The Wizard of Oz technique can
also be used with advantage when designing natural language interfaces: The design and syntax
of the command language of the eventual system is driven by the actual language and
formulations used by the users during the tests [Kelly, 1984].
678 Chapter 16 • Methodologies: Putting It All Together
• autonomous: each team can make its own decisions, independent from its place in the
organizational hierarchy.
• self-transcendent: the teams establish their own goals and pursue their own ideas
independent from the current patterns and knowledge used in the application as well as
solution domains. Teams are encouraged to think out of the box. Contradictory goals
are allowed, even encouraged to overcome the current way of thinking and to prepare
for the discovery of new ideas.
• multi-disciplinary: each of the team members is selected with respect to different skills
needed for the project.
A Spectrum of Methodologies 679
Scrum teams are self organizing. Although the teams are encouraged to work on their
own, they are not uncontrolled. Management establishes enough checkpoints to prevent
instability turning into chaos. But the control is not based on externally imposed rigid schemes
and deadlines but on self-control. That is, the project monitoring is done by the teams
themselves, for example through peer pressure. This can be done by controlling the group
dynamics of the team, by selecting the team members based on their experience and their energy,
or by adding more experienced team members to a team of beginners. Important is the ability of
the project manager to tolerate and anticipate errors.
To be able react to upcoming problems, issues must be identified as early as possible.
Scrum advocates the daily Scrum meeting, in which the team members regularly share their
work progress and problems they have encountered. This allows the team to identify obstacles as
early as they appear, and react to them.
Summary
Table 16-5 summarizes the methods used by Rugby for each issue.
Table 16-5 Rugby methods by methodological issues.
Issue Methods
Modeling Sketches
Paper prototype
Wizard of Oz
Note that these projects are all student projects. Students are often concurrently pursuing
other instructional courses during the period of the software development. This is similar to a
matrix development organization in which each individual can be working on a number of
projects. For each project, we examine the project goals, the project environment, the methods
selected to address planning, reuse, modeling, process, and control, and the lessons learned.
Case Studies 681
Project goal
The goal of ATRACT was to provide a framework for writing and executing tests for a
middleware environment specialized for small wireless devices, such as cell phones and MP3
players. The framework had to provide services for moving files between devices. Devices,
based on the type of file received, could either process, store, or ignore the files. As many new
types of devices and files had to be supported, the vendor of the middleware environment had a
need for a testing environment for specifying and automating tests. As the development and
execution of tests could involve several developers, the tool also had to include features for
discussing tests using an issue-based model.
The goal for the first release was to achieve a robust testing environment with at least the
minimum amount of functionality and documentation needed for conducting actual tests. An
additional goal for all participants was to learn about XP and evaluate its effectiveness for small
projects conducted in pairs.
Project environment
Local king client. The client of this project was the middleware vendor. He was familiar with
both the technology and the platform.
Novice participants. In addition to the client, two developers and a supervisor took part in the
project. All participants had taken part in software development projects; however, all were new
to XP. The developers relied on the advice of an external participant for the application and
customization of XP.
Mature technology. Because the platform for the system was Java, developers were able to
select relatively mature components for developing the test infrastructure.
End user access. The client of the project was also an end user.
Project located at the client site. The developers were collocated at the client site and had
unrestricted access to the client. The client was able to make immediate decisions and did not
have to refer questions to other members of the company.
Project duration. As the developers were familiar with use case modeling and the
requirements tool that was used, the project was divided into two phases: In a first two-month
phase that focused only on requirements, a set of vertical prototypes and a use case model of the
visionary system were developed. The developers validated the mock-ups with the client and
used the use case model for tracking requirements issues. The second phase, which lasted for
four months, was dedicated to realizing the first release of the system according to an XP
process. At the beginning of the second phase, the use case model was converted into user
stories that were used by the developers and the client for requirements prioritization and
682 Chapter 16 • Methodologies: Putting It All Together
estimation. This two-phase approach enabled us to minimize the risks associated with using a
new methodology (XP) by restricting its use to the construction phase of the project.
no schedule deviations or difficult issues, the manager turned into an observer and did not
participate very much past the requirements phase.
The developers met the manager shortly before the end of each iteration, before meeting
with the client, to demonstrate the current status of the code and to assess any open issues. As
the project followed the initial schedule closely and there were few open issues at the end of an
iteration, the meetings were used mostly to bring the manager up to date on the application
domain. The meeting was then followed a few days later by a meeting with the client for the
iteration acceptance test.
Outcome
The project ended on time, delivering the required user documentation, installation scripts,
source, and executable code. A brief post-development phase led to the update of the use case
model to reflect the changes that had been made to the requirements. The client was satisfied
with the result, and most importantly, his expectations were in line with the outcome because he
had closely followed the complete development process.
Lessons learned
Training the client. Even though the project was collocated with the client organization, the
client did not have enough resources to dedicate to writing user stories and acceptance tests. The
organization was too small to spare that much time for an infrastructure project. Hence, the
client did not learn as much about the process as originally planned. In this situation, the first
two months of requirements paid off as developers were able to elicit and validate a stable set of
requirements from a small number of meetings with the client, using scenarios, mock-ups, and
use cases. For a longer running project, it is critical that the client understand the ground rules of
XP when prioritizing user stories, estimating effort, and readjusting the schedule as a result of
velocity changes. Put in Royce’s terms, an XP project works for cohesive sets of stakeholders.
Training the developers about the process. XP requires a core of experienced developers.
Experience enables developers to produce accurate estimates, to localize changes, and to make
judgement calls about when to communicate issues with other participants. ATRACT was a small
enough project where both developers knew all that needed to be known about the current status
of the project. In a larger project, the rotation of pairs can be used to bring new developers, in
particular beginners, up to date and introduce redundancy into the system. We anticipate,
however, that running a larger project with only novice developers following XP would entail a
severe learning curve before the project reached a steady state of changes.
684 Chapter 16 • Methodologies: Putting It All Together
Project goal
The FRIEND system is an emergency management system for coordinating field units
working on an accident. When the FRIEND project started in 1992, accident management was
accomplished mostly with paper-based processes. The appearance of technology enablers such
as digital wireless technology and PDAs (personal digital assistants) led to the goal of replacing
the paper process with an electronic process. FRIEND was designed for various types of
accidents, from minor traffic accidents to such major incidents as fires and storms. The project
was structured in five iterations demonstrating increasingly more complex prototypes. Many
examples of Chapter 4 are taken from this project.
Each development iteration of the project was executed as a one-semester software
engineering course with senior students as developers. The goal of the project was to develop a
demonstration prototype of the FRIEND system. A second goal was to expose the students to
state-of-the-art software engineering methods and tools. Although FRIEND did not follow closely
Royce’s methodology, it started with many of its elements, including a project-based
organization, well-defined change processes, and similar artifact sets.
Project environment
Local king client. The client for FRIEND was the police chief of a local community. He
initially did not have any background in software engineering or wireless technology. He had
detailed knowledge about the application domain, and could make immediate decisions about
the scope and the direction of the project.
Novice participants. The project included an average of 40 participants, mostly novice
developers, with strong technical skills but little experience in projects of this scale.
Management had conducted several projects of this scale. The application domain was new to all
the participants.
End user accessible. The client was also an end user. Moreover, a selected set of other end
users was available for usability testing.
State-of-the-art technology. FRIEND focused on wireless technology and PDAs as a platform
for the prototype. Although the technology used was relatively stable, it was new and required
additional training for the students before working code could be produced.
Single-site project. The project occurred in one location. All students had access to a single
lab. The client was available on short notice.
Project duration. The project initially included two months of preparation, followed by a
four-month development iteration. As the results of the first iteration were successful, the project
led to four successor projects that further refined the concept and architecture of the system, and
a spin-off company that realized a product. The overall project eventually lasted three years.
Case Studies 685
As FRIEND was a concept exploration project, the functionality and the platform of the
prototypes were not specified in detail. The milestones, however, were fixed from the start. As
the participants had little experience in large-scale development, the schedule of the project was
based on the waterfall model. The requirements, system design, object design, and coding were
each planned for approximately four weeks, with a formal review at the end of each
development activity.
Both the application domain (accident management) and the technology enablers (Apple
Newtons, wireless Motorola modems) used for the project were new to the students. Little reuse
was possible for the domain-specific parts of the system. Off-the-shelf packages were used for
the graphical user interface and the networking subsystems. In general, the short duration of the
project limited the complexity and the number of off-the-shelf packages that could be used.
The project produced three artifact sets: a client set, a management set and a system set.
The system set corresponds to the requirements, design, implementation, and deployment set in
Royce’s methodology. The client set included the documents under the client’s responsibility
and written in collaboration with project management. This included the Problem Statement and
the Initial Schedule (Table 16-6).
Table 16-6 Client documents. The problem statement was handed out to the students at the beginning of
the project.
Problem Statement Describes the needs, visionary scenarios, target Concept Exploration
environment, requirements and constraints
chosen technology of PDA and wireless communication. The analysis models were documented
in the Requirements Analysis Document (Table 16-8).
The system design was documented in the System Design Document. The object design
model was documented in the Object Design Document. Models in the analysis and object
design phase were written in OMT [Rumbaugh et al., 1991] and entered into a small CASE tool
called OMTool. The OMT models were used both for generating the initial code fragments as
well as figures in the design documents.
The purpose of models in FRIEND was primarily to support design and communication. As
the goal of FRIEND was to demonstrate a prototype, we expected the system to evolve rapidly,
making it costly and difficult to maintain consistency between models and the system. Hence,
archiving was not a primary goal. Instead, we expected knowledge to be transmitted across
iterations by way of the prototype and the implicit knowledge carried by the students who
continued with the project.
The life cycle model included three phases. During the pre-development phase,
preliminary requirements and the initial software architecture were developed. Infrastructure
choices were also made, in particular a single room was chosen and dedicated solely for the
students working on the project. Only the client, project manager, and coaches were involved in
this phase. At the beginning of the development phase, all students were assigned to a team to
work toward the construction of the system. The goal of the development phase was to validate
the architecture of the system and expose the participants to all aspects of an iterative software
life cycle. The requirements, design, implementation, and test cases were developed
incrementally. Core functionality was developed during the development phase. Some optional
functionality was added during the post-development phase. The rationale for this approach was
to deliver a system with required functionality on time, as opposed to delivering a complete
Case Studies 687
User Manual Describes the use of the system (in the form of Requirements
a tutorial).
Object Design Describes the system in terms of refined object Object Design
Document (ODD) models, in particular the chosen data structures
and algorithms, as well as full signatures for all
public methods. This document results in the
detailed specification of each class used by the
programmers during the implementation phase.
system late. Table 16-9 describes the three phases in the terminology of the IEEE 1074 life cycle
model.
Note that the life cycle did not include operation and support activities because the goal of
the project was to develop only a demonstration prototype.
Because of the large number of participants (42 students, 5 coaches) and their lack of
experience in large-scale development, we adopted a hierarchical project organization and strict
control. During pre-development, a preliminary top-level design of the system was created to
serve as a basis for team decomposition. The project team was organized in five subsystem
688 Chapter 16 • Methodologies: Putting It All Together
teams (Campus, Communication, Database, EMOC, and UI), each responsible for one
subsystem (Figure 16-2). A cross-functional architecture team was composed of liaisons from
each subsystem team. A tool team was responsible for providing the infrastructure to the other
teams, including build scripts, configuration management, and test harness. For the initial
assignment of students to teams, we used a skill matrix considering programming knowledge,
knowledge of specific tools, wishes, and interests. The identification of the skills and interests
was based on information provided by the students.
During the first week of the project, we trained the students to use a well-defined process
for reporting status and conducting reviews. Each team met weekly to discuss status. The
weekly team meeting was facilitated by a coach, who posted a meeting agenda prior to the
meeting. A student would record the meeting content in meeting minutes and action items and
post them shortly after the meeting. The coaches of the teams also met weekly with the project
Case Studies 689
Management
(6)
Figure 16-2 Team organization of FRIEND during iteration 1 (CMU Fall course 15-413, 1992). White
rectangles indicate subsystem teams; gray rectangles, cross-functional teams. The numbers in parentheses
indicate the number of team members.
manager. Progress was assessed in monthly project reviews. During the first month, the project
manager and the coaches ensured that the status reporting and meeting process was followed
rigorously. This resulted in the project status being visible for all students, thus allowing them to
recognize the value of such information. Moreover, during the first two months, roles within
teams were rotated, enabling each student to facilitate a status meeting, act as a liaison to the
architecture team, and specialize in a tool role. The motivation for role rotation was
pedagogical—each student had the opportunity to learn most roles; it also acted as a selection
mechanism—students who performed well in a specific role often ended up serving in that role
for the rest of the project.
After the system design review (i.e., the second project review), both process enforcement
and role rotation were relaxed. Students were told to keep the tools and methods that worked,
and discard those that got in the way. As a result, the status reporting process remained in place,
but increasingly more decisions were made locally as coding progressed. Students who
displayed communication skills usually ended up in the liaison roles. Students who excelled at
technical tasks ended up carrying the technical tasks of the team. Conflicts and interface
problems discovered during builds were resolved face to face in the lab. Only major integration
issues resulted in ad hoc meetings.
In essence, the organization of the project evolved from hierarchical to a series of XP
subprojects, one for each subsystem. Each subproject treated the other teams using the
subsystem as collocated clients. This organization was only possible once a solid architectural
concept was in place, defining the responsibilities of each team.
Outcome
Jul. Sep. Nov. Jan. Mar. May Jul. Sep. Nov. Jan. Mar. May Jul.
1993 1994
Legend:
Predevelopment Development
the first project led to four more iterations exploring a variety of technologies and functionality
(Figure 16-3):
• Iteration 2 focused on consolidating the feedback from the client into the prototype. It
included a subset of the students who had worked on the first prototype, and followed
an iterative software life cycle process focusing on the prototype. Each review focused
on new functionality to be added to the working prototype.
• Iteration 3 started from scratch with a new set of students and a more ambitious
problem statement. The scope of the system was extended to include Emergency
Operations Plan functionality for disasters that would need to be coordinated at the
state level. This iteration reverted to a waterfall process, as there were many novice
developers.
• Iteration 4 consolidated the feedback from the client and investigated technological
issues, such as the use of WaveLAN networks and cellular phone modems. A prototype
of the system was demonstrated using Newton PDAs. Iteration 4 included a subset of
students who took part in iteration 3 and followed an iterative software life cycle.
• Iteration 5 investigated the use of NeXTStep’s Distributed Objects as middleware
technology for managing all communication among nodes.
A company was spun off after iteration 5 to turn FRIEND into a product.
Lessons learned
Training the client. At the beginning of the project the client did not have any computer
background. However, the client invested quite a bit of time in the project and learned how to
communicate with the developers directly. By the fourth prototype, the client could understand
and criticize high-level class diagrams. In general, developers should not expect this to happen,
as clients usually do not plan time to learn about the project infrastructure. However, for a long-
term project with a collocated client, it is worthwhile to identify ways to train them.
Case Studies 691
Training the developers about the application domain. The students were able to learn the
main concepts of the application domain fairly quickly, as the client was available on short
notice for clarifying ambiguities and misunderstandings. Projects without a collocated client
have to find other ways to validate requirements and carefully track questions, ambiguities, and
changes.
Setting up a dedicated lab. The project benefited from a dedicated lab for students to
program, meet, prepare demonstrations, drink coffee, and conduct client presentations. A white
board was used for tracking current issues, task assignments, and project status, and was often
more up to date than the project web site. Having a single dedicated lab enabled informal
communication to take place and many design and management issues to be uncovered early and
resolved quickly.
Maintaining the infrastructure. The project organization chose to set up a tool team whose
responsibility was to find new development tools and existing class libraries and thereby to
support the infrastructure of the project. Because the participants of the tool team were
novices—which is typical for a student project course—they had little understanding of the
requirements of an infrastructure for supporting a large project. Moreover, as they did not
participate in the main development effort, they did not have much credibility with the other
students and were sidelined. We recommend instead to assign the responsibility of the
infrastructure to an administrative group independent of the specific project. Even in project-
based organizations, there is a need for project-independent support functions such as
infrastructure maintenance. Having a permanent infrastructure group makes it easier to reuse the
infrastructure across projects and increase the return on investment. The infrastructure group
also gains credibility with the developers with the accumulated experience from multiple
projects.
Using version control as an integration tool. The early set-up of a version control scheme
and build infrastructure in pre-development provided the teams with a concrete mechanism for
detecting and resolving conflicts early. Beginning with the pre-development phase of iteration 2
of this project, a “Hello World” prototype with corresponding build and test scripts was checked
into the version control repository. This practice is also being followed by many software
development companies, such as Microsoft [Cusumano & Selby, 1997].
Project goal
Smart card technology has opened up a vast range of applications. Some of the key
applications include pay phones, mobile communications, electronic cash, parking, health care
and network access. Another important application is the use of the smart card for the
automotive industry as a value-added service.
692 Chapter 16 • Methodologies: Putting It All Together
The goals of the JAMES project were twofold: First, to investigate JavaCard technology and
assess if it can be used to host multiple applications on the same card, the purpose being to
reduce the number of cards each individual needs to carry around. Second, to define a system
architecture that would enable users to select a combination of applications and dynamically
store them on their cards. This allows the car manufacturer to offer new services and
applications that could be added even after the purchase of the vehicle.
To accomplish these two goals, JAMES was to demonstrate a technology prototype that
included three smart card applications: Travel, a system for planning and following routes on an
onboard digital street map; Bonus, a reward system similar to a frequent flier mileage program;
and VIP, a system for storing and customizing individual preferences, such as seat position,
radio station, and audio volume settings.
Project environment
Proxy client. A proxy client from DaimlerChrysler was available full time during the project.
The proxy client presented the problem statement to the students during a kick-off meeting.
After the kick-off meeting, all communication with the client was through the proxy client. A
separate Lotus Notes database was set up exclusively for communication between the proxy
client and the students.
Novice participants. The developers of the JAMES project were drawn from the same pool of
senior students as the FRIEND project. The client and the proxy client came from the information
technology department of DaimlerChrysler and had knowledge of the application domain and
the software engineering methods used in the project.
No end user access. There was no access to the end user. Vehicle owners among the
developers and the proxy client were used as semi-representative end users.
Immature technology. The technology under evaluation (the Cyberflex kit developed by
Schlumberger [Schlumberger]) was in beta release. The JavaCard API it implemented was also
new, which resulted in a general lack of developer documentation and substantial time spent
working around bugs.
Three-site project. The project was distributed among three sites. One set of students was
working in Carnegie Mellon University (CMU), Pittsburgh, PA. The other set was working in
Technical University Munich (TUM), Germany. The client was located at Stuttgart, Germany,
and the proxy client for iteration 1 was located in Pittsburgh, collocated with the first team of
students. The proxy client returned to Stuttgart for the remaining iterations.
Project duration The project included three iterations, each lasting approximately four
months. The first was initiated at CMU; iteration 2 involved both the CMU and the TUM sites;
iteration 3 involved only the CMU site (Figure 16-4). The overall project, including pre- and
post-development, lasted 11 months.
Case Studies 693
Iteration 1 (CMU)
Iteration 2 (TUM)
Iteration 3 (CMU)
Legend:
The goal of the project was the demonstration of a conceptual prototype. Unlike FRIEND,
the demonstration environment was known in advance and constrained the development kit used
for programming the smart cards. This required more planning to take place earlier than in the
FRIEND project, as the project often worked with pre-release versions of the development tools.
Iteration 1 was planned as a waterfall iteration, similar to FRIEND. Fixed milestones delimited the
requirements, system design, implementation, and coding activities. Iteration 2 featured an
iterative prototyping approach, with prototypes of increasing functionality demonstrated every
month. The TUM and the CMU sites worked on different subsystems, but shared the same
architecture.
The conceptual prototype was required to interact with an existing software system for
accessing dealer data. The existence of this legacy system and the short iteration times reduced
the opportunity to reuse components that were not already part of the existing infrastructure.
Distributed software development can have several advantages. For example, a project can
leverage specific combinations of skills without relocating participants within the organization.
In JAMES, a substantial amount of knowledge needed to be transferred between sites at the
beginning of the second development phase. At CMU, most students participating in iteration 3
had participated in iteration 1. Hence, the knowledge transfer from iteration 1 to iteration 3 was
not an issue at CMU. At TUM, however, none of the participants were familiar with the system,
except for the instructor and one of the coaches. The participants at TUM were given access to
all the deliverables of iteration 1 and could communicate with the CMU team via Lotus Notes
694 Chapter 16 • Methodologies: Putting It All Together
and E-mail. To encourage further information exchange between both sites, two members from
the TUM team traveled to Pittsburgh early in iteration 2, and one member of the CMU team
traveled to Munich for the integration phase and the client acceptance test.
As in FRIEND, models in JAMES were used primarily as a basis for design and for
communication. The archival value of the documents produced by iteration 1 was limited, as
they were not consistent with the current version of the prototype. Students at the TUM site
reverse-engineered the first prototype system to recover an up-to-date model of the system,
correcting inconsistencies and omissions in the accompanying documentation. The result of this
activity, which we called Inventory Analysis, was an Inventory Analysis Document describing
the components of the first prototype and their implementation status (Table 16-10).
Table 16-10 Inventory documents.
Inventory Analysis Describes the models and components that have Inventory Analysis
Document been realized, their status, and the problems
associated with them
Table 16-11 Activities for JAMES. Differences from FRIEND highlighted in italics.
Management
(7)
Figure 16-5 Team organization of the development teams in Pittsburgh during iteration 1 (CMU Fall
course 15-413, 1997). White rectangles indicate subsystem teams; gray rectangles, cross-functional teams.
The numbers in parentheses indicate the number of team members.
functional teams, Architecture and HCI, composed of liaisons from the subsystem teams, were
responsible for coordinating issues related to system architecture and user interface,
respectively. Each team met weekly to report status and resolve open issues. Coaches of the
teams met with the project manager weekly.
During iteration 2, the two subsystem teams Bonus and VIP were located at TUM (23
participants), and the subsystem team Travel was at CMU (10 participants). The HCI and
Architecture teams were located at TUM and made into subsystem teams (as opposed to being a
cross-functional team). The team coaches reported to a site manager, who then reported to the
project manager. The coaches met weekly with the site manager. The project manager traveled
between sites every three weeks to coordinate and synchronize development at both sites.
As in FRIEND, the process was relaxed after two months into the iteration. During
iterations 1 and 2, this lead to similar results, with students finding roles in which they
performed best and a sustained meeting process that externalized status knowledge on the
bulletin boards. In the third iteration, however, the CMU team was sufficiently small that all
members could meet face to face in the same room. Consequently, it did not follow the meeting
process and posted fewer and fewer information on the bulletin boards, making it difficult to
communicate with the other site.
Outcome
The JAMES project ended in the successful demonstration of a prototype illustrating the
potential of automotive applications using the JavaCard technology. The demonstrated prototype
was not integrated, however: the final CMU and TUM demonstrations were based on different
versions of the architecture. The CMU team had simply ignored the revisions performed by the
TUM team and continued working on a branch dating back to the first development iteration.
Case Studies 697
This being our first experience with distributed projects, we encountered many difficult
issues that would have been simple to resolve in a non-distributed setting. For example, the final
client acceptance test was conducted on March 30, 1998, via a three-way video conference
between Pittsburgh, Munich, and Stuttgart. It was originally scheduled for 9 A.M. Pittsburgh
time and 3 P.M. German time. Unfortunately, Germany had switched to daylight saving time the
previous weekend, but the United States was to switch the following weekend. An American
student traveling to Munich caught the mistake (i.e., 3 P.M. CED was 8 A.M. EST), less than
48 hours before the meeting. Such miscalculations and misunderstandings cost the project quite
a bit in resources and additional stress.
Lessons learned
Training the client. Collaboration with the client turned out to be much more complicated
than originally expected for two reasons:
• During iteration 1, the proxy client was physically present at the development site and
always available. The proxy client quickly became familiar with the project process
and infrastructure, but she often had to forward information to the client for decisions.
The proxy client had the background and time to learn to use the infrastructure, but the
modeling information put out by the students was not at the right level of abstraction
for briefings at the client organization. Instead, all materials had to be translated and
summarized by the proxy client, which led to delayed responses from the client. A
scenario-based briefing approach, which we introduced at the end of the project,
improved this situation.
• During iteration 2, the proxy client was not physically present at either site. Electronic
communication and video conferencing during formal reviews were the only
communication medium during most of the iteration. Although this made it difficult for
the TUM team to come up to speed on the application domain, having the proxy client
back in her organization made it easier for the project to promote its results.
Training the developers about the process. In short iterations with students, quickly
teaching the software life cycle process know-how is critical to setting up the organization.
Starting with iteration 2, coaches were recruited from the best students of the previous iterations,
which made such quick ramp-up possible. Coaches were also able to disseminate application
domain knowledge and catch requirements problems early. Short iterations and high staff
turnover limit the number of tools that could be introduced. In general, changing the tools used
in the process and changes in the process itself are easier to accomplish between projects (as
opposed to during the project). For long-running projects, infrastructure and process changes
should occur only between releases.
Iteration overlap. The amount of time overlap between iterations in distributed projects
presents a critical project management trade-off. A small overlap prevents sufficient knowledge
698 Chapter 16 • Methodologies: Putting It All Together
to be transferred: participants from the second site will have to learn most of the knowledge
from work products only. A large overlap provides more opportunities for knowledge transfer in
the form of targeted questions and answers. If the second development phase starts too early,
however, participants of the second site interfere with the participants of the first site, who are
still in the process of creating the knowledge to be transferred.
Transferring implicit knowledge. Informal communication was not possible across sites,
because participants from different sites did not know each other. This prevented the
spontaneous information exchanges necessary for resolving issues and transferring implicit
knowledge. The only mechanism that worked effectively was travelling to the other sites.
Version control as an integration tool. In FRIEND, version control served as an integration
mechanism for teams to communicate. Occasionally, when a hand-over was necessary before a
change was fully integrated or debugged, incomplete versions were created for the sole purpose
of transferring files from one team to another. This use of the version control system, and more
generally, any informal use of a tool for communication, was not possible across sites.
Table 16-12 Summary of the project environment for the three case studies.
As a result, each project selected different methods with different results. In the following
sections we discuss heuristics that we extracted from the three case studies in the areas of
planning, modeling, process, and control. Table 16-13 summarizes the decisions made by each
Case Studies 699
Table 16-13 Summary of the methods selected in the three case studies.
project for these aspects. We do not discuss reuse since there was not a significant amount of
reuse in any of the three projects.
The return on the investment is lowest for short projects and few participants. In this
situation, peer reviews seem to be a much more effective way to transfer knowledge.
considered successful, it failed to keep the system design at both sites in sync. An activity-based
life cycle for managing cross-site issues would have been necessary in a project developing
production code to enable sufficient control. Entity-based life cycles require close collaboration
and informal communication to enable developers to resolve problems discovered in daily
builds.
The amount of control evolved and spanned the entire spectrum during the life cycle of
each project. FRIEND and JAMES started with strict hierarchical organizations in the first two
months of the iteration. This enabled the systematic rotation of roles in the project and a large
amount of status and technical information made explicit on the bulletin board. Consequently, by
the time coding was started (usually around Thanksgiving), students with leadership and
communication skills naturally assumed team leader and liaisons roles, respectively. Moreover,
the procedures that yielded benefits (e.g., writing meeting minutes) were deemed worth the
overhead associated with them, so they were kept by the students. In our experience, this enabled
us to relax the enforcement of procedures when students came back from Thanksgiving break,
leading to an agile, entity-based process. Technical decisions were made locally within teams,
and conflicts and issues could be dealt with faster than they could be communicated to
management.
In other words, the first two months of the iteration were used to set up a consistent vision
of the requirements and the architecture. Once these seeds were firmly planted, project
management could be relaxed. The project then evolved as a living organism, using natural
selection and self-organization. The team structure, the communication paths set up by the
liaison, and the meeting procedures usually survived the transition. The increasing deadline
pressure associated with the client acceptance test (which could not be rescheduled) ensured that
the project remained focused and that all teams worked in the same direction. Although the level
of experience and the number of participants prevented us from starting with a self-organizing
project, we were able to evolve into one by planting the appropriate seeds early in the iteration.
In FRIEND, this was possible because all developers had access to the client, who was able to
provide a coherent picture of the application domain. In JAMES, the distribution of the project
made a coherent evolution toward the client acceptance test much more difficult.
In general, an agile organization can function when all key participants share the same
goal and the same architectural concept, either because they are provided with the same vision
from the client or because the system concept is strong enough to herd them in a single direction.
Hierarchical organizations become necessary when stakeholders put forward many conflicting
criteria and contend for a limited amount of resources.
702 Chapter 16 • Methodologies: Putting It All Together
Methodological Heuristics
Be prepared to change the system. Changes to the software system will occur throughout the project.
The changes come from the client side (unforeseen usability issues, new requirements) as well as from
the development side (unforeseen technical issues, new architectural decisions). Trying to freeze the
specification may be desirable to make a project predictable, but it usually leads to an inferior product
that doesn’t meet the end users’ expectations. Instead, accept the concept that requirements and
architecture change throughout the project and define change management processes.
Be prepared to change the organization. Hierarchical projects and self-organizing projects have
different strengths. Hierarchical organizations are more predictable and more effective for getting a
project off the ground. Self-organizing projects foster more innovation and can lead to superior
products, with appropriate guidance. After developer expertise in the software life cycle increases and
after a common vision for the system requirements and architecture emerges, one should consider
delegating decision making to the individuals who have the knowledge to make the decision. This in
turn requires increased ability to assess actual progress with quality indicators and management metrics.
Be prepared to change the process. Expertise and common vision also facilitates adapting the process.
The software life cycle model can evolve from an activity-based process to an entity-based process in
which work is assigned in terms of changes to the baseline. As the core requirements are completed, the
project can be driven by time (e.g., release on a certain date) instead of by feature (e.g., release when
specific features are completed).
Shorten client decision time. The client must often be involved when dealing with major changes in the
project (new functionality, new release plan). Shortening the time needed for such critical decisions is
key to preventing the project from moving in the wrong direction. This requires an effective
communication mechanism for providing information to the client and resolving the issue with the right
decision maker. Local king clients are ideal for this. For projects without local kings, responsive
information and decision channels need to be put in place between the client and the project.
Build trust. Participants are reluctant to report bad news, especially if it stems from their own mistakes.
Moreover, if they believe they might be punished for making or reporting mistakes, the issue will simply
be covered up. Knowing about these mistakes early, however, is often the difference between a success
and a failure. Conversely, providing the resources and control to participants to address the reported,
unexpected problems helps keep the focus on a successful project outcome.
Learn the right lessons and nothing more. Delegating decision making can lead to perceived short-term
successes, which can result in the wrong lessons being learned. A solo heroic effort can be the
difference between meeting a milestone and missing it. However, the concentration of knowledge in a
limited number of participants can hurt the project and may lead to more serious failures down the road.
Moving from a command-and-control organization to a leadership-and-collaboration organization
requires the manager to become a teacher. Often, mistakes have to be made to ensure that the right
lessons are learned.
Further Readings 703
16.7 Exercises
16-1 What is the difference between a software life cycle and a methodology?
16-2 You are improving a legacy system. You need to customize a software life cycle for
your project. Which activities would you need? In which order?
16-3 Royce uses a management metric that counts the number of participants who leave the
project or join the project. You are managing a multi-team project and notice that the
staff turnover in one team is high. Hypothesize what causes could lead to such a
symptom. For each cause, propose a remedy.
16-4 The heuristics we outlined in Section 16.5.4 indicate that the need for models is higher
in distributed organizations. Open-source projects are highly distributed projects that
follow an entity-based life cycle and typically do not have requirements or system
design documents. Provide examples of how modeling knowledge is made explicit and
transferred among participants in such cases.
16-5 Royce’s methodology considers six project factors (scale, stakeholder cohesion,
process flexibility, process maturity, architectural risk, and domain experience) when
tailoring a process for a specific project (Section 16.4.1). Use these factors to describe
which types of projects could use XP as an appropriate methodology. Justify your
choice for each factor.
16-6 While working with Staphylococcus bacteria in 1928, Sir Alexander Fleming
accidently dropped some bread crumbs on one of the dishes. After a week the bacteria
on this dish did not grow as expected. Fleming noticed a bacteria-free circle around a
mold that was contaminating the staphylococcus culture. Instead of throwing the dish
away because the planned experiment had failed, he isolated the mold, grew it in a fluid
medium, and discovered a substance that prevented growth of the bacteria even when it
704 Chapter 16 • Methodologies: Putting It All Together
was diluted 800 times. Discuss the discovery of penicillin using the terminology and
issues introduced in this chapter.
16-7 Based on the assumption that the earth was round, Columbus’s goal was to find a
shorter way to India by going west instead of east. He encountered America instead of
India. Discuss the discovery of America by Columbus using the terminology and issues
introduced in this chapter.
16-8 Select a project you have been involved with. Using the methodological categories
defined in this chapter, describe the trade-offs that occurred in the project.
References
[AgileManifesto, 2001] http://www.agilemanifesto.org.
[Aguanno, 2005] K. Aguanno, Managing Agile Projects, Multi-Media Publications, Ontario, 2005.
[Ambler, 2002] S. Ambler, Agile Modeling: Effective Practices for Extreme Programming and the
Unified Process, John Wiley & Sons, 2002.
[Beck & Andres, 2005] K. Beck & C. Andres, Extreme Programming Explained: Embrace Change, 2nd ed.,
Addison-Wesley, Reading, MA, 2005.
[Boehm et al., 2000] B. Boehm, E. Horowitz, R. Madachy, D. Reifer, B. K. Clark, B. Steece, A. W. Brown,
S. Chulani, & C. Abts, Software Cost Estimation with COCOMO II, Prentice Hall,
Upper Saddle River, NJ, 2000.
[Bonatti, 2001] W. Bonatti, The Mountains of My Life, Modern Library, Random House, New York,
2001.
[Buhl, 1956] H. Buhl, Nanga Parbat Pilgrimage, Hodder & Stoughton, London, 1956.
[Cockburn, 2001] A. Cockburn, Agile Software Development, Addison-Wesley, Reading, MA, 2001.
[Cohn, 2006] M. Cohn, Agile Estimating and Planning, Pearson, Upper Saddle River, NJ, 2006.
[Cusumano & Selby, 1997] M. A. Cusumano & R. W. Selby, “How Microsoft Builds Software,” Communications
of the ACM, Vol. 40, No. 6, pp. 53–61, 1997.
[Deming, 1982] E. W. Deming, Out of the Crisis, MIT Press, Cambridge, MA, 1982. 2ed. published
2000.
[Fowler, 2005] M. Fowler, The new methodology,
http://www.martinfowler.com/articles/newMethodology.html. Revised 2005.
[Gleick, 1987] J. Gleick, Chaos - Making a New Science, Penguin Books Ltd, Harmondsworth,
Middlesex, 1987.
[Gladwin, 1964] T. Gladwin, “Culture and logical process,” in W. Goodenough (ed.), Explorations in
Cultural Anthropology: Essays Presented to George Peter Murdock, McGraw-Hill,
New York, 1964.
[Grenning, 2002] J. Grenning, Planning Poker, http://www.planningpoker.com/ 2002.
[Highsmith & Orr, 2000] J. Highsmith & K. Orr, Adaptive Software Development: A Collaborative Approach to
Managing Complex Systems, Dorset House, 2000.
[Highsmith, 2004] J. Highsmith, Agile Project Management, Pearson Education, Boston, 2004.
[Hock, 1999] D. Hock, Birth of the Chaordic Age, Berrett-Koehler Publishers, San Francisco, 1999.
[Kelly, 1984] J. F. Kelly, “An iterative design methodology for user-friendly natural language office
information applications,” ACM Transactions on Information Systems, Vol. 2, No. 1,
January 1984.
References 705
[Larman & Vodde, 2008] C. Larman & B. Vodde, Scaling Lean & Agile Development: Thinking and
Organizational Tools for Large-Scale Scrum, Addison-Wesley, Reading, MA, 2008.
[Marshall, 2001] R. Marshall, What really happened at K2? Chapter 24 in [Bonatti, 2001].
[Norman, 2002] D. A. Norman, The Design of Everyday Things, Basic Books, New York, 2002.
[Palmer & Felsing, 2002] S. Palmer & J. Felsing, A Practical Guide to Feature-Driven Development, Prentice
Hall, Upper Saddle River, NJ, 2002.
[Paulk et al., 1995] M. C. Paulk, C. V. Weber, B. Curtis (eds.), The Capability Maturity Model: Guidelines
for Improving the Software Process, Addison-Wesley, Reading, MA, 1995.
[Petroski, 1992] H. Petroski, To Engineer is Human, Vintage Books, Random House, New York, 1992.
[Petroski, 1994] H. Petroski, The Evolution of Useful Things, Vintage Books, Random House, New
York, 1994.
[Royce, 1998] W. Royce, Software Project Management: A Unified Framework, Addison-Wesley,
Reading, MA, 1998.
[Rumbaugh et al., 1991] J. Rumbaugh, M. Blaha, W. Premerlani, F. Eddy, & W. Lorensen, Object-Oriented
Modeling and Design, Prentice Hall, Englewood Cliffs, NJ, 1991.
[Schlumberger] Schlumberger, http://www.cyberflex.com/.
[Schwaber, 1995] K, Schwaber, “Scrum Development Process,” Business Object Design and
Implementation Workshop, OOPSLA’95, Austin, TX, October 1995.
[Schwaber & Beedle, 2002] K. Schwaber & M. Beedle, Agile Software Development with Scrum, Prentice Hall,
Upper Saddle River, NJ, 2002.
[Suchman, 2007] L. A. Suchman, Human-Machine Reconfiguration: Plans and Situated Actions, 2nd
ed. Cambridge University Press, 2007.
[Takeuchi & Nonaka, 1986] H. Takeuchi &I. Nonaka. “The New New Product Development Game” Harward
Business Review, 1986.
[Taylor, 1911] F. W. Taylor, The Principles of Scientific Management, Harper Bros., New York, 1911.
[Tunde & Ray, 1994] A. O. Babatunde & W. H. Ray, Process Dynamics, Modeling and Control, Oxford
University Press, 1994.
[Weinberg, 1971] G. M. Weinberg, The Psychology of Computer Programming, Van Nostrand, New
York, 1971.
This page intentionally left blank
PART IV
Appendices
This page intentionally left blank
A P P E N D I X A
Design Patterns
D esign patterns are partial solutions to common problems, such as separating an interface
from a number of possible implementations, wrapping around a set of legacy classes, or
protecting a caller from changes associated with specific platforms. A design pattern is
composed of a small number of classes that, through delegation and inheritance, provide a
robust and modifiable solution. These classes can be adapted and refined for the specific system
under construction. In addition, design patterns provide examples of inheritance and delegation.
Since the publication of the first book on design patterns for software [Gamma et al.,
1994], many additional patterns have been proposed for a broad variety of problems, including
analysis [Fowler, 1997] [Larman, 2005], system design [Buschmann et al., 1996], middleware
[Mowbray & Malveau, 1997], process modeling [Ambler, 1998], dependency management
[Feiler & Tichy, 1998], configuration management [Brown et al., 1999], and methodology
adoption [Elssamadisy, 2009]. The term itself has become a buzzword attributed to many
different definitions. In this book, we focused only on the original catalog of design patterns, as
it provides a concise set of elegant solutions to many common problems. This appendix
summarizes the design patterns we use in the book and natural language heuristics for applying
them. For each pattern, we provide pointers to the examples in the book. Our goal is to provide a
quick reference. We assume from the reader a basic knowledge of design patterns, object-
oriented concepts, and UML class diagrams.
709
710 Appendix A • Design Patterns
createProductA()
createProductB()
ConcreteFactory1 ConcreteFactory2
createProductA() createProductA()
createProductB() createProductB()
AbstractProductA AbstractProductB
Figure A-1 The Abstract Factory design pattern (adapted from [Gamma et al., 1994]).
Appendix A • Design Patterns 711
Client
ClientInterface LegacyClass
Request() ExistingRequest()
adaptee
Adapter
Request()
Related concept • The Bridge (Section A.3) fills the gap between an interface and its
implementations.
Figure A-2 The Adapter design pattern (adapted from [Gamma et al., 1994]).
712 Appendix A • Design Patterns
Client
imp
Abstraction Implementor
Concrete Concrete
RefinedAbstraction ImplementorA ImplementorB
Figure A-3 The Bridge design pattern (adapted from [Gamma et al., 1994]).
Appendix A • Design Patterns 713
Invoker Command
invokes
execute()
execute()
Client
«binds»
Receiver ConcreteCommand1
action1()
action2() execute()
ConcreteCommand2
execute()
Consequences • The object of the command (Receiver) and the algorithm of the command
(ConcreteCommand) are decoupled.
• Invoker is shielded from specific commands.
• ConcreteCommands are objects. They can be created and stored.
• New ConcreteCommands can be added without changing existing code.
Examples • Providing an undo stack for user commands: All user-visible commands are
refinements of the Command abstract class. Each command is required to
implement the do(), undo(), and redo() methods. Once a command is
executed, it is pushed onto an undo stack. If the user wishes to undo the last
command, the Command object on the top of the stack is sent the message
undo().
• Decoupling interface objects from control objects (Section 8.4.5, see also
Swing Actions, [JFC, 2009]): All user-visible commands are refinements of
the Command abstract class. Interface objects, such as menu items and
buttons, create and send messages to Command objects. Only Command
objects modify entity objects. When the user interface is changed (e.g., a
menu bar is replaced by a tool bar), only the interface objects are modified.
• Decoupling Moves from Games in ARENA (Section 8.6.2)
Related concept • MVC architecture (Figure 6-15).
Figure A-4 The Command design pattern (adapted from [Gamma et al., 1994]).
714 Appendix A • Design Patterns
Leaf Composite
leaves
Consequences • Client uses the same code for dealing with Leaves or Composites.
• Leaf-specific behavior can be modified without changing the hierarchy.
• New classes of Leaves can be added without changing the hierarchy.
Examples • Groups of drawable elements: Drawable elements can be organized in
groups that can be moved and scaled uniformly. Groups can also contain
other groups.
• Hierarchy of files and directories (Figure 2-28): Directories can contain files
and other directories. The same operations are available for moving,
renaming, and removing files as well as directories.
• Describing subsystem decomposition (Figure 6-3): We use a Composite
pattern to describe subsystem decomposition. A subsystem is composed of
classes and other subsystems. Note that subsystems are not actually
implemented as Composites to which classes are dynamically added.
• Describing hierarchies of tasks (Figure 6-8): We use a Composite pattern to
describe the organizations of Tasks (Composites) into Subtasks
(Components) and ActionItems (Leaves).We use a similar model to
describe Phases, Activities, and Tasks (Figure 15-6).
Related concept • Facade pattern (Section A.6).
Figure A-5 The Composite design pattern (adapted from [Gamma et al., 1994]).
Appendix A • Design Patterns 715
Compiler
Compiler
compile(s)
CodeGenerator Lexer
create() getToken()
Optimizer Parser
create() generateParseTree()
ParseTree
create()
Figure A-6 The Facade design pattern (adapted from [Gamma et al., 1994]).
716 Appendix A • Design Patterns
ConcretePublisher ConcreteSubscriber
state observerState
getState() update()
setState()
Figure A-7 The Observer design pattern (adapted from [Gamma et al., 1994]).
Appendix A • Design Patterns 717
ProxyObject RealObject
1 0..1
filename data:byte[]
op1() op1()
op2() op2()
Figure A-8 The Proxy design pattern (adapted from [Gamma et al., 1994]).
718 Appendix A • Design Patterns
Client Policy
Context Strategy
contextInterface() algorithmInterface()
ConcreteStrategyA ConcreteStrategyB
Figure A-9 The Strategy design pattern (adapted from [Gamma et al., 1994]).
Appendix A • Design Patterns 719
References
[Ambler, 1998] S. W. Ambler, Process Patterns: Building Large-Scale Systems Using Object
Technology, Cambridge University Press, New York, 1998.
[Brown et al., 1999] W. J. Brown, H. W. McCormick, & S. W. Thomas, AntiPatterns and Patterns in
Software Configuration Management, Wiley, New York, 1999.
[Buschmann et al., 1996] F. Buschmann, R. Meunier, H. Rohnert, P. Sommerlad, & M. Stal, Pattern-Oriented
Software Architecture: A System of Patterns, Wiley, Chichester, U.K., 1996.
[Elssamadisy, 2009] A. Elssamadisy, Agile Adoption Patterns, Addison-Wesley, Reading, MA, 2009.
[Feiler & Tichy, 1998] P. Feiler & W. Tichy, “Propagator: A family of patterns,” Proceedings of
TOOLS-23’97, July 28–August 1 1997, Santa Barbara, CA.
[Fowler, 1997] M. Fowler, Analysis Patterns: Reusable Object Models, Addison-Wesley, Reading,
MA, 1997.
[Gamma et al., 1994] E. Gamma, R. Helm, R. Johnson, & J. Vlissides, Design Patterns: Elements of
Reusable Object-Oriented Software, Addison-Wesley, Reading, MA, 1994.
[JFC, 2009] Java Foundation Classes, JDK Documentation, Javasoft, 2009.
[Larman, 2005] C. Larman, Applying UML and Patterns: An Introduction to Object-Oriented
Analysis and Design, 3rd ed., Prentice Hall, Upper Saddle River, NJ, 2005.
[Mowbray & Malveau, 1997] T. J. Mowbray & R. C. Malveau, CORBA Design Patterns, Wiley, New York, 1997.
A P P E N D I X B
Glossary
abstract class Superclass that is used only for specialization and never instantiated. Abstract
class names are italicized.
abstract data type A data type defined by an implementation-independent specification.
abstraction The classification of phenomena into concepts. See also modeling.
acceptance testing A system testing activity during which the client decides whether the
system meets the acceptance criteria.
access control list A representation of the access control matrix in which legitimate rights are
represented as a list of (actor, operation) pairs attached to the class that is controlled.
access right A cell in the access control matrix that represents which operations a specific
actor may invoke on a specific class.
accuracy A quantitative measure of the magnitude of error.
action A fundamental unit of behavior. Actions can take a set of inputs, produce a set of
outputs, and change the state of the system. Actions are fundamental in the sense that they are
not decomposed further. Actions can be associated with specific points in a state machine, such
as transitions, state entry, and state exit. Actions normally take a short amount of time to execute
and cannot be interrupted.
action item A task assigned to a participant with a completion date, usually as a result of an
issue resolution.
activity In a software life cycle, a set of tasks performed toward a specific purpose. Activities
can include few or many tasks, depending on their goal. Examples of activities include
requirements elicitation, object identification, and unit testing. See also process.
721
722 Appendix B • Glossary
In a state machine diagram, a behavior executed as long as an object resides in some state.
Whereas an action is short and non-interruptible, an activity can take a substantial amount of
time and is interrupted when a transition exiting the state is fired. Contrast with action.
activity-centered software life cycle model A software life cycle model that represents
primarily the activities of development. Contrast with entity-centered software life cycle model.
activity diagram UML notation representing the behavior of a system in terms of activities.
An activity is a state that represents the execution of a set of operations. The completion of these
operations then triggers a transition to another activity. Activity diagrams are used to illustrate
combinations of control and data flow.
activity partition See swimlane.
actor External entity that needs to exchange information with the system. An actor can
represent either a user role or another system.
adaptability The ability to change the system to deal with additional application domain
concepts.
aggregation An association denoting a whole–part relationship between two classes. For
example, a System is composed of Subsystems is an aggregation association.
alternative See proposal.
ambiguity Property of a model indicating whether a concept corresponds to two or more
unrelated phenomena.
analysis An activity during which developers ensure that the system requirements are correct,
complete, consistent, and unambiguous. Analysis produces the analysis model.
analysis model A model of the system that aims to be correct, complete, consistent, and
unambiguous. The analysis model consists of the functional model, the analysis object model,
and the dynamic model.
analysis object model The object model produced during analysis. The analysis object model
describes the application domain concepts that the system manipulates and the user-visible
interfaces of the system.
analyst The role of the developers who elicit application domain information from users and
clients and construct a use case model of the system under development.
API See Application Programmer Interface.
API engineer A role concerned with defining the API of a subsystem. This role is often
combined with the role of architecture liaison.
application domain Represents all aspects of the user’s problem. This includes the physical
environment in which the system will run, the users, and their work processes. The application
domain is represented by the analysis model during requirements and analysis activities. The
application domain is also called the problem domain. Contrast with solution domain.
Appendix B • Glossary 723
application domain specialist A consultant role responsible for providing application domain
expertise to a project.
application framework A reusable partial application that can be specialized to produce
custom applications. See also class libraries.
application object Object in the analysis model that represents an application domain
concept. The application object is also called the application domain object.
Application Programmer Interface (API) Set of fully specified operations provided by a
subsystem.
architect The role of the developers who make strategic system decisions and construct the
system design model.
architectural pattern See architectural style.
architectural style A general system design model that can be used as a starting point for
system design. Examples of architectural styles include client/server, peer to peer, pipe and
filter, and model/view/controller.
architecture See system design model.
architecture liaison The role of the developers who represent a subsystem team in the
architecture team. They convey information from their team, negotiate interface changes, and
ensure the consistency of APIs across the system.
argument Value passed along with a message.
argumentation The debate among participants to resolve an issue.
as-is scenario Scenario that describes an existing system. As-is scenarios can be used to
validate the developers’ understanding of the system with users.
association A relationship between two or more classes denoting the possible links between
instances of the classes. An association has a name and can have multiplicity and role
information attached to each of its ends.
association class An association with attributes and operations.
attribute A named property of a class defining a range of the values an object can contain. For
example, time is an attribute of the class Watch.
attribute type See type.
attribute visibility Specifies whether or not the attribute can be accessed by other classes.
auditing Validation of versions before a release to ensure consistent and complete delivery.
auditor The role responsible for selecting and evaluating promotions for release.
authentication The process of associating a person with access rights.
724 Appendix B • Glossary
availability The degree to which a system or component is operational and accessible when
required for use.
base class See superclass.
baseline A version of a configuration item that has been formally reviewed and agreed on.
bazaar model A project organization that includes a dynamic and distributed set of
collaborating groups. Contrast with cathedral model.
big bang testing An integration testing strategy in which all components are tested together as
a whole after they have been unit tested.
blackbox framework A framework that relies on well-defined interfaces for extensibility.
Contrast with whitebox framework.
blackbox test A test which focuses on the input/output behavior of a component without
considering its implementation. Contrast with whitebox test.
bottom-up testing An integration testing strategy in which components are incrementally
integrated starting at the lowest level. Bottom-up testing does not require any test stubs. Contrast
with top-down testing, sandwich testing.
boundary object An object that represents the interactions between the user and the system.
boundary condition A special condition the system must handle. Boundary conditions
include start-up, shutdown, and exceptions.
boundary use case A use case for dealing with a boundary condition.
brainstorming A scheduled communication event during which participants generate a large
number of alternatives.
branch A concurrent development path under configuration management.
bug See fault.
build management Tool support for automatically rebuilding the system when new versions
are added.
buried association A foreign key used to represent a one-to-many or a many-to-many
association when mapping an object model to a relational schema.
callback An operation that is temporary and dynamically registered with a class, usually for
the purpose of notification. For example, the subject object in the observer pattern invokes
callbacks to notify subscribed observers.
candidate key In a database management system, a set of attributes that could be used as a
primary key.
capability A representation of access control in which legitimate rights are represented as
(class, operation) pairs attached to an actor. Examples of capabilities include a door key, a
smart card, and a theater ticket.
Appendix B • Glossary 725
Capability Maturity Model (CMM) Framework for assessing the maturity of organizations
characterized by five levels of maturity.
cathedral model A project organization emphasizing planning, system architecture, and
hierarchical control. The chief programmer team is an example of cathedral model. Contrast
with bazaar model.
Centralized Traffic Control (CTC) Procedures and systems enabling dispatchers to monitor
and control train traffic remotely from a central location.
change The adaptation of an aspect of the system, such as the addition or modification of a
requirement, or the substitution of a component for another. See also delta.
change control A process of approving or rejecting a change request to ensure that system
evolution is consistent with project goals.
change control board Team approving change requests in the context of a formal change
process.
change request An unscheduled communication event during which a participant requests a
modified or a new feature in a work product. In configuration management, a formal report
requesting the modification of a configuration item.
change set A set of deltas indicating the differences between two configurations.
chief programmer organization A hierarchical project organization in which the team leader
makes all the critical technical decisions.
clarity See ambiguity.
class An abstraction of a set of objects with the same attributes, operations, relationships, and
semantics. Classes are different than abstract data types in that a class can be defined by
specializing another class. For example, programming languages such as Modula and Ada
provide mechanisms for defining abstract data types; object-oriented languages such as Java,
C++, or Smalltalk provide mechanisms for defining classes.
class diagram UML notation representing the structure of the system in terms of objects,
classes, attributes, operations, and associations. Class diagrams are used to represent object
models during development.
class extender A developer that realizes specializations of the class under consideration.
Although, like class implementors, class extenders may invoke operations provided by the class
of interest, class extenders focus on specialized versions of the same services.
class implementor A developer that realizes the class under consideration. Class
implementors are responsible for designing the internal data structures and implementing the
code for each publication operation.
class user A developer that invokes the operations provided by the class under consideration
during the realization of another class, called the client class.
726 Appendix B • Glossary
client A role representing the person or company paying for the development of the system.
client class In a design pattern, a class that accesses the pattern interface.
client review A scheduled communication event during which a client monitors the status of a
project.
client/server architectural style An architectural style in which user interactions are
managed by simple client programs and functionality is delivered by a central server program.
closed architecture A layered system in which a layer can depend only on layers immediately
below it. Contrast with open architecture.
closed issue An issue that has been resolved.
CM aggregate See configuration management aggregate.
CMM See Capability Maturity Model.
cohesion The strength of dependencies within a subsystem or a class. High coherence is
desirable as it keeps related classes together so they can be modified consistently.
communication An activity during which developers exchange information, either
synchronously or asynchronously, and either spontaneously or according to a schedule.
communication diagram UML notation representing the behavior of the system as a series of
interactions among a group of objects. Each object is depicted as a rectangle in an instance
diagram. Interactions are depicted as lines between objects, annotated with the name of the
message sent. The order of interactions is represented with numbers next to the message names.
See also sequence diagram.
communication event A type of information exchange that has a defined objective and scope.
A communication event can be scheduled or event driven. Examples of communication events
include client reviews, status reviews, and problem reports.
communication mechanism A tool or a procedure that can be used to transmit and receive
information. Communication mechanisms support one or more communication events.
Examples of communication mechanisms include telephone, fax, E-mail, and groupware.
Communication mechanisms can be either synchronous or asynchronous, depending whether or
not the sender and receiver need to be available at the same time.
communication relationship A type of relationship in a use case diagram denoting the flow
of information between an actor and a use case.
completeness The property of a model describing whether or not all relevant phenomena are
modeled. A model is incomplete if one or more relevant phenomena do not have a
corresponding concept in the model.
component A physical and replaceable part of the system that complies to an interface.
Examples of components include class libraries, frameworks, and binary programs.
Appendix B • Glossary 727
component expert A role of the developers responsible for providing detailed knowledge
about using a specific component.
component inspection A testing technique that finds faults in a component through the
manual inspection of the source code.
composition aggregation An aggregation relationship in which the existence of the parts
depends on the whole. Contrast with shared aggregation.
concept An abstraction of a set of phenomena with common properties. For example, this
book, my black watch, and the Valley Fisherman’s Club are phenomena. Textbooks on object-
oriented software engineering, black watches, and fisherman’s clubs are concepts. Contrast with
phenomenon.
configuration A version of a configuration management aggregate.
configuration item A work product that is treated as a single entity for the purpose of
configuration management and that needs to be baselined. See also configuration management
aggregate.
configuration management An activity during which developers monitor and control
changes to the system or its models. Goals of configuration management include saving enough
information so that it is possible to restore the system to a prior version; preventing changes that
are not consistent with project goals; and managing concurrent development paths aimed at
evaluating competing solutions.
configuration management aggregate (CM aggregate) An aggregate of related configura-
tion items.
configuration manager A role of the developers responsible for tracking, baselining, and
archiving work products.
consistency The property of a model that indicates whether or not it contradicts itself. A
model is inconsistent if it provides several incompatible views of the system.
constraint A rule attached to a UML element restricting its semantics. Constraints can be
depicted by a note containing natural language text or an expression in a formal language (e.g.,
OCL).
consultant role Any role that is concerned with providing temporary and specialized support
where project participants lack expertise. Consultant roles include the user, the client, the
technical consultant, and the application domain specialist.
contract A set of constraints on a class or a component allowing the caller and the callee to
share the same assumptions about the class or the component. See also invariant, precondition,
and postcondition.
contract inheritance The propagation of the contract of the superclass to its subclasses.
control flow The sequence of execution of operations in the system. Contrast with data flow.
728 Appendix B • Glossary
control node In an activity diagram, nodes that coordinate the control flow in a diagram. See
decision, fork node, join node.
control object An object that represents a task performed by the user and supported by the
system.
controller In the Model/View/Controller architectural style, a type of subsystem or object
that manages the sequence of interactions with the user.
correction A change to a component for the purpose of repairing a fault.
correctness The property of a model that indicates if it accurately represents the system that
the client needs and that the developers intend to build.
cost criterion A design goal related to the cost of developing, operating, or installing the
system.
coupling The strength of the dependencies between two subsystems or two classes. Low
coupling results in subsystems that can be modified with minimal impact on other subsystems.
CRC card An index card representing a class. The name of the Class is depicted on the top,
its Responsibilities in the left column, and the names of the classes (called Collaborators) it
needs to accomplish its responsibilities are depicted in the right column.
criterion A measure of goodness used when evaluating alternatives for an issue.
critical path The longest path in the task model. Delays on critical path tasks directly result in
a delay in the overall schedule.
cross-development A process group that includes processes that occur throughout the project
and that ensure the completion and quality of project functions. Examples of cross-development
processes include validation and verification, configuration management, documentation, and
training. Also called integral processes.
cross-functional role Any role concerned with coordinating the work of more than one team.
Examples of cross-functional roles include the configuration manager, the architecture liaison,
the tester, and the document editor.
cross-functional team A team responsible for supporting a subsystem team during a cross-
functional activity such as configuration management, integration, or testing. Contrast with
subsystem team.
CTC See centralized traffic control.
data flow The sequence in which data is transferred, used, and transformed in the system.
Contrast with control flow.
data type An abstraction of a set of values in the context of a programming language. For
example, int is the Java data type that abstracts all the integer values.
Appendix B • Glossary 729
debugging A fault detection technique that attempts to find a fault from an unplanned failure
by stepping through successive states of the system.
decision In the context of activity diagrams, a branch in the control flow of an activity
diagram. A decision denotes alternative transitions based on a condition. In the context of issue
modeling, an issue resolution.
Decision Representation Language (DRL) An issue model extending IBIS to represent the
qualitative elements of decision making.
defect See fault.
delegation A mechanism for code reuse in which an operation merely resends (i.e., delegates)
a message to another class to accomplish the desired behavior.
deliverable A work product destined for the client.
delta A set of differences between two successive versions. Also called change.
dependability The property of a computer system that describes how reliably it performs.
dependability criterion A design goal related to minimizing the number of system crashes
and the consequences of a system crash. Examples of dependability criteria include robustness,
reliability, availability, fault tolerance, security, and safety.
deployment diagram A UML diagram representing run-time components and their
assignments to hardware nodes.
derived class See subclass.
design goal A quality that the system should optimize. Design goals are often inferred from
nonfunctional requirements and are used to guide design decisions. Examples of design goals
include usability, reliability, security, and safety.
design object See solution object.
design pattern A template solution that developers have refined over time to solve a range of
recurring problems. A design pattern includes a name, a problem description, a solution, and a
set of consequences. Specific design patterns are described in Appendix A.
designer See object designer.
developer Any role that is concerned with specifying, designing, and constructing
subsystems. Examples of development roles include the analyst, the system architect, the object
designer, and the implementor.
different time, different place groupware See groupware.
document editor A role of the person who integrates the documents.
domain object See application object.
DRL See Decision Representation Language.
730 Appendix B • Glossary
dynamic access control An access control policy that can be set at runtime. Contrast with
static access control.
dynamic model Describes the components of the system that have interesting behavior. In this
book, we represent the dynamic model with state machine diagrams, sequence diagrams, and
activity diagrams.
egoless programming A project organization in which responsibilities are assigned to a team
instead of individuals. Roles within a team are interchangeable.
encryption A translation of a message, called plaintext, into an encrypted message, called
ciphertext, such that it cannot be understood by unauthorized persons.
end user A role of the people who will use the delivered system.
end user criterion A design goal related to user-visible attributes of the system not yet
covered under a dependability or performance criterion.
enterprise application framework An application-specific framework used for enterprise
business activities.
entity-centered software life cycle model A software life cycle model that primarily
represents the work products produced during development. Contrast with activity-centered
software life cycle model.
entity object An object that represents persistent or long-lived information tracked by the
system.
entry condition A condition that needs to be satisfied before a use case is initiated.
environment The elements that are present at the beginning of a project.
erroneous state State of the system such that further processing will lead to a failure.
error See erroneous state.
evaluation scenario Scenario that describes an instance of a user task against which the
system is to be evaluated.
event A relevant occurrence in the system. An event is an instance of an event class. Examples
of events include a stimulus from an actor, a time-out, or the sending of a message between two
objects.
event class An abstraction representing a set of events for which the system has a common
response.
event-driven control A control flow paradigm in which a main loop waits for an event and
dispatches it to the appropriate object.
exception An unexpected event that occurs during the execution of the system.
exception handling A mechanism by which a system treats an exception.
exit condition A condition that are satisfied after the completion of a use case.
Appendix B • Glossary 731
extend relationship A type of relationship in a use case diagram denoting that one use case
extends the flow of events of another one. Extends relationships are typically used for modeling
exceptional behavior, such as exception handling and help functionality.
extender class The class that specializes an implementor class to provide a different
implementation or an extended behavior of the design pattern.
extensibility The quality of a system indicating how easily the system can be changed to
accommodate new functionality.
external behavior The behavior of the system from the user’s point of view. The use case
model describes the external behavior of the system.
Extreme Programming (XP) A methodology targeted for small teams of developers who
need to develop software quickly in a changing environment. Extreme Programming aims at
making the design of the system as explicit as possible in the source code, hence reducing the
need for documentation and the risk of inconsistencies among different documents.
facilitator A meeting management role responsible for organizing and executing a meeting.
The primary facilitator writes the meeting agenda, notifies the meeting participants, and ensures
during the meeting that the agenda is followed. A secondary facilitator supports the primary
facilitator’s role in keeping the meeting on track.
failure Deviation of the observed behavior from the specified behavior.
falsification The process of explicitly trying to demonstrate that a model has faults (e.g., the
model omits relevant details or represents relevant details incorrectly). Prototype and testing are
examples of falsification.
fault The mechanical or algorithmic cause of an error. Also called a bug or a defect.
fault avoidance A method aimed at preventing the insertion of faults while building the
system. Examples of fault avoidance techniques include development methodologies,
configuration management, verification, and reviews.
fault detection A method aimed at discovering faults in the running system. Examples of
fault detection techniques include debugging and testing.
fault tolerance A method aimed at constructing systems that do not fail in the presence of
faults. The ability to withstand faults without failing.
field testing See pilot testing.
firewall A packet filter that allows or denies network packets to go through based on their
source and destination.
flow of events A sequence of events in a use case describing the interactions between the actor
and the system.
foreign key In a database management system, an attribute (or a set of attributes) that
references the primary key of another table.
732 Appendix B • Glossary
fork node In an activity diagram, a control node that represents the spilling of the control flow
into multiple threads.
forward engineering The process of applying a transformation to a set of model elements,
resulting in a set of corresponding source code statements, such as a class declaration, a Java
expression, or a database schema. Contrast with reverse engineering.
four-tier architectural style An architectural style that organizes the system into four layers:
presentation client, presentation server, application logic, and storage.
framework A set of classes providing a general solution that can be refined to provide an
application or a subsystem.
functional model Describes the functionality of the system from the user’s point of view. In
this book, we represent the functional model with use cases.
functional requirement An area of functionality the system must support. The functional
requirements describe the interactions between the actors and the system independent of the
realization of the system.
functional testing A system testing activity during which developers find differences between
the observed functionality and the use case model.
Gantt chart A notation for representing the schedule of a software project along the time axis.
A Gantt chart is a bar graph in which the horizontal axis represents time and the vertical axis
represents the different tasks to be done. Tasks are represented as bars whose lengths correspond
to the planned duration of the task.
generalization A modeling activity that results in identifying abstract concepts from lower-
level ones.
generalization-specialization relationship See inheritance relationship.
global access table A representation of access rights in which every legitimate right is
represented as an (actor, class, operation) tuple.
goal A high-level principle used to guide the project. Goals define the important attributes of
the system: for example, safety in a transportation vehicle, low cost in shrinkwrapped software.
goodness measure A qualitative or quantitative criterion used to assess a proposal. See also
criterion.
greenfield engineering A development project that starts from scratch. See also re-
engineering, interface engineering.
groupware Any software tool supporting the exchange of information among a set of
participants. Same time, different place groupware supports synchronous exchanges. Different
time, different place groupware supports asynchronous exchanges.
hallway conversation A synchronous mechanism of communication during which
participants meet face to face accidentally.
Appendix B • Glossary 733
inspection A scheduled communication event during which developers formally peer review a
work product with respect to a list of pre-defined criteria. See also walkthrough.
installation An activity during which the system is installed and tested in its operating
environment. Installation can also include the training of users.
installation testing A system testing activity during which developers and the client test the
system in the operational environment.
instance Member of a specific data type. For example, 1291 is an instance of the data type
int. 3.14 is an instance of the data type float.
integral processes See cross-development.
integration testing A testing activity during which developers find faults by combining a
small number of subsystems or objects.
interaction diagram UML notation for representing the system’s behavior in terms of
interactions among a set of objects. Interaction diagrams are used to identify objects in the
application and implementation domains. Interaction diagrams is a general term for referring to
communication diagrams and sequence diagrams.
interface engineering A development project in which the interface of a system is redesigned
and reimplemented, and the core functionality is left untouched. See also greenfield engineering,
reengineering.
interface inheritance See specification inheritance.
interface requirement Constraint imposed by external systems, including legacy systems and
interchange formats.
internal transition A transition that does not leave the state. Internal transitions are triggered
by events and can have associated actions. However, firing an internal transition does not result
in executing any exit or entry actions. See also action, transition.
internal work product A work product destined only for the internal consumption of the
project.
invariant A predicate that is always true for all instances of a class.
IBIS See Issue-based information system.
issue A critical problem that has no clear solution.
Issue-Based Information System (IBIS) An issue model proposed by Kunz Rittel composed
of three types of nodes: issue, position, and argument.
issue-based development See issue-based life cycle model.
issue-based life cycle model An entity-based software life cycle model in which an issue
model is used to monitor and control progress in the project.
Appendix B • Glossary 735
issue model A model representing the rationale of one or more decisions as a graph. Nodes of
an issue model typically includes issues, proposals, arguments, criteria, and resolutions.
issue resolution An unscheduled communication event during which participants reach a
consensus or a decision on an issue.
join node In an activity diagram, a control node that denotes the synchronization of multiple
threads of control into a single thread.
Joint Application Design (JAD) A requirements elicitation technique involving the
collaboration of clients, users, and developers in constructing a requirements specification
through a week-long working meeting.
Key Process Area (KPA) A set of activities that achieve a goal considered important for
attaining a given level of process maturity. Examples of KPA include configuration
management, requirements change management, and risk management.
kick-off meeting A meeting including all project participants that marks the end of the project
initiation phase and the beginning of steady state.
knowledge acquisition The activity of collecting data, organizing it into information, and
formalizing it into knowledge.
KPA See key process area.
layer A subsystem in a hierarchical decomposition. A layer can depend only on lower-level
layers and has no knowledge of the layers above it.
legal requirement Constraint concerned with licensing, regulation, and certification issues.
An example of a legal requirement is that software developed for the U.S. federal government
must comply with Section 508 of the Rehabilitation Act of 1973, which requires that
government information systems be accessible to people with disabilities.
liaison A communication role responsible for the information flow between two teams. For
example, an architecture liaison represents a subsystem team at the architecture team.
life cycle See software life cycle.
link An instance of an association. A link connects two objects.
Liskov Substitution Principle Formal definition for specification inheritance. It essentially
states that, if a client code uses the methods provided by a superclass, then developers should be
able to add new subclasses without having to change the client code.
local king client A client who can answer developer questions and make decisions without
having to ask anybody else. The local king has deep knowledge of the application domain and is
usually collocated with the project.
maintainability The ability to change the system to deal with new technology or to fix
defects.
736 Appendix B • Glossary
maintenance criterion A design goal related to the difficulty of changing or upgrading the
system after it has been delivered.
management role Any role that is concerned with planning, monitoring, and controlling the
project. Examples of management roles include project manager and team leader. See also
project management.
many-to-many association An association with 0..n or 1..n multiplicity on both ends.
mapping A mathematical correspondence that assigns an element (or a set of elements) of one
model to each element of another model.
master directory A library of promotions.
meeting A synchronous mechanism of communication during which participants present,
discuss, negotiate, and resolve issues, either face-to-face or via telephone or videoconferencing.
meeting agenda Document used to prepare and conduct a meeting. A meeting agenda usually
consists of at least three sections: a header identifying the planned meeting location, time, and
participants; a list of items participants will report on; and a list of issues to be discussed and
resolved.
meeting minutes A document used to record the content and decisions of a meeting. Meeting
minutes usually consist of three sections that correspond to the sections of the agenda, as well as
action items and decision items.
message A mechanism by which a sending object requests the execution of an operation in the
receiving object. A message is composed of a name and a number of arguments. The receiving
object matches the name of the message to one or more operations and passes the arguments to
the operation. The message send ends when the results of the operation are returned to the
sending object.
method In the context of development, a repeatable technique for solving a specific problem.
For example, a recipe is a method for cooking a specific dish. In the context of a class or an
object, the implementation of an operation. For example, SetTime(t) is a method of the class
Watch.
blue prints for the ticket distributor, schematics of its electrical wiring, and object models of its
software are models of the ticket distributor.
model object See entity object model/view/controller architectural style.
model transformation A transformation that is applied to an object model and results in
another object model. The purpose of object model transformation is to simplify or optimize the
original model, bringing it closer to a system that complies with all requirements in the
specification.
Model/View/Controller (MVC) architectural style A three-tier architectural style in which
domain knowledge is maintained by model objects, displayed by view objects, and manipulated
by control objects. In this book, model objects are called entity objects and view objects are
called boundary objects.
modeling An activity during which participants construct an abstraction of a system by
focusing on interesting aspects and omitting irrelevant details. What is interesting or irrelevant
depends on the task in which the model is used. See also abstraction.
modifiability The quality of a system describing how easily existing models can be modified.
multiplicity A set of integers attached to an association end indicating the number of links that
can legitimately originate from an instance of the class at the association end. For example, an
association denoting that a Car has four Wheels has a multiplicity of 1 on the Car end and 4 on
the Wheel end.
MVC See Model/View/Controller.
name In a class, a mandatory string identifying the class within a subsystem. The class name
is unique within the subsystem. In an association, an optional string describing the association
between two classes. In an attribute, a mandatory string identifying the attribute within the class.
The attribute name is unique within the class.
navigation Direction in which an association can be followed.
nested state A state within a nested state machine.
nested state machine A state machine that models the behavior of a single state as a set of
nested states, internal transitions, and actions.
NFR Framework A method for tracking the relevant nonfunctional requirements for each
decision, evaluated alternative, and interaction between nonfunctional requirements.
nonfunctional requirement A user-visible constraint on the system. Nonfunctional
requirements describe user-visible aspects of the system that are not directly related with the
functionality of the system. See also design goal.
notation A graphical or textual set of rules for representing a model. For example, the Roman
alphabet is a notation for representing words; UML is a graphical notation for representing
system models.
738 Appendix B • Glossary
performance Any quantifiable attribute of the system, such as response time, throughput,
availability, and accuracy.
performance criterion A design goal related to the speed or space attributes of a system.
Examples of performance criteria include response time, throughput, and memory space.
performance testing A system testing activity during which developers find differences
between nonfunctional requirements and system performance.
persistent data Data that outlive a single execution of the system.
PERT chart A notation representing a schedule as an acyclic graph of tasks.
phase Often used as a synonym for activity or process.
phenomenon An object of a reality as perceived by the modeler. Modeling consists of
selecting the phenomena of a reality that are of interest, identifying their common properties,
and abstracting them into concepts. Contrast with concept.
pilot testing A testing activity during which a selected set of users exercises the system in the
deployment environment.
pipe and filter architectural style An architectural style in which subsystems sequentially
process data from a set of inputs and send their results to other subsystems via a set of outputs.
Associations between subsystems are called pipes. Subsystems are called filters. Filters do not
depend on each other and can thus be rearranged in different orders and configurations.
portability The ease with which a system or component can be transferred from one hardware
or software environment to another.
postmortem review A scheduled communication event during which participants capture the
lessons learned during the project.
postcondition A predicate that must be true after an operation is invoked.
precondition A predicate that must be true before an operation is invoked.
primary facilitator See facilitator.
primary key In a database management system, a set of attributes whose values uniquely
identify the data records in a table.
problem definition A scheduled communication event during which the client and manager
define the scope of the system.
problem domain See application domain.
problem inspection A scheduled communication event during which developers gather
information from the problem statement, the client, and the user about their needs and the
application domain.
problem presentation A scheduled communication event during which the client and the
manager communicate the high-level requirements of the system to the project participants.
Appendix B • Glossary 741
problem solving A search activity that includes the generation and evaluation of alternatives
addressing a given problem, often by trial and error.
problem statement A document cooperatively written by the client and project management
that briefly describes the scope of the system, including high-level requirements, target
environment, deliverables, and acceptance criteria. See also Project Agreement.
procedural language A programming language in which the developer specifies an explicit
sequence of steps to produce a result. Also known as an imperative language.
procedure-driven control A control flow paradigm in which operations wait for input. The
sequencing of operations is otherwise done explicitly through sending messages.
process A set of activities that is performed toward a specific purpose. Examples of processes
include requirements elicitation, analysis, project management, and testing. A process is
synonymous with a high-level activity. See also activity.
process group A group of related processes. Examples of process groups include
management, pre-development, development, and post-development.
process management In configuration management, a set of policies dictating how versions
should be created and documented, including policies for notifying developers when new
versions are created or when a build fails.
project agreement A document that formally defines the scope, duration, cost, and
deliverables of a project. Requirements are often categorized into core requirements (which the
system must meet when delivered), desirable requirements (which must be satisfied eventually),
and optional requirements (which may or may not be required in the future). The Project
Agreement subsumes the Problem Statement.
project-based organization A corporate organization in which work is divided according to
projects; that is each participant works on exactly one project at any one time.
project conception phase The first phase of a project during which the idea for the project is
born. In a software project this is usually a new requirement triggered by the need of an existing
market or a new technology.
project definition phase The phase of a project, during which a possible client, the project
manager, and the software architect are involved in agreeing on an initial problem statement,
schedule, and software architecture.
project initiation In IEEE 1074, a project management activity during which the project
scope and resources are defined. In this book, project initiation is called project start phase.
project management An activity during which managers plan, budget, monitor, and control
the development process. Project management ensures that constraints and project goals are met.
project member See participant.
742 Appendix B • Glossary
project review A scheduled communication event during which a project manager monitors
the status of a project.
project start phase A project phase that occurs after the client and the project manager
commit to the project. During the start phase, the project manager sets up the project
infrastructure, hires participants, organizes them in teams, defines the major milestones, and
kicks off the project.
project steady state A management activity during which management monitors and controls
the progress of the project.
project termination A management activity during which the project is concluded: the
system is delivered and accepted by the client.
project velocity In Extreme Programming, a factor indicating how many ideal weeks can be
accomplished during a fixed amount of time.
promotion A version that has been made available internally to other developers in the
project. See also release.
proposal A possible resolution of an issue.
prototyping A process of designing and realizing a simplified version of the system for
evaluation with the user or the manager. For example, a usability prototype evaluates the
usability of different interfaces. A performance prototype assesses the performance of different
alternatives.
proxy client A participant who stands in for the real client. Proxy clients have sufficient
knowledge of the application domain to answer clarification questions from the developers, but
do not have sufficient power to make major decisions.
pseudo client A member of the development organization who acts as a client because the
system is targeted at a new market segment, as opposed to a single individual or company.
Pseudo clients can make decisions within a short time and can collaborate well with the
development organization, but have a limited knowledge of the application domain.
pseudo requirement A nonfunctional requirement that can be in the implementation,
interface, operation, packaging, or legal domains.
QOC See Questions, Options, and Criteria.
qualification A technique for reducing the multiplicity of associations by replacing many-to-
many or one-to-many associations with qualified associations.
qualified association An association in which one end is indexed by an attribute. For
example, the association between Directory and File is a qualified association indexed by a
filename on the Directory end.
qualifier Attribute used to index the qualified end of a qualified association.
Appendix B • Glossary 743
repository In a repository architectural style, the central subsystem that manages persistent
data. In configuration management, a library of releases.
repository architectural style An architectural style in which persistent data is managed and
stored by a single subsystem. Peripheral subsystems are relatively independent and interact only
through the central subsystem.
request for change See change request.
request for clarification An unscheduled communication event during which a participant
requests more information.
requirement A function that the system must have (a functional requirement) or a user-visible
constraint on the system (nonfunctional requirement).
Requirements Analysis Document (RAD) The document describing the analysis model.
requirements elicitation An activity during which project participants define the purpose of
the system. Requirements elicitation produces the functional model.
requirements engineering An activity that includes requirements elicitation and analysis.
requirements specification A complete and precise description of the system from the user’s
point of view. A requirements specification, unlike the analysis model, is understandable to the
user. In object-oriented software engineering, the requirements specification includes use cases
and scenarios.
requirements testing See functional testing.
response time An attribute of the system denoting how quickly it can react to a user input.
resolution The proposal selected by participants to close an issue.
resources Assets that are used to accomplish work, including time, equipment, and labor.
reverse engineering The process of applying a transformation to a set of source code
elements, resulting in a set of model elements. The purpose of reverse engineering is to recreate
the model for an existing system, either because the model was lost, never created, or because it
became out of sync with the source code. Contrast with forward engineering.
reviewer A role of people validating work products for quality criteria such as completeness,
correctness, consistency, and clarity.
risk An area of uncertainty that can lead to a deviation in the project plan (e.g., late delivery,
requirements not met, cost above budget), including the failure of the project.
risk-based development A software life cycle driven by the identification and resolution of
risks. See also Spiral model.
risk management A management method for identifying and addressing areas of uncertainty
before they negatively affect the schedule of the project or the quality of the system.
Appendix B • Glossary 745
robustness The degree to which a system or component can function correctly in the presence
of invalid inputs or stressful environment conditions.
role In the context of an organization, a set of responsibilities in the project assigned to a
person or a team. A person can fill one or more roles. Examples of roles include analyst, system
architect, tester, developer, manager, reviewer. In the context of an association end, a string
indicating the role of the class at the association end with respect to the association.
round-trip engineering A model maintenance activity that combines forward and reverse
engineering. Changes to the implementation model are propagated to the analysis and design
models through reverse engineering. Changes to the analysis and design models are propagated
to the implementation model through forward engineering.
Royce’s methodology An iterative risk-driven methodology proposed by Royce based on the
Unified Process life cycle.
safety A measure of the absence of catastrophic consequences to the environment.
same time, different place groupware See groupware
sandwich testing An integration testing strategy that combines top-down and bottom-up
testing.
schedule A map of a task model on a time line. A schedule represents work in terms of
calendar time.
schema In a database management system, a meta-model for the data.
scenario Instance of a use case. A scenario represents a concrete sequence of interactions
between one or more actors and the system.
SCMP See Software Configuration Management Plan.
SDD See System Design Document.
secondary facilitator See facilitator.
security Property of a system indicating its ability to protect the resources against
unauthorized use, whether malicious or accidental.
sequence diagram UML notation representing the behavior of the system as a series of
interactions among a group of objects. Each object is depicted as a column in the diagram. Each
interaction is depicted as an arrow between two columns. Sequence diagrams are used during
analysis to identify missing objects, attributes, or relationships. Sequence diagrams are used
during object design to refine the specification of classes. See also communication diagram.
service A set of related operations offered by a subsystem.
shared aggregation An aggregation relationship in which the whole and the part can exist
independently. Contrast with composition aggregation.
746 Appendix B • Glossary
signature Given an operation, the tuple made up of the types of its parameters and the type of
the return value. Operation signatures are specified during object design.
slack time For a task, the maximum amount of time a task can be delayed without affecting
the overall project schedule.
software architecture See system design model.
Software Configuration Management Plan (SCMP) A document defining the procedures
and conventions associated with the configuration management of a project. These include
identifying configuration items, accounting for their status, approving change requests, and
auditing.
software library A store of versions with facilities to track the status of changes.
software life cycle All activities and work products necessary for the development of a
software system.
software life cycle model An abstraction representing the development of software for the
purpose of understanding, monitoring, or controlling it. Examples of software life cycle models
include the waterfall model, the V-model, Boehm’s spiral model, the Unified Process, and the
issue-based life cycle model.
Software Project Management Plan (SPMP) The controlling document of a software
project. The SPMP defines the activities, work products, milestones, and resources allocated to
the project. Also defined in the SPMP are the management procedures and conventions
applicable to the project such as status reporting, risk management, and contingency
management.
software reliability The property of a software system indicating the probability that the
software will not cause a failure of the system for a specified duration.
solution domain The space of all possible systems. The solution domain is the focus of the
system design, object design, and implementation activities. Contrast with application domain.
solution domain specialist A consultant role responsible for providing knowledge about
solutions to implement the system. This can include the development method, the process,
implementation technology, or the development environment.
solution object An object in the system design or object design model that represents a
solution domain concept. Also called design object.
specialization A modeling activity that results in identifying more specific concepts from a
high-level one.
specification inheritance Inheritance used as a means of subtyping.
spiral model An iterative and incremental software life cycle model centered around risk
management.
SPMP See Software Project Management Plan.
Appendix B • Glossary 747
state machine diagram UML notation representing the behavior of an individual object as a
number of states and transitions between these states. A state represents a particular set of values
for an object. Given a state, a transition represents a future state the object can move to and the
conditions associated with the change of state. State machine diagrams are used during analysis
to describe objects with state-dependent behavior.
static access control An access control policy that can be set only at compile time. Contrast
with dynamic access control.
status meeting A scheduled communication event during which team leaders monitor the
status of their team.
stimulus A message sent to an object or to the system by an actor or another object; it usually
results in the invocation of an operation. Examples of stimuli include clicking on a user interface
button, selecting a menu item, typing a command, or sending a network packet.
strict inheritance An inheritance relationship that complies with the Liskov Substitution
Principle.
structural testing A testing activity that finds differences between the system and the system
design model.
subsystem In general, a smaller, simpler part of a larger system; in system design, a well-
defined software component that provides a number of services to other subsystems. Examples
of subsystems include storage subsystems (managing persistent data), user interface subsystems
(managing the interaction with the user), networking subsystems (managing the communication
with other subsystems over a network).
748 Appendix B • Glossary
subsystem decomposition The division of the system into subsystems. Each subsystem is
described in terms of its services during system design and its API during object design.
Subsystem decomposition is part of the system design model.
subsystem interface The set of operations of a subsystem that is publicly available to other
subsystems.
subsystem team A team responsible for developing a subsystem. Contrast with cross-
functional team.
superclass The general class in a generalization relationship. See also generalization.
supportability The ease of changing the system after deployment.
swimlane A UML grouping concept denoting activities that are carried out by the same object
or set of objects.
synchronicity See communication mechanism, groupware.
system An organized set of communicating parts designed for a specific purpose. For
example, a car, composed of four wheels, a chassis, a body, and an engine, is designed to
transport people. A watch, composed of a battery, a circuit, wheels, and hands, is designed to
measure time.
system architect See architect.
system design An activity during which developers define the system design model, including
the design goals of the project, and decompose the system into smaller subsystems that can be
realized by individual teams. System design also leads to the selection of the hardware/software
platform, persistent data management strategy, global control flow, access control policy, and
boundary condition strategies.
System Design Document (SDD) A document describing the system design model.
system design model A high-level description of the system, including design goals,
subsystem decomposition, hardware/software platform, persistent storage strategy, global
control flow, access control policy, and boundary condition strategies. The system design model
represents the strategic decisions made by the architecture team that allow subsystem teams to
work concurrently and cooperate effectively.
system model The set of all models built during development to reason about the system. The
system model includes the analysis model, the system design model, the object design model,
and the source code.
system testing A testing activity during which developers test all the subsystems as a single
system. System testing includes functional testing, performance testing, acceptance testing, and
installation testing.
task An atomic unit of work that can be managed. Tasks consume resources and produce one
or more work products.
Appendix B • Glossary 749
task model A model of work for a project represented as tasks and their interdependencies.
team A set of participants who work on a common problem in a project.
team-based organization An organization in which project participants are assigned to teams
that are responsible for specific subsystems or project functions. Participants in a team-based
organization are allocated full-time to the project.
team leader A management role responsible for planning, monitoring, and controlling a
single team.
technical consultant A consultant role that provides solution domain expertise to the project.
technical writer See document editor.
test case A set of inputs and expected results that exercises a component with the purpose of
causing failures.
test driver A partial implementation of a component that exercises the tested component. Test
drivers are used during unit and integration testing.
Test Manual A document describing the test cases used to test the system, along with their
results.
test planning An activity that allocates resources for tests and schedules testing activities.
test stub A partial implementation of a component on which the tested component depends.
Test stubs are used to isolate components during unit and integration testing and allow
components to be tested even when their dependent components have not yet been implemented.
tester A role concerned with the planning, design, execution, and analysis of tests.
testing An activity during which developers find differences between the system and its
models by executing the system (or parts of it) with sample input data sets. Testing includes unit
testing, integration testing, system testing, and usability testing.
thread A control flow paradigm in which the system creates an arbitrary number of threads to
handle an arbitrary number of input channels.
three-tier architectural style An architectural style that organizes the system into an
interface layer, an application logic layer, and a storage layer.
throughput An attribute of the system denoting how much work it can accomplish within a
specified amount of time.
timekeeper A meeting role responsible for tracking time so that the primary facilitator can
accelerate the resolution of an issue (or table it) if necessary.
top-down testing An integration testing strategy in which components are incrementally
integrated together starting with the highest level components. Top down testing does not require
any test drivers. Contrast with bottom-up testing, sandwich testing.
750 Appendix B • Glossary
top-level design Initial subsystem decomposition used for team organization and initial
planning.
traceability The property of a model describing whether a model element can be traced to the
original requirement or rationale that motivated its existence.
training scenario Tutorial scenario used for introducing new users to the system. These are
step-by-step instructions designed to hand-hold the user through common tasks.
transformation A mapping from one model to another that aims at improving one aspect of
the transformed model (e.g., its modularity) while preserving all of its other properties (e.g., its
functionality). A transformation is usually localized, affects a small number of classes,
attributes, and operations, and is executed in a series of small steps.
transition A possible change of state associated triggered by events, conditions, or time.
tuple An ordered set of values. Common uses for the tuple are representing a set of value
attributes in a relational database and representing an access right.
type In an attribute or a variable: describes the legal values the attribute or variable can take.
UML state machine See state machine diagram.
unambiguous requirement See ambiguity.
Unified Modeling Language (UML) A standard set of notations for representing models.
Unified Process See Unified Software Development Process.
Unified Software Development Process An iterative software life cycle model characterized
by cycles of four phases, called Inception, Elaboration, Construction, and Transition.
unit testing Testing individual components.
usability Ease with which a user can learn to operate, prepare inputs for, and interpret outputs
of a system or component.
usability testing The validation of a system or a model through the use of prototypes and
simulations by a user.
use case A general sequence of interactions between one or more actors and the system. See
also scenario.
use case diagram UML notation used during requirements elicitation and analysis to
represent the functionality of the system. A use case describes a function of the system in terms
of a sequence of interactions between an actor and the system. A use case also includes entry
conditions that must be true before executing the use case and the exit conditions that are true at
the completion of the use case.
user See end user.
User Manual A document describing the user interface of the system such that a user
unfamiliar with the system can use it.
Appendix B • Glossary 751
V-model A variation of the waterfall model that makes explicit the dependencies between
development processes and verification processes.
validation An activity that ensures that the system addresses the client’s needs.
variant Versions that are intended to coexist. For example, if a system can be executed on
different platforms, the system has a variant for each platform (e.g., a Windows variant, a
Macintosh variant, a Linux variant).
verifiability The property of a model indicating whether or not it can be falsified.
verification A set of formal methods that attempt to detect faults without executing the
system.
version A state of a configuration item or a CM aggregate at a well-defined point in time. The
version of a CM aggregate is called a configuration.
version identifier A number or a name that uniquely identifies a version.
vertical prototype A prototype that completely implements a restricted functionality, for
example, all the interface, control, and entity objects for one use case.
view In modeling, a subset of a model. Views focus on selected model elements to make them
more understandable. In the Model/View/Controller architectural style, a type of object or
subsystem responsible for displaying to the user information from model objects or subsystems.
visibility See attribute visibility.
visionary scenario Scenario that describes a future system. Visionary scenarios are used both
as a point in the modeling space by developers as they refine their ideas of the future system and
as a communication medium to elicit requirements from users.
walkthrough A scheduled communication event during which a developer presents a work
product line by line and other developers ask questions and challenge the work product. See also
inspection.
waterfall model A software life cycle model in which all development processes occur
sequentially.
WBS See work breakdown structure.
whitebox framework A framework that relies on inheritance and dynamic binding for
extensibility. Contrast with blackbox framework.
whitebox test A test that focuses on the internal structure of a component. Contrast with
blackbox test.
Work Breakdown Structure (WBS) A hierarchical decomposition of project work into
tasks. Leaves represent tasks that are assigned to participants. Aggregates represent the work
associated with a work product.
work package A specification of work to be accomplished in completing a task or activity.
752 Appendix B • Glossary
work product An artifact produced during development. Examples of work products include
the Requirements Analysis Document, the System Design Document, user interface prototypes,
market surveys, as well as the delivered system.
workflow In the Unified Process, a thread of cohesive and mostly sequential activities that
produce the artifacts. Engineering workflows (Requirements, Design, Implementation,
Assessment, Deployment) focus on development activities. Supporting workflows (Management,
Configuration and Change, Environment) focus on overhead activities needed to coordinate the
development activities.
workspace In configuration management, a library of promotions.
XP See Extreme Programming.
A P P E N D I X C
Bibliography
753
754 Appendix C • Bibliography
[Beck & Cunningham, 1989] K. Beck & W. Cunningham, “A laboratory for teaching object-oriented
thinking,” OOPSLA’89 Conference Proceedings, New Orleans, LA, October
1–6, 1989.
[Berliner, 1990] B. Berliner, “CVS II: Parallelizing software development,” Proceedings of the
1990 USENIX Conference, Washington, DC, pp. 22–26, January 1990.
[Bersoff et al., 1980] E. H. Bersoff, V. D. Henderson, & S. G. Siegel, Software Configuration
Management: An Investment in Product Integrity, Prentice Hall, Englewood
Cliffs, NJ, 1980.
[Bezier, 1990] B. Bezier, Software Testing Techniques, 2nd ed., Van Nostrand, New York,
1990.
[Binder, 2000] R. V. Binder, Testing Object-Oriented Systems: Models, Patterns, and Tools,
Addison-Wesley, Reading, MA, 2000.
[Birrer, 1993] E. T. Birrer, “Frameworks in the financial engineering domain: An experience
report,” ECOOP’93 Proceedings, Lecture Notes in Computer Science, No.
707, 1993.
[Blaha & Premerlani, 1998] M. Blaha & W. Premerlani, Object-Oriented Modeling and Design for
Database Applications, Prentice Hall, Upper Saddle River, NJ, 1998.
[Boehm, 1987] B. Boehm, “A spiral model of software development and enhancement,”
Software Engineering Project Management, pp. 128–142, 1987.
[Boehm, 1991] B. Boehm, “Software risk management: Principles and practices,” IEEE
Software, Vol. 1, pp. 32–41, 1991.
[Boehm et al., 1998] B. Boehm, A. Egyed, J. Kwan, D. Port, A. Shah, & R. Madachy, “Using the
WinWin spiral model: A case study,” IEEE Computer 31(7): 33–44, 1998.
[Boehm et al., 2000] B. Boehm, E. Horowitz, R. Madachy, D. Reifer, B. K. Clark, B. Steece, A. W.
Brown, S. Chulani, C. Abts, Software Cost Estimation with COCOMO II,
Prentice Hall, Upper Saddle River, NJ, 2000.
[Bonatti, 2001] W. Bonatti, The Mountains of My Life, Modern Library, Random House, New
York, 2001.
[Booch, 1994] G. Booch, Object-Oriented Analysis and Design with Applications, 2nd ed.,
Benjamin/Cummings, Redwood City, CA, 1994.
[Booch et al., 2005] G. Booch, J. Rumbaugh, & I. Jacobson, The Unified Modeling Language
User Guide, Addison-Wesley, Reading, MA, 2005.
[Borghoff & Schlichter, 2000] U. W. Borghoff & J. Schlichter, Computer Supported Cooperative Work: An
Introduction into Distributed Applications, Springer-Verlag, 2000.
[Borning, 1981] A. Borning. “The programming language aspects of ThingLab, a constraint-
oriented simulation laboratory,” in ACM TOPLAS 3(4), October 1981.
[Brooks, 1995] F. P. Brooks, The Mythical Man Month: Anniversary Edition: Essays on
Software Engineering, Addison-Wesley, Reading, MA, 1995.
[Brown et al., 1999] W. J. Brown, H. W. McCormick, & S. W. Thomas, AntiPatterns and Patterns
in Software Configuration Management, Wiley, New York, 1999.
[Bruegge, 1992] B. Bruegge, “Teaching an industry-oriented software engineering course,”
Software Enginering Education, SEI Conference, Lecture Notes in Computer
Sciences, Vol. 640, Springer-Verlag, San Diego, CA, pp. 65–87, October
1992.
[Bruegge, 1994] B. Bruegge, “From toy systems to real system development,” Improvements in
Software Engineering Education, Workshop of the German Chapter of the
ACM, B.G. Teubner Verlag, Stuttgart, pp. 62–72, February 1994.
Appendix C • Bibliography 755
[Bruegge & Coyne, 1993] B. Bruegge & R. Coyne, “Model-based software engineering in larger scale
project courses,” IFIP Transactions on Computer Science and Technology,
Vol. A-40, pp. 273–287, 1993.
[Bruegge & Coyne, 1994] B. Bruegge & R. Coyne, “Teaching iterative object-oriented development:
Lessons and directions,” in Jorge L. Diaz-Herrera (ed.), 7th Conference on
Software Engineering Education, Lecture Notes in Computer Science,
Vol. 750, Springer-Verlag, pp. 413–427, January 1994.
[Bruegge et al., 1992] B. Bruegge, J. Blythe, J. Jackson, & J. Shufelt, “Object-oriented system
modeling with OMT,” Conference Proceedings OOPSLA ’92 (Object-
Oriented Programming Systems, Languages, and Applications), pp. 359–376,
October 1992.
[Bruegge et al., 1993] B. Bruegge, T. Gottschalk, & B. Luo, “A framework for dynamic program
analyzers,” OOPSLA’ 93 (Object-Oriented Programming Systems,
Languages, and Applications), Washington, DC, pp. 65–82, September 1993.
[Bruegge et al., 1994] B. Bruegge, K. O’Toole, & D. Rothenberger, “Design considerations for an
accident management system,” in M. Brodie, M. Jarke, & M. Papazoglou
(ed.), Proceedings of the Second International Conference on Cooperative
Information Systems, University of Toronto Press, Toronto, pp. 90–100, May
1994.
[BSCW] Basic Support for Cooperative Work, http://bscw.gmd.de.
[Buckingham Shum & Hammond, 1994] S. Buckingham Shum & N. Hammond, “Argumentation-based design
rationale: What use at what cost?” International Journal of Human-Computer
Studies, Vol. 40, pp. 603–652, 1994.
[Buhl, 1956] H. Buhl, Nanga Parbat Pilgrimage, Hodder & Stoughton, London, 1956.
[Buschmann et al., 1996] F. Buschmann, R. Meunier, H. Rohnert, P. Sommerlad, & M. Stal,
Pattern-Oriented Software Architecture: A System of Patterns, Wiley,
Chichester, U.K., 1996.
[Campbell & Islam, 1993] R. H. Campbell & N. Islam, “A technique for documenting the framework of
an object-oriented system,” Computing Systems, 6, pp. 363–389, 1993.
[Carr et al., 1993] M. J. Carr, S. L. Konda, I. Monarch, F. C. Ulrich, & C. F. Walker, Taxonomy-
Based Risk Identification, Technical Report CMU/SEI-93-TR-6, Software
Engineering Institute, Carnegie Mellon University, Pittsburgh, PA, 1993.
[Carroll, 1995] J. M. Carroll (ed.), Scenario-Based Design: Envisioning Work and
Technology in System Development, Wiley, New York, 1995.
[Charette, 1989] R. N. Charette, Software Engineering Risk Analysis and Management,
McGraw-Hill, New York, 1989.
[Chung et al., 1999] L. Chung, B. A. Nixon, E. Yu & J. Mylopoulos, Non-Functional
Requirements in Software Engineering, Kluwer Academic, Boston, 1999.
[Clements et al., 2002] P. Clements, R. Kazam, & M. Klein. Evaluating Software Architectures:
Methods and Case Studies, SEI Series in Software Engineering, Addison-
Wesley, Reading, MA, 2002.
[Coad et al., 1995] P. Coad, D. North, & M. Mayfield, Object Models: Strategies, Patterns, &
Applications, Prentice Hall, Englewood Cliffs, NJ, 1995.
[Cockburn, 2001a] A. Cockburn, Writing Effective Use Cases, Addison-Wesley, Reading, MA,
2001.
[Cockburn, 2001b] A. Cockburn, Agile Software Development, Addison-Wesley, Reading, MA,
2001.
756 Appendix C • Bibliography
[Cohn, 2006] M. Cohn, Agile Estimating and Planning, Pearson, Upper Saddle River, NJ,
2006.
[Conklin & Burgess-Yakemovic, 1991] J. Conklin & K. C. Burgess-Yakemovic, “A process-oriented approach to
design rationale,” Human-Computer Interaction, Vol. 6, pp. 357–391, 1991.
[Conradi & Westfechtel, 1998] R. Conradi & B. Westfechtel, “Version models for software configuration
management,” ACM Computing Surveys, Vol. 30, No. 2, June 1998.
[Constantine & Lockwood, 1999] L. L. Constantine & L. A. D. Lockwood, Software for Use, Addison-Wesley,
Reading, MA, 1999.
[Constantine & Lockwood, 2001] L. L. Constantine & L. A. D. Lockwood, “Structure and style in use cases for
user interface design,” in M. van Harmelen (ed.), Object-Oriented User
Interface Design, 2001.
[Contract4J] http://www.contract4j.org/
[Coyne et al., 1995] R. Coyne, B. Bruegge, A. Dutoit, & D. Rothenberger, “Teaching more
comprehensive model-based software engineering: Experience with
Objectory’s use case approach,” in Linda Ibraham (ed), 8th Conference on
Software Engineering Education, Lecture Notes in Computer Science,
Springer-Verlag, Berlin, pp. 339–374, April 1995.
[CruiseControl] http://cruisecontrol.sourceforge.net/.
[Curtis et al., 1988] B. Curtis, H. Krasner, & N. Iscoe, “A field study of the software design
process for large systems,” Communications of the ACM, 31(11), pp. 1268–
87, 1988.
[Cusumano & Selby, 1997] M. A. Cusumano, R. W. Selby, “How Microsoft Builds Software,”
Communications of the ACM, Vol. 40, No. 6, pp. 53–61, 1997.
[Dart, 1991] S. Dart, “Concepts in configuration management systems,” Third
International Software Configuration Management Workshop, ACM, June
1991.
[Date, 2004] C. J. Date, An Introduction to Database Systems, 8th ed., Addison-Wesley,
Reading, MA, 2004.
[Day & Zimmermann, 1983] J. D. Day & H. Zimmermann, “The OSI Reference Model,” Proceedings of
the IEEE, Vol. 71, pp. 1334–1340, December 1983.
[De Marco, 1978] T. De Marco, Structured Analysis and System Specification, Yourdon, New
York, 1978.
[Dijkstra, 1968] E. W. Dijkstra, “The Structure of the ‘T.H.E’ Multiprogramming System,”
Communication of the ACM, 18(8), pp. 453–457, 1968.
[Dijkstra, 1976] E. W. Dijkstra, A Discipline of Programming, Prentice-Hall, Englewood
Cliffs, NJ, 1976.
[DoD-STD-2167A] DoD-STD-2167A, Military Standard, Defense Systems Software
Development, US Department of Defense, Washington, DC, 1988.
[Douglass, 1999] B.P. Douglass, Doing Hard Time: Using Object Oriented Programming and
Software Patterns in Real Time Applications, Addison-Wesley, Reading, MA,
1999.
[Doyle & Straus, 1982] M. Doyle, & D. Straus, How to make meetings work, The Berkeley Publishing
Group, New York, NY, 1982.
[D’Souza & Wills, 1999] D. F. D’Souza & A. C. Wills, Objects, Components, and Frameworks with
UML: The Catalysis Approach, The Addison-Wesley Object Technology
Series, Addison-Wesley, Reading, MA, 1999.
[Dumas & Redish, 1998] Dumas & Redish, A Practical Guide to Usability Testing, Ablex, NJ, 1993.
Appendix C • Bibliography 757
[Dutoit & Bruegge, 1998] A. H. Dutoit & B. Bruegge, “Communication metrics for software
development,” IEEE Transactions on Software Engineering, August 1998.
[Dutoit & Paech, 2001] A. H. Dutoit & B. Paech. “Rationale management in software engineering,” in
S.K. Chang (ed.), Handbook of Software Engineering and Knowledge
Engineering, Vol. 1, World Scientific Publishing, 2001.
[Dutoit & Paech, 2002] A. H. Dutoit & B. Paech. “Rationale-based use case specification,”
Requirements Engineering Journal, 7(1), pp. 3–19, 2002.
[Dutoit et al., 1996] A. H. Dutoit, B. Bruegge, & R. F. Coyne, “The use of an issue-based model in
a team-based software engineering course,” Conference Proceedings of
Software Engineering: Education and Practice (SEEP’96), Dunedin, NZ,
January 1996.
[Dutoit et al., 2006] A. H. Dutoit, R. McCall, I. Mistrik, B. Paech (eds.) Rationale Management in
Software Engineering, Springer-Verlag, Heidelberg.
[Duval et al., 2007] P. Duval, S. Matyas, & A. Glover, Continuous Integration: Improving
Software Quality and Reducing Risk, Addison-Wesley, Reading, MA, 2007.
[Elssamadisy, 2009] A. Elssamadisy, Agile Adoption Patterns, Addison-Wesley, Reading, MA,
2009.
[Erl, 2005] T. Erl, Service-Oriented Architectures:Concepts, Technology, and Design,
Prentice Hall, Upper Saddle River, NJ, 2005.
[Erman et al., 1980] L. D. Erman, F. Hayes-Roth, et al., “The Hearsay-II Speech-Understanding
System: Integrating knowledge to resolve uncertainty,” ACM Computing
Surveys, Vol. 12, No. 2, pp. 213–253, 1980.
[Fagan, 1976] M. E. Fagan, “Design and code inspections to reduce errors in program
development,” IBM System Journal, Vol. 15, No. 3, pp. 182–211, 1976.
[Fayad & Hamu, 1997] M. E. Fayad & D. S. Hamu, “Object-oriented enterprise frameworks: Make
vs. buy decisions and guidelines for selection,” The Communications of ACM,
1997.
[Feiler & Tichy, 1998] P. Feiler & W. Tichy, “Propagator: A family of patterns,” in Proceedings of
TOOLS-23’97, Santa Barbara, CA, July 28–August 1 1997.
[Feynman, 1988] R. P. Feynman, “Personal observations on the reliability of the Shuttle,” in
[Rogers et al., 1986]. This article is also available on the Web, e.g.,http://
www.virtualschool.edu/mon/SocialConstruction/
FeynmanChallengerRpt.html.
[Fisher et al., 1991] R. Fisher, W. Ury, & B. Patton, Getting to Yes: Negotiating Agreement
Without Giving In, 2nd ed., Penguin Books, 1991.
[Floyd, 1967] R. W. Floyd, “Assigning Meanings to Programs,” in Proceedings of the
American Mathematics Society Symposium in Applied Mathematics, Vol. 19,
pp. 19–31, 1967.
[Fowler, 1997] M. Fowler, Analysis Patterns: Reusable Object Models, Addison-Wesley,
Reading, MA, 1997.
[Fowler, 2000] M. Fowler. Refactoring: Improving The Design of Existing Code, Addison-
Wesley, Reading, MA, 2000.
[Fowler, 2003] M. Fowler & K. Scott, UML Distilled: A Brief Guide To The Standard Object
Modeling Language, 3rd ed., Addison-Wesley, Reading, MA, 2003.
[Fowler, 2005] M. Fowler, The new methodology,
http://www.martinfowler.com/articles/newMethodology.html. Revised 2005.
758 Appendix C • Bibliography
[Javadoc, 2009b] Sun Microsystems, “How to write doc comments for Javadoc,” http://
java.sun.com/j2se/writingdoccomments/.
[jContractor] http://jcontractor.sourceforge.net/
[JDBC, 2009] JDBCTM—Connecting Java and Databases, JDK Documentation, Javasoft,
2009.
[Jensen & Tonies, 1979] R. W. Jensen & C. C. Tonies, Software Engineering, Prentice Hall,
Englewood Cliffs, NJ, 1979.
[JFC, 2009] Java Foundation Classes, JDK Documentation, Javasoft, 2009.
[Johnson, 1992] P. Johnson, Human Computer Interaction: Psychology, Task Analysis and
Software Engineering, McGraw-Hill International, London, 1992.
[Johnson & Foote, 1988] R. Johnson & B. Foote, “Designing reusable classes,” Journal of
Object-Oriented Programming, Vol. 1, No. 5, pp. 22–35, 1988.
[Jones, 1977] T. C. Jones, “Programmer quality and programmer productivity,” IBM
Technical Report TR–02.764, 1977.
[JUnit, 2009] JUnit, http://www.junit.org/.
[Katzenbach & Smith, 1994] J. R. Katzenbach & D. K. Smith, The Wisdom of Teams: Creating The High-
Performance Organization, Harper Business, 1994.
[Kayser, 1990] T. A. Kayser, Mining Group Gold, Serif, El Segundo, CA, 1990.
[Kelly, 1984] J. F. Kelly, “An iterative design methodology for user-friendly natural
language office information applications,” ACM Transactions on Information
Systems, Vol. 2, No. 1, January 1984.
[Kemerer, 1997] C. F. Kemerer, Software Project Management: Readings and Cases,
Irwin/McGraw-Hill, Boston, MA 1997.
[Knuth, 1986] D. E. Knuth, The TeXbook, Addison-Wesley, Reading, MA, 1986.
[Kotonya & Sommerville, 1996] G. Kotonya & I. Sommerville, “Requirements Engineering with Viewpoints,”
Software Engineering Journal 11(1), 1996.
[Kramer, 1998] R. Kramer, “iContract—The Java Design by Contract Tool,” Technology of
Object-Oriented Languages and Systems, IEEE Computer Society Press,
1998, p.295.
[Kraut & Streeter, 1995] R. E. Kraut, & L. A. Streeter, “Coordination in software development,”
Communications of the ACM, Vol. 38, No. 3, March 1995.
[Kruchten, 1998] P. Kruchten, The Rational Unified Process: An Introduction, Reading, MA,
Addison-Wesley 1998.
[Kunz & Rittel, 1970] W. Kunz & H. Rittel, “Issues as elements of information systems,” Working
Paper No. 131, Institut für Grundlagen der Plannung, Universität Stuttgart,
Germany, 1970.
[Larman, 2005] C. Larman, Applying UML and Patterns: An Introduction to Object-Oriented
Analysis and Design, 3rd ed., Prentice Hall, Upper Saddle River, NJ, 2005.
[Leblang, 1994] D. Leblang, “The CM challenge: Configuration management that works,” in
W. F. Tichy (ed.), Configuration Management, Vol. 2, Trends in Software,
Wiley, New York, 1994.
[Lee, 1990] J. Lee, “A qualitative decision management system,” in P. H. Winston &
S. Shellard (eds.), Artificial Intelligence at MIT: Expanding Frontiers, MIT
Press, Cambridge, MA, Vol. 1, pp. 104–33, 1990.
[Lee, 1997] J. Lee, “Design rationale systems: Understanding the issues,” IEEE Expert,
May/June 1997.
Appendix C • Bibliography 761
[OMG, 2005] Object Management Group UML Testing Profile Version 1.0. 05-07-07.
http://www.omg.org/ 2005.
[OMG, 2006] Object Management Group, Object Constraint Language OMG Available
Specification Version 2.0. http://www.omg.org 2006.
[OMG, 2008] Object Management Group, Common Object Request Broker Architecture
(CORBA) Specification: Version 3.1. http://www.omg.org/ 2008.
[OMG, 2009] Object Management Group, OMG Unified Modeling Language
Superstructure, Version 2.2. http://www.omg.org/ 2009.
[OWL, 1996] OWL Project Documentation, School of Computer Science, Carnegie Mellon
Univ., Pittsburgh, PA, 1996.
[Palmer & Felsing, 2002] S. Palmer, & J. Felsing, A Practical Guide to Feature-Driven Development,
Prentice Hall, Upper Saddle River, NJ, 2002.
[Parnas, 1972] D. Parnas, “On the criteria to be used in decomposing systems into modules,”
Communications of the ACM, 15(12), pp. 1053–1058, 1972.
[Parnas & Weiss, 1985] D. L. Parnas & D. M. Weiss, “Active design reviews: principles and practice,”
Proceedings of the Eighth International Conference on Software Engineering,
London, England. pp 132–136, August 1985.
[Partsch, 1990] H. Partsch, Specification and Transformation of Programs, Springer-Verlag,
1990.
[Paulish, 2001] D. J. Paulish, Architecture-Centric Software Project Management: A
Practical Guide, SEI Series in Software Engineering, Addison-Wesley,
Reading, MA, 2001.
[Paulk et al., 1995] M. C. Paulk, C. V. Weber, & B. Curtis (eds.), The Capability Maturity Model:
Guidelines for Improving the Software Process, Addison-Wesley, Reading,
MA, 1995.
[Perforce] http://www.perforce.com/.
[Perlis, 1982] A. Perlis, “Epigrams in Programming,” ACM, SIGPLAN, 1982.
[Petroski, 1992] H. Petroski, To Engineer is Human, Vintage Books, Random House, New
York, 1992.
[Petroski, 1994] H. Petroski, The Evolution of Useful Things, Vintage Books, Random House,
New York, 1994.
[Pfleeger, 1991] S. L. Pfleeger, Software Engineering: The Production of Quality Software,
2nd ed., Macmillan, 1991.
[Pirsig, 1984] R. M. Pirsig, Zen and the Art of Motorcycle Maintenance, Bantam Books,
1984.
[Pirsig, 1991] R. M. Pirsig, Lila: An Inquiry into Morals, Bantam Doubleday Dell, 1991.
[Popper, 1992] K. Popper, Objective Knowledge: An Evolutionary Approach, Clarendon,
Oxford, 1992.
[Porter et al., 1997] A. A. Porter, H. Siy, C. A. Toman, & L. G. Votta, “An experiment to assess the
cost-benefits of code inspections in large scale software development,” IEEE
Transactions on Software Engineering, Vol. 23, No. 6, pp. 329–346, June
1997.
[Portny, 2001] S. E. Portny, Project Management for Dummies, John Wiley & Sons, 2000.
[POSIX, 1990] Portable Operating System Interface for Computing Environments, IEEE Std.
1003.1, IEEE, 1990.
Appendix C • Bibliography 763
[Potts, 1996] C. Potts, “Supporting software design: Integrating design methods and design
rationale,” in T. P. Moran & J. M. Carroll (eds.), Design Rationale: Concepts,
Techniques, and Use, Lawrence Erlbaum Associates, Mahwah, NJ, 1996.
[Potts & Bruns, 1988] C. Potts & G. Bruns, “Recording the Reasons for Design Decisions,” in
Proceedings of the 10th International Conference on Software Engineering,
pp. 418–427, 1988.
[Potts et al., 1994] C. Potts, K. Tkahashi, & A. I. Anton, “Inquiry-based requirements analysis,”
IEEE Software, Vol. 11, No. 2, pp. 21–32, 1994.
[Pressman, 2009] R. S. Pressman, Software Engineering: A Practitioner’s Approach, 7th ed.,
McGraw-Hill, 2009.
[Purvis et al., 1996] M. Purvis, M. Purvis, & P. Jones, “A group collaboration tool for software
engineering projects,” Conference Proceedings of Software Engineering:
Education and Practice (SEEP’96), Dunedin, NZ., January 1996.
[Rational] Rationale, http://www.rational.com.
[Rational, 2002] Rationale Rose, Rational Software Corp., Cupertino, CA, 2002.
[Raymond, 1998] E. Raymond, “The cathedral and the bazaar,” http://www.tuxedo.org/~esr/
writings/cathedral-bazaar/cathedral-bazaar.html, 1998.
[Ritchie & Thompson, 1974] D. M. Ritchie & K. Thompson, “The Unix Time-sharing System,”
Communications of the ACM, Vol. 17, No. 7, pp. 365–37, July 1974.
[RMI, 2009] Java Remote Method Invocation, JDK Documentation, Javasoft, 2009.
[Rochkind, 1975] M.J. Rochkind, “The Source Code Control System,” IEEE Transactions on
Software Engineering, SE-1(4), p. 255–265., 1975.
[Rogers et al., 1986] The Presidential Commission on the Space Shuttle Challenger Accident
Report, Washington, DC, June 1986.
[Rowen, 1990] R. B. Rowen, “Software project management under incomplete and
ambiguous specifications,” IEEE Transactions on Engineering Management,
Vol. 37, No. 1, 1990.
[Royce, 1970] W. W. Royce, “Managing the development of large software systems,” in
Tutorial: Software Engineering Project Management, IEEE Computer
Society, Washington, DC, pp. 118–127, 1970.
[Royce, 1998] W. Royce, Software Project Management: A Unified Framework, Addison-
Wesley, Reading, MA, 1998.
[Rubin, 1994] J. Rubin, Handbook of Usability Testing, Wiley, New York, 1994.
[Rumbaugh et al., 1991] J. Rumbaugh, M. Blaha, W. Premerlani, F. Eddy, & W. Lorensen,
Object-Oriented Modeling and Design, Prentice Hall, Englewood Cliffs, NJ,
1991.
[Schlumberger] Schlumberger, http://www.cyberflex.com/
[Schmidt, 1997] D. C. Schmidt, “Applying design patterns and frameworks to develop
object-oriented communication software,” in P. Salus (ed.), Handbook of
Programming Languages, Vol. 1, MacMillan Computer, 1997.
[Schwaber & Beedle, 2002] K. Schwaber & M. Beedle, Agile Software Development with Scrum, Prentice
Hall, Upper Saddle River, NJ, 2002.
[Schwaber, 2004] K. Schwaber, Agile Project Management With Scrum, Microsoft, Redwood,
2004.
[Shaw & Garlan, 1996] M. Shaw & D. Garlan, Software Architecture: Perspectives on an Emerging
Discipline, Prentice Hall, Upper Saddle River, NJ, 1996.
764 Appendix C • Bibliography
[Shipman & McCall, 1997] F. M. Shipman III & R. J. McCall, “Integrating different perspectives on
design rationale: Supporting the emergence of design rationale from design
communication,” Artificial Intelligence in Engineering Design, Analysis, and
Manufacturing, Vol. 11, No. 2, 1997.
[Siewiorek & Swarz, 1992] D. P. Siewiorek & R. S. Swarz, Reliable Computer Systems: Design and
Evaluation, 2nd ed., Digital, Burlington, MA, 1992.
[Simon, 1970] H. A. Simon, The Sciences of the Artificial, MIT Press, Cambridge, MA,
1970.
[Sommerville, 2006] I. Sommerville, Software Engineering, 8th ed., Addison-Wesley, 2006.
[Spivey, 1992] J. M. Spivey, The Z Notation, A Reference Manual, 2nd ed., Prentice Hall
International, Hertfordshire, U.K., 1992.
[Steelman, 1978] Requirements for High Order Computer Programming Languages: Steelman,
U.S. Department of Defense, Washington, DC, 1978.
[Subrahmanian et al., 1997] E. Subrahmanian, Y. Reich, S. L. Konda, A. Dutoit, D. Cunningham,
R. Patrick, M. Thomas, & A. W. Westerberg, “The n-dim approach to
building design support systems,” Proceedings of ASME Design Theory and
Methodology DTM’97, ASME, New York, 1997.
[Suchman, 2007] L. A. Suchman, Human-Machine Reconfiguration: Plans and Situated
Actions, 2nd ed. Cambridge University Press, 2007.
[Sun, 2009] Sun Microsystems Code Conventions for the Java Programming Language.
http://www.java.sun.com/docs/codeconv/ 2009.
[Tanenbaum, 1996] A. S. Tanenbaum, Computer Networks, 3rd ed. Prentice Hall, Upper Saddle
River, NJ, 1996.
[Taylor, 1911] F. W. Taylor, The Principles of Scientific Management, Harper Bros., New
York, 1911.
[Telelogic] Telelogic, http://www.telelogic.se.
[Tichy, 1985] W. Tichy, “RCS—A system for version control,” Software Practice and
Experience, Vol. 15, No. 7, 1985.
[TogetherSoft, 2002] TogetherSoft, Together Control Center, Raleigh, NC, 2002,
http://www.togethersoft.com.
[Tolkien, 1995] J.R.R. Tolkien, The Lord of The Rings, Harper Collins, 1995.
[Tunde & Harmon Ray, 1994] A. Ogunnaike Babatunde & W. Harmon Ray, Process Dynamics, Modeling
and Control, Oxford University Press, 1994.
[Turner & Robson, 1993] C. D. Turner & D. J. Robson, “The state-based testing of object-oriented
programs,” Conference on Software Maintenance, pp. 302–310, September
1993.
[Twain, 1897] M. Twain, Following the Equator: A Journey Around the World, American
Publishing Co., Hartford, 1897, BoondocksNet Edition, 2003.
[Vaughan, 1996] D. Vaughan, The Challenger Launch Decision: Risky Technology, Culture,
and Deviance at NASA, The University of Chicago Press, Chicago, 1996.
[Viller & Sommerville, 1999] S. Viller & I. Sommerville, “Social analysis in the requirements engineering
process: from ethnography to method,” International Symposium on
Requirements Engineering (ISRE’99), Limerick, Ireland, June 1999.
[Warmer & Kleppe, 2003] J. Warmer & A. Kleppe, The Object Constraint Language: Getting Your
Modes Ready for MDA, 2nd ed., Addison-Wesley, Reading, MA, 2003.
Appendix C • Bibliography 765
[Weinand et al., 1988] A. Weinand, E. Gamma, & R. Marty, “ET++—An object-oriented application
framework in C++,” in Object-Oriented Programming Systems, Languages,
and Applications Conference Proceedings, San Diego, CA, September 1988.
[Weinberg, 1971] G. M. Weinberg, The Psychology of Computer Programming, Van Nostrand,
New York, 1971.
[Wigand et al., 1997] R. T. Wigand, A. Picot, & R. Reichwald, Information, Organization and
Management: Expanding Markets and Corporate Boundaries, John Wiley &
Sons, London, 1997.
[Wilson & Ostrem, 1999] G. Wilson & J. Ostrem, WebObjects Developer’s Guide, Apple Computers,
Cupertino, CA, 1998.
[Wirfs-Brock, 1995] R. Wirfs-Brock, “Design objects and their interactions: A brief look at
responsibility-driven design,” in J. M. Carroll (ed.), Scenario-Based Design:
Envisioning Work and Technology in System Development, Wiley, New York,
1995.
[Wirfs-Brock et al., 1990] R. Wirfs-Brock, B. Wilkerson, & L. Wiener, Designing Object-Oriented
Software, Prentice Hall, Englewood Cliffs, NJ, 1990.
[Wood & Silver, 1989] J. Wood & D. Silver, Joint Application Design®, Wiley, New York, 1989.
[Wordsworth, 1992] J. B. Wordsworth, Software Development with Z: A Practical Approach to
Formal Methods in Software Engineering, Addison-Wesley, Reading, MA,
1992.
[Yourdon & Constantine, 1979] E. Yourdon & L. Constantine, Structured Design, Prentice Hall, Englewood
Cliffs, NJ, 1979.
[Wiki] Wiki, http://c2.com/cgi/wiki?WikiWikiWeb.
[Yahoo] Yahoo, http://groups.yahoo.com.
[Zultner, 1993] R. E. Zultner, “TQM for technical teams,” Communications of the ACM,
Vol. 36, No. 10, pp. 79–91, 1993.
This page intentionally left blank
Index
767
768 Index
build management 540, 724 Command design pattern 329, 342, 713
buried association 418, 724 communication 726
burn down chart 613 activity 21
communication diagrams 61, 726
C communication event 726
callback 244, 724 communication infrastructure
candidate keys 417, 724 setting up 598
capability 271, 724 communication mechanism 102, 726
Capability Maturity Model 633, 725 communication relationship 46, 726
cathedral model 725 competitor testing 475
centralized traffic control 498, 725 completeness 128, 726
change 548, 725 of the system design 283
change control 540, 725 component 726
change control board 568, 725 encapsulating 323
change management 565, 664 inspecting 451
change request 541, 544, 725 logical 229
change set 548, 725 physical 229
changed-based view 548 component champion 340
chief programmer organization 616, 725 component expert 727
chronological minutes 517 component inspection 727
ciphertext 274 component-based development 664
clarity 128, 725 Composite design pattern 330, 714
class 35, 38, 50, 725 composition aggregation 192, 727
class diagram 43, 725 concept 727
applying 59 configuration 542, 543, 727
class extender 353, 725 configuration item 541, 542, 727
class implementor 353, 725 identifying 540, 552
class user 353, 725 configuration management 727
ClearCase 548 activities 550
client 88, 242, 726
documenting 567
during analysis 200
managing 566
client class 318, 353, 726
planning 568
client review 81, 95, 726
roles 568
client sign-off 204
client type 655 tools 548
client/server 242, 726 configuration management aggregate 541, 727
closed architecture 235, 726 configuration manager 87, 568, 727
closed issue 645, 726 during analysis 201
CM aggregate 541, 542, 726 during object design 381
identifying 552 during reuse 340
CMM 633 during system design 286
See Capability Maturity Model conflict resolution 531
cohesion 228, 231, 726 consistency 128, 727
770 Index
of the system design 283 Decision Representation Language 505, 507, 729
constraint 70, 727 defect 729
heuristics 373 delegation 316, 729
consultant role 88, 727 deliverable 13, 90, 586, 729
continuous integration 569 delta 548, 729
contract 356, 727 dependability criterion 126, 250, 729
inheriting 374 deployment cost 251
contract inheritance 374, 727 deployment diagram 262, 729
control flow 275, 727 derived class 729
encapsulating 329 derived classes 313
control node 66, 728 design goal 729
control object 177, 728 addressing 264
heuristics 184 identifying 249
identifying 184 design pattern 317, 709– 718, 729
controller 728 developer 729
correction 445, 451, 728 during configuration management 568
correctness 128, 728 during object design 424
of the system design 282 development cost 251
correctness debugging 441 development processes 630
cost criterion 250, 728 development role 86
coupling 228, 230, 728 different time, different place groupware 108
coverage (in equivalence testing) 455 discount usability engineering 453
CRC card 189– 190, 672, 728 disjointedness (in equivalence testing) 456
criterion 495, 502, 728 distribution 657
critical path 588, 728 document editor 87, 729
cross development 728 during analysis 201
cross-functional role 87, 728 during system design 286
cross-functional team 85, 109, 728 DoD Std 2167A 647
CTC 498, 510, 728 domain experience 667
See also Centralized Traffic Control domain object 729
CVS 548 double test 465
cycle 639 DRL 505
dynamic access control 273, 730
D dynamic model 30, 175, 176, 730
daily Scrum meeting 613
data flow 728 E
data record 416 egoless programming 616, 730
data type 35, 37, 728 encryption 274, 730
DCOM 333 end user 88, 656, 730
debugging 441, 729 during analysis 200
decision 495, 729 end user criterion 251, 730
in an activity diagram 66 enterprise application framework 333, 730
decision rationale 507 entity object 177, 730
Index 771
realizing 409 O
mapping 736
object 35, 39, 50, 738
master directory 542, 545, 736
collapsing 404
meeting 105, 736
meeting agenda 105 interactions 185
meeting minutes 105 Object Constraint Language 357, 738
memory 250 object design 19, 310, 738
merge 546 activities 320, 365, 402
message 40, 58, 59, 736 concepts 313, 352, 396
method 15, 58, 655, 736 documenting 375
methodological heuristics 702 managing 337, 375, 422
methodology 15, 655, 736 roles 340, 381, 424
metrics 604, 604– 607, 668 Object Design Document 375– 381, 738
middleware framework 333, 736 template 378
MIL Std 480 542 object design model 738
minute taker 105, 528, 736 object designer 381, 738
minutes 736 object diagram 738
model 12, 35, 736 object model 30, 738
model object 737 object-oriented analysis 41, 738
model transformation 397, 737 object-oriented database 268
Model/View/Controller 240, 737 object-oriented design 41, 738
modeling 5, 6, 35, 659, 737 Observer design pattern 242, 343, 716
models 659 OCL 357, 738
modifiability 251, 737 OCL bag 364, 738
modified sandwich testing 469 OCL collection 363, 738
multiplicity 54, 191, 737 OCL sequence 363, 738
MVC 737 OCL set 363, 738
myCarParts 550 ODD 739
myTrip 247 See also Object Design Document
on time delivery 4
N one-to-many association 54, 739
name 737 realizing 408
navigation 52, 737 one-to-one association 54, 739
negotiation 530 realizing 406
nested state 65, 737 open architecture 235, 739
nested state machine 65, 737 open issue 645, 739
NFR Framework 505, 508, 737 operation 39, 58, 739
nonfunctional requirements 126, 737 identifying missing 366
identifying 146 operations requirements 127, 739
notation 15, 37, 737 optical illusion 174
note 738 organization 739
in UML 69 OWL
client acceptance test agenda 95
774 Index
status review 96 T
stereotype 70, 747
tables 416
stimulus 747
tame problem 506
storage layer 244
task 14, 80, 88, 584, 748
Strategy design pattern 325, 718
task model 586, 749
streetcar system 350
team 109, 602, 749
stress testing 474
team leader 749
strict inheritance 317, 747
team-based organization 83, 749
structural testing 747
technical consultant 88, 746, 749
structured interview 104, 747
technical role 600
structured minutes 518
technical writer 749
STS-51L 576
during object design 381
Stuttgart 350
subclass 38, 57, 747 during reuse 340
subclasses 313 test case 444, 448, 484, 749
subsystem 35, 228, 747 Test Case Specification 478
allocating to node 265 template 480
test component 444, 484
encapsulating 253
test context 484
identifying 253
test driver 444, 450, 749
subsystem decomposition 748
test first 672
subsystem interface 230, 748
test harness 484
subsystem team 109, 748
Test Incident Report 478
subtype 317
Test Manual 749
superclass 38, 57, 313, 748
test objective 484
supportability 126, 748
Test Plan 478
swimlane 66, 748
template 478
Swing 236
test planning 442, 749
SYBIL 507
Test Report Summary 478
system 12, 35, 748
test stub 444, 450, 749
system design 19, 223– 302, 748
Test Summary Report 478
activities 247, 264
test system 484
communicating 287
tester 88, 749
concepts 228, 262 testing 20, 440, 749
documenting 284 concepts 444
iterating 288 managing 476
managing 284 thread 276, 749
reviewing 282 three-tier 244, 749
System Design Document 284, 748 throughput 126, 250, 749
system design model 748 time constraint 588
system model 35, 36, 748 timekeeper 105, 749
system structure testing 442 timing tests 474
system testing 442, 452, 471, 748 Titanic 308
system under test 484 Tolkien, J.R.R. 394
778 Index
problem
statement
Requirements
elitation (Ch.4)
nonfunctional functional
requirements model use case diagram
Analysis (Ch.5)
analysis object
class diagram
model statechart diagram
dynamic model
subsystem
decomposition
system design
object model
design goals
Object design (Ch.8 & 9)
object design
class diagram
model
Implementation (Ch.10)
source code
Test (Ch.11)
deliverable system
Managing change
Rationale (Ch.12)
assesses
Criterion Proposal
* * *
solvable-by
Issue based-on
resolved-by Resolution
Testing (Ch.11)
implementedBy
Test suite
exercises is-revised-by
* * 1…n
* *
finds * * repairs
* * * *
Failure Error Fault
is-caused-by is-caused-by
Project
Management (Ch.14)
Project
Resource
*
Outcome Work
*
*
Set of
work products Work product Activity Task
Configuration
Management (Ch.13)
*
Controlled item
Promotion Release
Design patterns
Abstract Factory (328, 341, 710) this pattern shields a system from the concrete classes provided by
a specific platform, such as a windowing style or an operating system.
Adapter (319, 711) This pattern encapsulates a piece of legacy code that was not designed to work
with the system. It also limits the impact of substituting the piece of legacy code for a different
component.
Bridge (321, 712) This pattern decouples the interface of a class from its implementation. Unlike the
Adapter pattern, the developer is not constrained by an existing piece of code.
Command (329, 342, 713) This pattern enables the encapsulation of control objects so that user
requests can be treated uniformly, independent of the specific request. This pattern protects
these objects from changes required by new functionality.
Composite (55, 228, 233, 330, 714) This pattern represents a hierarchy which has dynamic width and
depth. The services related to the hierarchy are factored out using inheritance, allowing a system
to treat leaves and intermediate composite nodes uniformly.
Facade (254, 715) This pattern reduces dependencies among classes by encapsulating a subsystem
with a simple unified interface.
Observer (240, 342, 716) This pattern allows to maintain consistency across the states of one
Publisher and many Subscribers.
Proxy (274, 405, 717) This pattern improves the performance or the security of a system by delaying
expensive computations, using memory only when needed, or checking access before loading
an object into memory.
Strategy (325, 463, 718) This pattern decouples a policy from a set of mechanisms or a context from a
set of implementations. Depending on the policy or context, the mechanisms or
implementations can be changed at runtime transparently from the client.
Notations
UML use case diagrams (31, 44) Use case diagrams are used to represent the functionality of the
system, as seen by an actor.
UML class diagrams (32, 50) Class diagrams are used to represent the structure of the system, in
terms of subsystems, classes, attributes, operations, and associations.
UML sequence diagrams (32, 59) Sequence diagrams represent behavior in terms of a series of
interactions among a set of objects.
UML statechart diagrams (33, 62) Statechart diagrams represent behavior of a single object as a
state machine in terms of events and transitions.
Activity diagrams (33, 65) Activity diagrams are flow diagrams which represent behavior of a set of
objects as activities and transitions.
UML deployment diagrams (228) Deployment diagrams represent the mapping of software
components to hardware nodes.
Issue models (497) Issue models represent the justification of decisions in terms of issues, proposals,
arguments, criteria, and resolutions.
PERT charts (90) PERT charts represent the division of work into tasks and ordering constraints.
Example systems
2Bwatch and SatWatch (125) 2Bwatch is a digital watch with two buttons. SatWatch is a digital
watch that uses GPS satellites to select the correct time zone. Except for a display, it provides no
interface for its user. Both are systems that are simple enough for introducing basic
requirements elicitation concepts.
FRIEND (131, 181) FRIEND is a distributed information system for managing accidents. It allows
field officers, dispatchers, and authorities to communicate and allocate resources to an
emergency. FRIEND is a much more complex system than either 2Bwatch or SatWatch. It
illustrates how requirements elicitation and analysis methods scale up to a real system. FRIEND
was realized in CMU between 1992 and 1994.
myTrip (247) myTrip enables users to plan a trip and download its information into their car. Once in
the car, users can execute their trip and receive directions. This example was inspired from the
JAMES system which was realized in CMU and in TUM in 1997 and 1998. We use the myTrip
system to illustrate system design methods.
CTC (510) CTC is a centralized traffic control system for trains. It enables dispatchers to monitor and
direct trains remotely. Such systems usually have a long life and high availability requirements.
We use the access control mechanisms of CTC for illustrating rationale management methods.
myCarParts (550) myCarParts is a web-based electronic catalog of car parts. It enables novice users
and mechanics to browse, search, and order parts. myCarParts is a client server system in which
both the server and the client are incrementally improved. We use myCarParts to illustrate the
activities of configuration management. myCarParts was inspired by PAID, a system realized at
CMU and TUM in 1998 and 1999.
ARENA (153, 206, 290, 341, 382, 424) ARENA is a multi-user, Web-based system for organizing and
conducting tournaments. ARENA is game independent in the sense that organizers can adapt a
new game to the ARENA game interface, upload it to the ARENA server, and immediately announce
and conduct tournaments with players and spectators located anywhere on the Internet.
Organizers can also define new tournament styles, describing how players are mapped to a set of
matches and how to compute an overall ranking of players by adding up their victories and
losses (hence, figuring out who won the tournament). To recoup their operational costs,
organizers can also invite potential sponsors to display advertisement banners during games.
ARENA has been realized at TUM and the University of Otago in 2002 and 2003.