We can’t run the modern world without software. National infrastructures and utilities are controlled by computer-based systems and most electrical products include a
computer and controlling software. Industrial manufacturing and distribution is
completely computerized, as is the financial system. Entertainment, including the
music industry, computer games, and film and television, is software intensive.
Therefore, software engineering is essential for the functioning of national and international societies.
Software systems are abstract and intangible. They are not constrained by the
properties of materials, governed by physical laws, or by manufacturing processes.
This simplifies software engineering, as there are no natural limits to the potential of
software. However, because of the lack of physical constraints, software systems can
quickly become extremely complex, difficult to understand, and expensive to change.
There are many different types of software systems, from simple embedded systems to complex, worldwide information systems. It is pointless to look for universal
notations, methods, or techniques for software engineering because different types
of software require different approaches. Developing an organizational information
system is completely different from developing a controller for a scientific instrument. Neither of these systems has much in common with a graphics-intensive computer game. All of these applications need software engineering; they do not all need
the same software engineering techniques.
There are still many reports of software projects going wrong and ‘software failures’.
Software engineering is criticized as inadequate for modern software development.
However, in my view, many of these so-called software failures are a consequence of
1. Increasing demands As new software engineering techniques help us to build
larger, more complex systems, the demands change. Systems have to be built
and delivered more quickly; larger, even more complex systems are required;
systems have to have new capabilities that were previously thought to be impossible. Existing software engineering methods cannot cope and new software
engineering techniques have to be developed to meet new these new demands.
2. Low expectations It is relatively easy to write computer programs without using
software engineering methods and techniques. Many companies have drifted
into software development as their products and services have evolved. They do
not use software engineering methods in their everyday work. Consequently,
their software is often more expensive and less reliable than it should be. We
need better software engineering education and training to address this problem.
Software engineers can be rightly proud of their achievements. Of course we still
have problems developing complex software but, without software engineering, we
would not have explored space, would not have the Internet or modern telecommunications. All forms of travel would be more dangerous and expensive. Software engineering has contributed a great deal and I am convinced that its contributions in the
21st century will be even greater.
History of software engineering
The notion of ‘software engineering’ was first proposed in 1968 at a conference held to discuss what was then
called the ‘software crisis’ (Naur and Randell, 1969). It became clear that individual approaches to program
development did not scale up to large and complex software systems. These were unreliable, cost more than
expected, and were delivered late.
Throughout the 1970s and 1980s, a variety of new software engineering techniques and methods were
developed, such as structured programming, information hiding and object-oriented development. Tools and
standard notations were developed and are now extensively used.
Professional software development
Lots of people write programs. People in business write spreadsheet programs to
simplify their jobs, scientists and engineers write programs to process their experimental data, and hobbyists write programs for their own interest and enjoyment.
However, the vast majority of software development is a professional activity where
software is developed for specific business purposes, for inclusion in other devices,
or as software products such as information systems, CAD systems, etc. Professional
software, intended for use by someone apart from its developer, is usually developed
by teams rather than individuals. It is maintained and changed throughout its life.
Software engineering is intended to support professional software development,
rather than individual programming. It includes techniques that support program
specification, design, and evolution, none of which are normally relevant for personal software development. To help you to get a broad view of what software engineering is about, I have summarized some frequently asked questions in Figure 1.1.
Many people think that software is simply another word for computer programs.
However, when we are talking about software engineering, software is not just the
programs themselves but also all associated documentation and configuration data
that is required to make these programs operate correctly. A professionally developed software system is often more than a single program. The system usually consists of a number of separate programs and configuration files that are used to set up
these programs. It may include system documentation, which describes the structure
of the system; user documentation, which explains how to use the system, and websites for users to download recent product information.
This is one of the important differences between professional and amateur software development. If you are writing a program for yourself, no one else will use it
and you don’t have to worry about writing program guides, documenting the program design, etc. However, if you are writing software that other people will use and
other engineers will change then you usually have to provide additional information
as well as the code of the program.
What is software?
Computer programs and associated documentation.
Software products may be developed for a particular
customer or may be developed for a general market.
What are the attributes of good software?
Good software should deliver the required
functionality and performance to the user and should
be maintainable, dependable, and usable.
What is software engineering?
Software engineering is an engineering discipline that
is concerned with all aspects of software production.
What are the fundamental software engineering
Software specification, software development,
software validation, and software evolution.
What is the difference between software
engineering and computer science?
Computer science focuses on theory and
fundamentals; software engineering is concerned
with the practicalities of developing and delivering
What is the difference between software
engineering and system engineering?
System engineering is concerned with all aspects of
computer-based systems development including
hardware, software, and process engineering. Software
engineering is part of this more general process.
What are the key challenges facing software
Coping with increasing diversity, demands for reduced
delivery times, and developing trustworthy software.
What are the costs of software engineering? Roughly 60% of software costs are development
costs; 40% are testing costs. For custom software,
evolution costs often exceed development costs.
What are the best software engineering techniques
While all software projects have to be professionally
managed and developed, different techniques are
appropriate for different types of system. For example,
games should always be developed using a series of
prototypes whereas safety critical control systems
require a complete and analyzable specification to be
developed. You can’t, therefore, say that one method
is better than another.
What differences has the Web made to software
The Web has led to the availability of software
services and the possibility of developing highly
distributed service-based systems. Web-based
systems development has led to important advances
in programming languages and software reuse.
Software engineers are concerned with developing software products (i.e., software which can be sold to a customer). There are two kinds of software products:
1. Generic products These are stand-alone systems that are produced by a development organization 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.
It also includes so-called vertical applications designed for some specific purpose such as library information systems, accounting systems, or systems for
maintaining dental records.
2. Customized (or bespoke) products These are systems that 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.
An important difference between these types of software is that, in generic products,
the organization that develops the software controls the software specification. For custom products, the specification is usually developed and controlled by the organization
that is buying the software. The software developers must work to that specification.
However, the distinction between these system product types is becoming
increasingly blurred. More and more systems are now being built with a generic
product as a base, which is then adapted to suit the requirements of a customer.
Enterprise Resource Planning (ERP) systems, such as the SAP system, are the best
examples of this approach. Here, a large and complex system is adapted for a company by incorporating information about business rules and processes, reports
required, and so on.
When we talk about the quality of professional software, we have to take into
account that the software is used and changed by people apart from its developers.
Quality is therefore not just concerned with what the software does. Rather, it has to
include the software’s behavior while it is executing and the structure and organization
of the system programs and associated documentation. This is reflected in so-called
quality or non-functional software attributes. Examples of these attributes are the software’s response time to a user query and the understandability of the program code.
The specific set of attributes that you might expect from a software system obviously depends on its application. Therefore, a banking system must be secure, an
interactive game must be responsive, a telephone switching system must be reliable,
and so on. These can be generalized into the set of attributes shown in Figure 1.2,
which I believe are the essential characteristics of a professional software system.
Download the pdf to get all the unit wise notes.
Try to save your valueable time!