[an error occurred while processing this directive]
Software Development Process
The description of process given here is intended to cover both complete
software applications and their individual components.
There are important aspects of application-level process that are not
covered here.
For example, iterative development is an important approach that allows
development to proceed while permitting some changes in requirements.
See [FS97] for a good presentation of
the application-level process.
For experienced software developers, the component-level process is often
less conspicuous, involving well-established and automated patterns of
thinking.
This does not diminish its importance.
Software developers need good automated thinking habits to free their minds
for dealing with more complex issues.
Phases of Software Development
Some of the activities in the software development process are sequential
in nature, dividing the process into the following phases.
- Requirements analysis -
specifying the functional capabilities needed in the software.
Use-cases are an important tool for communication about requirements
between software developers and their clients.
Products: software requirements documents for the software
Objectives: capture the client's needs and wants
- Domain analysis -
developing concepts, terminology, and relationships essential to the
client's model of the software and its behavior.
Conceptual-level class diagrams and interaction diagrams are important
tools of domain analysis.
Products: client-oriented model for the software and its components
Objectives: capture the client's knowledge framework
- Client-oriented design -
specifying components of the software that are visible to the client and
the components' behavior in terms of their attributes, methods, and
relationships to other components.
Specification-level class diagrams and interaction diagrams are important
tools of client-oriented design.
Products: client-oriented specifications for components
Objectives: define the structure of interactions with the client,
providing methods that satisfy the client's needs and wants, operating
within the client's knowledge framework
- Implementation-oriented design -
determining internal features and method algorithms for the software.
Products: implementation-oriented specifications for components
Objectives: define internal structure and algorithms for components
that meet client-oriented specifications
- Implementation -
writing and compiling code for the individual software components.
Products: source code and binary code for software components and their
test software
Objectives: produce coded components that accurately implement the
implementation-oriented design
- Integration -
putting the software components into a context with each other and with
client software.
Products:
Objectives: test the software components in the context in which they
will be used
- Packaging -
bundling the software and its documentation into a deliverable form.
Products: software and documentation in an easily installed form
Objectives:
Ongoing Activities in Software Development
The following software development activities cannot be isolated to a
single phase.
They are repeated throughout the process.
The Importance of a Disciplined Process
A disciplined process serves two main purposes: it helps the developers
to better understand the what they are doing, and it helps managers to
make more accurate predictions about how long a project will take.
Predictatability is crucial for setting reasonable goals and planning
resource allocation.
Understanding
As software developers work through a disciplined process, they are
developing a complex mental roadmap of the values of the client, the
concepts that are important to the client, software patterns for achieving
the desired behavior, and implementation methods.
Common sense and experience both support the importance of this
understanding.
- Common sense:
Suppose that a software development process has been in progress for
several months or years.
One of the development team members has changed jobs so that a
replacement is needed.
Or, the project is behind schedule so management has allocated more
people to work on the project.
So you have been added to the team.
Will you be as effective as the other team members?
Not likely.
- Experience:
Brooks [Brooks95] has discussed
management problems arising from adding people to a project that is behind
schedule in order to catch up.
Often, the result is that the project slips further behind schedule.
The reason for this is the new people do not have a mental roadmap.
In order to acquire it, experienced team members will have to dedicate some
time to bringing them up to speed.
The fact that managers did not see the obvious should not be construed as
proof that managers are stupid.
Managers have to go through a similar process to learn how to manage
effectively.
A lot of facts are obvious, but that does not mean that you will see
them when they are important.
You do not see things that are obvious until you have had experiences
that stress their importance.
You also need to recognize that they are important.
Predictability
A disciplined process is also essential for management of resources so that
managers can anticipate needs and coordinate between multiple projects.
Software development firms will often impose a more stringent process
than is needed to just get the job done.
Part of the reason for this is that over time, the managers develop a
better sense of how long it takes to accomplish various kinds of tasks
and what kinds of skills are needed.
Without a disciplined process, it is impossible to develop this sense -
with an undisciplined process, there is just too much variation in how long
it takes to accomplish a task, and the variation is usually in an
undesirable direction.
[an error occurred while processing this directive]