Chapter 1: The changing pressures on software engineering
Introduction
What is software engineering?
Software engineering is defined as ‘an engineering discipline that is concerned with all aspects
of software production from the early stages of system specification to maintaining the system
after it has gone into use’.
The overall aim of software engineering is to produce software on time and to a budget that
satisfies the requirements of the users of the software application in a changing environment,
by providing a safe and efficient solution to the problem at hand.
This ideal might be very difficult to achieve but at least it helps to minimise problems with
software projects
History and overview
The term Software Engineering was coined back in the 50s, where the first software applications
where developed.
Due to low computer power and low memory, the programs where written by hand in machine-
code or very low-level languages and where often written from scratch.
By the 1960s-software development became very complex, and therefore it was necessary to
think about organising and managing the process of developing software.
Since the people writing software were usually engineers (often electronics engineers), they
employed the methods they had learnt in their engineering disciplines to help them to write
software.
They also employed methods from management in order to map the way the software might
work (for example flowcharts predate the development of the computer, even though we often
associate them with computers today).
By the 1970s computer prices started to drop and their power increased, so did their user base.
This led to a wider range of applications.
In the early 1970s computer specialists drew on engineering approaches further to aid them in
developing software.
In particular, they adopted processes such as the lifecycle approach to systems development, as
it is similar to other engineering approaches (e.g. designing and constructing cars, houses, or
aeroplanes).
In the 1980s computer power was more readily available and a number of new methodologies
were developed specifically to aid systems development and software engineering.
In the 1990s it was noticed that there was a shift away from prescriptive methodologies in
favour of more flexible approaches such as rapid application development, CASE-approaches,
incremental and iterative approaches and agile methods
However, the traditional approaches are still being used for traditional software engineering
projects.
Alongside these various processes for developing software (waterfall, rapid application
development, etc...), there was rapid development of new practices for developing software,
including ways of:
o analysing users’ problems,
o ways of modelling these problems,
o ways of writing code and ways of testing systems to make sure that they work as they
are intended to.
How we will study software engineering
In the previous section the history of software engineering was briefly described, and we saw
that this involved the development of a range of processes for managing the development of
software, and various practices undertaken as part of these processes.
In order to help us study software engineering we will therefore focus on my 4P’s of software
engineering.
o Processes
o People
o Practices
o Paradigms
Processes
o These are the methodological processes which people will follow in order to move from
an idea or problem, through to a completed piece of software in use by people.
Processes involve various people undertaking a range of different software practices
People
o There are many different types of people involved in a software engineering project:
software engineers - who undertake the work to develop systems, and are also
sometimes called developers
users - who interact with the software in some way
customers - who take decisions about the software’s design
o You might notice that users are often also customers. We might however also consider
other people such as maintenance staff (looking after software in the future), lawyers
(drawing up contracts for software development projects), testers, programmers,
accountants, technical authors (writing manuals) …
Practices
o These are the specific activities a software engineer undertakes in order to develop a
system. For example, interviewing users to find out their requirements is a practice
Paradigms
o Paradigms refer to a set of practices which are linked together around a set of beliefs
about the way we should develop software.
Within this guide we will discuss two paradigms –
the object-oriented approach
The object-oriented approach consists of practices which are linked
around the idea that software should be constructed as sets of
interacting objects.
the structure systems analysis approach
The structure systems analysis approach consists of practices which are
linked around the idea that we should consider the word as functions
operating on data-structures.
The subject guide is thus structured in three parts.
o The first part of the guide introduces the process of software development,
o the second part teaches the practices used within these processes. In doing this it
employs the lifecycle model in order to structure the teaching.
o Part 3 of the guide introduces the project you must undertake as part of this course –
which is your chance to try out a process and set of practices you learn.
Software Engineering
Software Engineering is made up of various knowledge areas, namely:
o Software Requirements/Software Analysis The activity of obtaining, analysing, and
recording requirements for software systems
o Software Design The activity in which software requirements are analysed in order to
produce a description of the software’s internal structure that will serve as the basis for
its construction
o Software Construction The detailed creation of working, meaningful software through a
combination of coding, verification, unit testing, integration testing and debugging
o Software Testing This consists of the dynamic verification of the behaviour of a program
on a finite set of test cases, suitably selected from the usually infinite executions
domain, against the expected behaviour
o Software Maintenance The totality of activities required to provide cost-effective
support to software.
o Software Configuration Management The discipline of identifying the configuration of a
system at distinct points in time for the purpose of systematically controlling changes to
the configuration, and maintaining the integrity and traceability of the configuration
throughout the system lifecycle.
o Software Engineering Management The application of management activities –
planning, coordinating, measuring, monitoring, controlling and reporting – to ensure
that the development of software is systematic, disciplined, and quantified
o Software Engineering Process This area concerns knowledge about commonly used
software life-cycle process models, e.g. agile, waterfall, spiral, etc..
o Software Engineering Tools & Methods Tools allow repetitive, well-defined actions to
be automated, reducing the cognitive load on the software engineer who is then free to
concentrate on the creative aspects of the process
o Software Quality The process that helps ensure that characteristics fulfil the
requirements
o Related Areas Algorithms & Complexity Ergonomics, HCI Systems Engineering etc.…
Software vs hardware
Software is defined in contrast to hardware.
The term software denotes all the non-physical components of a computer-based system.
Software is the result of a creative process and in some cases it can be considered to be an art
as much as a science.
The distinction starts to be more evident when the complexity raises the need for better
management of the task.