The description of process given here is intended to cover both complete software applications and individual software components.

Topics include:

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.

Elements of a Software Engineering Discipline

Abstraction

 •  Encapsulation of information through OOP, for example

Analysis and Design Methods and Notations

 • Use of design patterns, UML

User Interface Prototyping

 • Help user and developer agree on requirements and software functions

Software Architecture

 • Strive for independence of parts through modularity

Software Process

Software Reuse

Measurement (Metrics)

 • Quantifying project goals to evaluate progress (number of bugs per 100 lines of code, for example)

Tools and Integreated Environments

 • Netbeans, for example

Phases of Software Development

The software development phases shown next are common to all significant software development projects.

How they fit into an overall process differs according to the process model used.

Requirements Analysis and Definition

 • See Software Engineering Values

System Design

 • High-level software architecture

Program Design

 • User-oriented: UML class and interaction diagrams

 • Implementation-oriented: internal structure and algorithm design

Program Implementation

 • Writing and compiling code for the individual software components and their test software

Unit Testing

 • Testing individual units, for example, classes

Integration Testing

 • Testing collaboration of units within modules

System Testing

 • Testing all modules together

System Delivery

 • Package and deliver bundles of the software and its documentation to the purchaser

Maintenance/Evolution

 • Fix defects or adapt software to new needs
In large organizations, different software phases may involve different people playing different roles.

In smaller organizations, people may play multiple roles.

Next we show the major software development roles.

Other Software Personnel

Librarians:

Prepare and store documents used during the life of the system:

Configuration Managers:

The following software development activities cannot be isolated to a single phase, and are repeated throughout the development process.

Risk analysis is a management activity that attempts to identify aspects of the development process that have a significant chance of failing.

After risks are identified, managers have several options:

Planning is a management activity that determines the specific project goals and allocates adequate resources for the various phases:

Risk analysis can be viewed as preparation for planning. For phases with high risk, managers may

All phases of development should involve ensuring that the products of the various phases meet their objectives.

Documentation provides instructions and information needed for the installation, use, and maintenance of software.

Software process models are general approaches for organizing a project into activities.
A software process must involve all of the phases already identified.

However, the phase transitions must be controlled, or the process will be chaotic as shown below.

If a prototype is used in the Waterfall Model, it is usually thrown away.

In the Prototyping Model, the prototype becomes the product:

The Phased-Release model allows customers to use software while it is being developed:
Phased releases reduce the wait time for software to be delivered:

Incremental Development: Deliver complete modules one at a time

Iterative Development: Deliver incomplete modules in a bundle and improve them over time

The Spiral Model

Explicitly embraces prototyping and an iterative approach to software development:

 • Start by developing a small prototype

 • Followed by a mini-waterfall process, primarily to gather requirements

 • Then, the first prototype is reviewed

 • In subsequent loops, the project team performs further requirements, design, implementation and review

 • The first thing to do before embarking on each new loop is risk analysis

 • Maintenance is simply a type of on-going development

The Evolutionary Model

Shows software development as a series of hills, each representing a separate loop of the spiral:

 • Shows that loops, or releases, tend to overlap each other

 • Makes it clear that development work tends to reach a peak, at around the time of the deadline for completion

 • Shows that each prototype or release can take differing amounts of time to deliver and differing amounts of effort

Agile approaches encourage the execution of particularly small iterations in the development cycle.

Agile Software Development

 • Well suited for small projects that involve uncertain, changing requirements and other high risk

 • Perspective: Building software is more like creating a work of art, requiring creativity in design and craftsmanship in implementation

 • There are no Agile "methods" or "processes"; only Agile teams.

 • Website: agile-process.org

 • The most famous agile approach is eXtreme Programming (XP)

 • Another agile methodolgy is Scrum

Extreme Programming

 • All stakeholders work closely together

 • User stories (looser than use cases) are written instead of requirement documents

 • There must be a series of small and frequent releases (1 to 3 weeks)

 • The project variables are: scope, resources, time and quality

 • Test cases are written before the software is developed

 • A large amount of refactoring is encouraged

 • Pair programming is recommended

 • Website: extremeprogramming.org

Extreme Programming Basic Principles

Rapid Feedback

 • Days or weeks rather than months or years

Assume Simplicity

 • Solve today's problem simply and trust your ability to add complexity in the future

Incremental Change, A Little At A Time

 • In all areas: planning, design, team formation, learning XP

Embrace Change

Quality Work

 • Quality as a variable ranges over “excellent” and “insanely excellent”

The Concurrent Engineering Model

Explicitly accounts for the divide and conquer principle:

 • Each team works on its own component, typically following a spiral or evolutionary approach

 • There has to be some initial planning, and periodic integration

Each of the large scale components then goes through design, implementation, integration (putting together subcomponents), and maintenance. They also are in a sense delivered: they are delivered for integration with other large scale components. In short, each of the large scale components can be developed using a smaller scale development process.

The Transformational Model

Seeks to generate programs automatically from models of them:

 •  Human involved in creation of formal specification from requirements

 •  Formal specification automatically transformed into a UML model by software tools (long way off)

 •  UML model automatically transformed into platform-specific source code (active research today)

 •  Source code transformed into executable code by compilers

 •  Ultimate goal: replace programmers with "specifiers"

A disciplined software process serves two main purposes:
As software developers work through a disciplined process, they are developing a complex mental road map of: Common sense and experience both support the importance of this understanding.
Suppose that a software development process has been in progress for several months or years. Then: So a new member, who knows neither the process nor the client, has been added to the team.

Will he/she be as effective as the other team members?

Not likely.

Brooks [Brooks95] has discussed management problems arising from adding people to a project that is behind schedule in order to catch up:

This may seem obvious, but 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:

When undertaking a new project, software managers must be able to estimate the resources required so that: A disciplined process is essential for managers to call upon previous experience in order to make resource estimates: