Page 24 -
P. 24
1.1 Professional software development 7
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 pur-
pose 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 cus-
tom 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 com-
pany 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 soft-
ware’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 obvi-
ously 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.
1.1.1 Software engineering
Software engineering is an engineering discipline that is concerned with all aspects of
software production from the early stages of system specification through to maintain-
ing the system after it has gone into use. In this definition, there are two key phrases:
1. Engineering discipline Engineers make things work. They apply theories, meth-
ods, and tools where these are appropriate. However, they use them selectively