Chapter 2 - Lesson 1
Chapter 2 - Lesson 1
Lesson 1
SOFTWARE ENGINEERING AND SOFTWARE PROCESSES
Objectives:
At the end of this chapter you should be able to:
Readings:
The software crisis
There were many difficulties in the development of large software systems during the 1960s and 1970s.
The term “software crisis” dates from that time. The problems stemmed from an inability to apply the
techniques used to build small software systems to the development of larger and more complex
systems. The typical way to develop small systems can be described as “code-and-fix”.
The “code-and-fix” approach to software development is not a proper life cycle (see later this unit).
Code-and-fix development occurs when software engineers come together with a vague set of
requirements and start producing software, fixing it, and changing it until the correct product appears.
We only mention the code-and-fix approach in the context of life cycle models since it is a base-line
model which we should avoid. From a software engineer's point of view, code-and-fix is a worst-case
scenario.
Many project failures resulted from the inability to scale the techniques employed when developing
small software systems to handle larger, more complex systems. This failure leads to:
These problems were largely due to the lack of any framework for the planning and organization of
software development projects. Although some software projects were organized, and these were often
ENGR. DENNIS C. TENERIFE, MSIT MODULE ON SOFTWARE ENGINEERING 2
the more successful ones, it was the luck of the draw whether a project manager had good intuitions
for software development, and whether or not problems arose due to misunderstandings between the
customers and the developers of the system. Likewise, there were no clear methods to monitor whether
a system was soon to go over budget or miss deadlines.
From some of these problems we can see that at some stage the system developers attempted (not
always successfully) to understand the requirements for the new system. We can now include in our
diagram of the process these specified requirements for the new system:
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 summarized 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.
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 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.
• 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.