19.1 Introduction
The objective of this chapter is to
give a flavour of several topics that have become relevant to the
software engineering field in recent times. The software field is
highly innovative and continually evolving, and this has led to the
development of many new technologies and systems. This includes
distributed systems, service-oriented architecture (SOA), software
as a service (SaaS), cloud computing, embedded systems. Software
engineering needs to continually respond to the emerging technology
trends with innovative solutions and methodologies to support the
latest developments.
A distributed system is a collection of
computers that appears to be a single system, and many large
computer systems used today are distributed systems. A distributed
system allows hardware and software resources to be shared, and it
supports concurrency with multiple processors running on different
computers on the network.
SOA is a way of developing a
distributed system consisting of stand-alone web services that may
be executing on distributed computers in different geographical
regions. SaaS allows software to be hosted remotely on a server (or
servers), and the user is able to access the software over the
Internet through a web browser. Cloud computing is a type of
Internet-based computing that provides computing resources and
various other services on demand.
An embedded system
is a computer system within a larger electrical or mechanical
system, and it is embedded
as part of a complete system that includes hardware and mechanical
parts. An embedded system is usually designed to do a specific task
rather than as a general purpose device, and it may be subject to
real-time performance constraints.
Many innovative software engineering
practices have been developed since the birth of software
engineering. We discuss aspect-oriented software engineering
(AOSE), which is based on the principle of separation of concerns.
It states that software should be organized so that each program
element does exactly one thing and one thing only. AOSE has been
applied to requirements engineering, software design and
programming, with the goal is to make it easier to maintain and
reuse the software.
19.2 Distributed Systems
A distributed system
(Fig. 19.1) is a collection of computers,
interconnected via a network, which is capable of collaborating on
a task. It appears to be a single integrated computing system to
the user, and most large computer systems today are distributed
systems. The components (or nodes) of a distributed system are
located on networked computers and interact to achieve a common
goal.
Fig. 19.1
A distributed system
The communication and coordination of
action is via message passing. A distributed system is not
centrally controlled, and as a result, the individual computers may
behave differently at different times, and each computer has a
limited and incomplete view of the system.
A distributed system allows hardware
and software resources (e.g. printers and files) to be shared, and
information may be shared between people and processes located in
distant geographical regions. It supports concurrency with multiple
processors running on different computers on the network. The
processors in a distributed system run concurrently in parallel,
and each computer is running on its own local operating
system.
A distributed system is designed to
tolerate failures on individual computers, and the system is
designed to be reliable and to continue service when a node fails.
Another words, a distributed system needs to be designed to be
fault tolerant, and it must remain available even if there are
hardware, software or network failures. This requires recovery and
redundancy features such as the duplication of information on
several computers to be built in. The fault-tolerant design allows
continuity of service (possibly a degraded service) when failures
occur.
The design of distributed systems is
more complex than a centralized system, as there may be complex
interactions between its components and the system infrastructure.
The performance of the distributed system is dependent on the
network bandwidth and load, as well as on the speed of the
computers that are on the network. This differs from a centralized
system, which is dependent on the speed of a single processor. The
performance and response time of a distributed system may vary (and
be unpredictable) depending on the network load and network
bandwidth, and so the response time may vary from user to
user.
The nodes in a distributed system are
often independent systems with no central control, and the network
connecting the nodes is a complex system in its own right, which is
not controlled by the systems using the network. There are many
applications of distributed system in the telecommunication domain,
such as fixed line, mobile and wireless networks, company
intranets, the Internet and the World Wide Web. Next, we describe
SOA and how it is used in distributed systems.
19.3 Service-Oriented Architecture
The objective of this section is to
give a brief introduction to SOA, which is a way of developing a
distributed system using stand-alone web services executing on
distributed computers in different geographical regions. It is an
approach to create an architecture based upon the use of services,
where a service may carry out some small functions such as
producing data or validating a customer.
A web service is a computational or
information resource that may be used by another program, and it
allows a service provider to provide a service to an application
(service requestor) that
wishes to use the service. The web service may be accessed remotely
and is acted upon independently. The service provider is responsible for
designing and implementing the services and specifying the
interface to the service.
The service is platform and
implementation language independent, and it is designed and
implemented by the service provider with the interface to the
service specified. Information about the service is published in an
accessible registry, and service clients (requestor) are able to
locate the service provider and link their application with the
specific service and communicate with it. The idea of a SOA is
illustrated in Fig. 19.2.
Fig. 19.2
Service-oriented architecture
There are a number of standards that
support communication between services, as well as standards for
service interface definition. These are discussed in
[1].
19.4 Software as a Service
The idea of SaaS is that the software
may be hosted remotely on a server (or servers), and access
provided to it over the Internet through a web browser. The
functionality is provided at the remote server with client access
provided through the web browser.
The cost model for traditional
software is made up of an upfront cost for a perpetual licence and
optional ongoing support fees. SaaS is a software licensing and
delivery model where the software is licensed to the user on a
subscription basis. The software provider owns and provides the
service, whereas the software organization that is using the
service will pay a subscription for its use. Occasionally, the
software is free to use with funding for the service provided
through the use of advertisements, or there may be a free basic
service provided with charges applied for the more advanced
version.
A key benefit of SaaS is that the cost
of hosting and management of the service is transferred to the
service provider, with the provider responsible for resolving
defects and installing upgrades of the software. Consequently, the
initial set-up costs for users is significantly less than for
traditional software.
The disadvantages to the user are that
data has to be transferred at the speed of the network, and the
transfer of a large amount of data may take a lot of time. The
subscription charges may be monthly or annual, with extra charges
possibly due depending on the amount of data transferred.
19.5 Cloud Computing
Cloud computing is a type of
Internet-based computing that provides computing processing
resources on demand. It provides access to a shared pool of
configurable computing resources such as networks, servers and
applications on demand, and such resources may be provided and
released with minimal effort. It provides users and organizations
with capabilities to store and process their data in third-party
data centres that may be in distant geographical locations.
A key advantage of cloud computing is
that it allows companies to avoid large upfront infrastructure
costs such as purchasing hardware and servers, and it also allows
organizations to focus on their core business. Further, it allows
companies to get their applications operational in a shorter period
of time, as well as providing an efficient way for companies to
adjust resources to deal with fluctuating demand. Companies can
scale up as computing needs increase and scale down as demand
decreases. Cloud providers generally use a “pay as you go” model
(Fig. 19.3).
Fig. 19.3
Cloud computing. Creative commons
Among the well-known cloud computing
platforms are Amazon’s Elastic Compute Cloud, Microsoft’s Azure and
Oracle’s cloud. The main enabling technology for cloud computing is
virtualization, which separates a physical computing device into
one or more virtual devices. Each of the virtual devices may be
easily used and managed to perform computing tasks, and this leads
to the creation of a scalable system of multiple independent
computing devices that allows the idle physical resources to be
allocated and used more effectively.
Cloud computing providers offer their
services according to different models. These include
infrastructure as a service (IaaS) where computing infrastructure
such as virtual machines and other resources are provided as a
service to subscribers. Platform as a service (PaaS) provides
capability to the consumer to deploy infrastructure related or
application related that are supported by the provider onto the
cloud. PaaS vendors offer a development platform to application
developers. SaaS provides capability to the consumer to use the
provider’s applications running on a cloud infrastructure through a
web browser or a program interface. Cloud providers manage the
infrastructure and platforms that run the applications.
19.6 Embedded Systems
An embedded system is a computer
system within a larger electrical or mechanical system that is
usually subject to real-time constraints. The computer system is
embedded as part of a
complete system that includes hardware and mechanical parts.
Embedded systems vary from personal devices such as MP3 players and
mobile phones, to household devices such as dishwashers and
cookers, to the automotive sector and to traffic lights. An
embedded system is usually designed to do a specific task rather
than as a general purpose device, and it may be subject to
real-time performance constraints (Fig. 19.4).
Fig. 19.4
Example of an embedded system
Some embedded
systems are termed reactive
systems as they react to events that occur in their
environment, and so their design is often based on a
stimulus–response model. An event (or condition) that occurs in the
system environment that causes the system to respond in some way is
termed a stimulus, and a response is a signal sent by the software
to its environment. For example, in the automotive sector, there
are sensors in a car that detect when the temperature in the engine
goes too high, and the response may be an audio alarm and visual
warning to the driver.
One of the earliest embedded systems
was the guidance computer developed for the Minuteman II missile
[2] in the mid-1960s. Embedded
systems are ubiquitous today, and they control many devices that
are in common use such as microwave ovens, washing machines, coffee
makers, clocks, DVD players, mobile phones and televisions.
Embedded systems became more popular
following the introduction of the microprocessor in the early
1970s, as cheap microprocessors were able to fulfil the same role
as a large number of components. The vast majority of
microprocessors produced today are used as components of embedded
systems.
19.7 Software Engineering and Innovation
The software field is highly
innovative, and many new technologies and systems have been
developed. We have discussed a sample of these innovations in this
chapter, and the software engineering field needs to continually
respond to these emerging technology trends with innovative
solutions and methodologies to support the latest
developments.
There have been many innovations in
software engineering since its birth in the late 1960s. These
include the waterfall and spiral lifecycle models, the Rational
Unified Process and iterative development, the Agile methodology,
software inspections and reviews, software testing and test-driven
development, information hiding, object-oriented design and
development, formal methods and UML, software process improvement,
the CMM, CMMI and ISO SPICE.
There is also the need to focus on
best practice in software engineering, as well as emerging
technologies from various research programs. Piloting or technology
transfer of innovative technology is an important part of
continuous improvement. We discuss AOSE to illustrate innovation in
software engineering.
19.7.1 Aspect-Oriented Software Engineering
The objective of this section is to
give a brief introduction to AOSE, which is a recent innovation in
software engineering based on the principle of separation of
concerns. This principle states that software should be organized
so that each program element does exactly one thing and one thing
only. It is an important way to think about and structure software
systems and makes it easier to maintain and reuse the software.
AOSE may be applied to requirements engineering, software design
and programming.
Concerns reflect system requirements,
and examples of concerns are specific functionality, performance
requirements, security requirements and so on. In most systems, the
mapping between the requirements (concerns) and components is not
one to one, and this means that the implementation of a change to
the requirements may involve changes to more than one component.
AOSE is an approach that aims to address this problem, and it is
based on the idea of an aspect, which is a program abstraction that
encapsulates functionality based on the separation of concerns.
Programs that have been designed with the principle of separation
of concerns have clear traceability to the requirements.
The principle of separation of
concerns is a key principle in software engineering and requires
that the software be organized in such a way that each element in
the program (e.g. class and procedure) does exactly one thing.
Another words, it is a design principle that separates a computer
program into distinct sections such that each section addresses a
separate concern.
A modular program implements the
principle of separation of concerns through information hiding,
where access to the module is through a well-defined interface with
the information inside the module hidden. The value of the
principle of separation of concerns is that individual sections of
programs may be reused or modified independently without needing to
be familiar with or modifying other sections of the program.
19.8 Review Questions
- 1.
What is a distributed system?
- 2.
What is service-oriented architecture?
- 3.
What is software as a service?
- 4.
What is cloud computing?
- 5.
What is embedded software engineering?
- 6.
Describe the various models that are used in cloud computing.
- 7.
What is aspect-oriented software engineering?
19.9 Summary
This chapter gave a brief introduction
to distributed systems, SOA, SaaS, cloud computing, embedded
systems and AOSE.
A distributed system is a collection
of interconnected computers that appears to be a single system. SOA
is a way of developing a distributed system consisting of
stand-alone web service executing on distributed computers in
different geographical regions. SaaS allows software to be hosted
remotely on a server (or servers), and access is provided to it
over the Internet through a web browser. Cloud computing is a type
of Internet-based computing that provides computing resources and
various other services on demand.
An embedded system is a computer
system within a larger electrical or mechanical system, and it is
usually designed to do a specific task rather than as a general
purpose device, and it may be subject to real-time performance
constraints.
AOSE is based on the principle of
separation of concerns, and it has been applied to requirements
engineering, software design and programming, with the goal is to
make it easier to maintain and reuse the software.
References
1.
I. Sommerville, Software Engineering, 9th edn.
(Pearson, Boston, 2011)
2.
G. O’Regan, Introduction to the History of
Computing (Springer, Switzerland, 2016)