The software engineering process

Software engineering is applying well-understood techniques in a disciplined way to the production of software.

Groups involved are : users, customers, developers, and managers (a single person could be in more than one group).

Common to all software projects are requirements and specification, design, modeling, programming, deployment and management.

A software process model can be descriptive or prescriptive. A bad model is the opportunistic model which simply modifies the software until the customer is satisfied. There is no emphasis on requirements or systematic development.

The waterfall model was considered standard for many years. It is a sequence of activities, each of which can be repeated any number of times: requirements< -> specification <-> design <-> implementation <-> deployment <-> maintenance.

The phased release model is incremental development where design, implementation and deployment are repeated as a block for each phase.

The spiral model starts with a simple prototype and incrementally improves it, repeating requirements, design, implementation and deployment. Each cycle includes a risk analysis that makes the decision of whether to go for another cycle.

The evolutionary model has overlapping cycles.

Over the years many prescriptive methods have been put forward, some integrated with tools (CASE tools in particular), some prescribing the general approach to software development, and some being quite detailed in what activities the team should engage in.

Extreme programming (XP) is the latest hot method. It is a lightweight method (few detailed activities) that emphasizes communication in among the team members, designs centered around "stories" of how the software will work, and programming for testability so that the system has been tested at every step and could be deployed as soon as the tests are complete. The method also allows for throwaway prototypes to prove a particular point, frequent refactoring of the code, and small increments in improvement.