© Springer International Publishing AG 2017
Gerard O'ReganConcise Guide to Software EngineeringUndergraduate Topics in Computer Science10.1007/978-3-319-57750-0_19

19. A Miscellany of Innovation

Gerard O’Regan 
(1)
SQC Consulting, Cork, Ireland
 
 
Gerard O’Regan
Abstract
This chapter discusses innovation in the software field including miscellaneous topics such as distributed systems, service-oriented architecture (SOA), software as a service (SaaS), cloud computing and embedded systems. We discuss the need for innovation in software engineering and discuss some recent innovations including aspect-oriented software engineering (AOSE).
Keywords
Distributed systemService-oriented architectureSoftware as a serviceCloud computingAspect-oriented software engineeringEmbedded systemsInnovation in software engineering

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.
A447511_1_En_19_Fig1_HTML.gif
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.
A447511_1_En_19_Fig2_HTML.gif
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).
A447511_1_En_19_Fig3_HTML.gif
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).
A447511_1_En_19_Fig4_HTML.gif
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. 1.
    What is a distributed system?
     
  2. 2.
    What is service-oriented architecture?
     
  3. 3.
    What is software as a service?
     
  4. 4.
    What is cloud computing?
     
  5. 5.
    What is embedded software engineering?
     
  6. 6.
    Describe the various models that are used in cloud computing.
     
  7. 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)