MSc-IT Study Material
January 2011 Edition

Computer Science Department, University of Cape Town
| MIT Notes Home | Edition Home |

Software engineering and the software process

Recognising these problems, work was carried out to understand the process of software development and to transform it into a reliable and rigorous discipline, like architecture or engineering. An improved process should produce software that is correct, reliable, usable and maintainable. By understanding the process, it should be possible to plan projects with more accurate predictions of cost and time, and provide ways of monitoring intermediate stages of project progress, to be able to react and re-plan if a project begins to go off budget or timescale.

Software engineering is exactly the discipline of producing such software. Fritz Bauer defined software engineering to be: the establishment and use of sound engineering principles in order to obtain economically software that is reliable and works efficiently on real machines.

Much research has been put into the study of past systems that were both successful and unsuccessful. This can be summarised as:

Analysis of such findings led to a model of what is called the software process, or system life cycle. The software process is the process of engineering and developing software; a process model, or life cycle model is a descriptive model giving the best practices for carrying out software development (i.e., for carrying out the software process). However, a process model is often treated as a prescriptive model that needs to be followed precisely, without any deviation. This should not be the case. The specific model of the software process used should be tailored to meet the specific needs of the project and the developers working on the project.

Note

The phrases Software process, Software Life Cycle, System Development Life Cycle, System Life Cycle, Development Life Cycle are all used to describe the same concept.

The layers of software engineering

Software engineering is a discipline that can be pictured as being built up of layers (Figure 2.3, “The layers of software engineering”).

Figure 2.3. The layers of software engineering

The layers of software engineering

Software engineering demands a focus on quality. This should permeate throughout the rest of the engineering discipline.

On top of this comes the foundation of software engineering: the software process. The process is the framework on which the rest of software engineering is built. The process defines how management occurs, what the required input and output products are, what milestones should be reached, and so on. The process also describes how quality should be ensured.

On top of process, software engineering consists of methods. These describe how the various portions that make up the software process should be carried out. For instance, how to communicate with clients, how to test the software, to gather requirements, and so on. This makes up the process model.

And above all of this, and in support of the whole discipline, are the tools. The tools support the software process. Such tools are called computer-aided software engineering tools.

A generic framework of the software process

A software process consists of the activities that are carried out during the development of every software system. There are specific activities which are carried out at specific times, as well as activities carried out throughout the project's lifetime. Such life-long activities are called umbrella activities.

A generic framework defining these activities for the software process can be given. It identifies activities common to most of the models of the software process, although each model adapts the activities to its own ends.

The activities are as follows:

  • Communication - This activity involves the gathering of software requirements from the customer, and related sub-activities.

  • Planning - This is the activity of planning the work required to develop the software. This includes risk management, listing the associated outputs, and producing a schedule for the work.

  • Modeling - This activity is involved with modelling both the requirements and the software design, so that both the developers and the customers can better understand the work being carried out.

  • Construction - This is the development of the software. This activity also includes sub-activities for testing the software.

  • Deployment - The software is delivered, and the customer provides feedback on the software.