System Design and software Engineering

Introduction:
Virtually all countries now depend on complex computer-based systems. National
infrastructures and utilities rely on computer-based systems and most electrical prod-
ucts include a computer and controlling software. Industrial manufacturing and dis-
tribution is completely computerised, as is the financial system. Therefore,
producing and maintaining software cost-effectively is essential for the functioning
of national and international economies.
Software engineering is an engineering discipline whose focus is the cost-
effective development of high-quality software systems. Software is abstract and
intangible. It is not constrained by materials, or governed by physical laws or by
manufacturing processes. In some ways, this simplifies software engineering as there
are no physical limitations on the potential of software. However, this lack of nat-
ural constraints means that software can easily become extremely complex and hence
very difficult to understand.
The notion of software engineering was first proposed in 1968 at a conference
held to discuss what was then called the ‘software crisis’. This software crisis resulted
directly from the introduction of new computer hardware based on integrated cir-
cuits. Their power made hitherto unrealisable computer applications a feasible
proposition. The resulting software was orders of magnitude larger and more com-
plex than previous software systems.
Early experience in building these systems showed that informal software devel-
opment was not good enough. Major projects were sometimes years late. The soft-
ware cost much more than predicted, was unreliable, was difficult to maintain and
performed poorly. Software development was in crisis. Hardware costs were tum-
bling whilst software costs were rising rapidly. New techniques and methods were
needed to control the complexity inherent in large software systems.
These techniques have become part of software engineering and are now widely
used. However, as our ability to produce software has increased, so too has the com-
plexity of the software systems that we need. New technologies resulting from the
convergence of computers and communication systems and complex graphical user
interfaces place new demands on software engineers. As many companies still do
not apply software engineering techniques effectively, too many projects still pro-
duce software that is unreliable, delivered late and over budget.
I think that we have made tremendous progress since 1968 and that the devel-
opment of software engineering has markedly improved our software. We have a
much better understanding of the activities involved in software development. We
have developed effective methods of software specification, design and implemen-
tation. New notations and tools reduce the effort required to produce large and com-
plex systems.
We know now that there is no single ‘ideal’ approach to software engineering.
The wide diversity of different types of systems and organisations that use these
systems means that we need a diversity of approaches to software development.
However, fundamental notions of process and system organisation underlie all of
these techniques, and these are the essence of software engineering.
1.1 ■ FAQs about software engineering
5
Software engineers can be rightly proud of their achievements. Without com-
plex software we would not have explored space, would not have the Internet and
modern telecommunications, and all forms of travel would be more dangerous and
expensive. Software engineering has contributed a great deal, and I am convinced
that, as the discipline matures, its contributions in the 21st century will be even greater.
1.1 FAQs about software engineering
This section is designed to answer some fundamental questions about software engi-
neering and to give you some impression of my views of the discipline. The for-
mat that I have used here is the ‘FAQ (Frequently Asked Questions) list’. This approach
is commonly used in Internet newsgroups to provide newcomers with answers to
frequently asked questions. I think that it is a very effective way to give a succinct
introduction to the subject of software engineering.
Figure 1.1 summarises the answers to the questions in this section.
1.1.1 What is software?
Many people equate the term software with computer programs. However, I prefer a
broader definition where software is not just the programs but also all associated doc-
umentation and configuration data that is needed to make these programs operate cor-
rectly. A software system usually consists of a number of separate programs,
configuration files, which are used to set up these programs, system documentation,
which describes the structure of the system, and user documentation, which explains
how to use the system and web sites for users to download recent product information.
Software engineers are concerned with developing software products, i.e., soft-
ware which can be sold to a customer. There are two fundamental types of software
product:
1. Generic products These are stand-alone systems that are produced by a devel-
  opment organisation and sold on the open market to any customer who is able
 to buy them. Examples of this type of product include software for PCs such as
databases, word processors, drawing packages and project management tools.
2. Customised (or bespoke) products These are systems which are commissioned
  by a particular customer. A software contractor develops the software especially
 for that customer. Examples of this type of software include control systems
for electronic devices, systems written to support a particular business process
and air traffic control systems.

Download the ebook

Comments