IEEE Press Editorial Board
Ekram Hossain, Editor in Chief
Giancarlo Fortino | Andreas Molisch | Linda Shafer |
David Alan Grier | Saeid Nahavandi | Mohammad Shahidehpour |
Donald Heirman | Ray Perez | Sarah Spurgeon |
Xiaoou Li | Jeffrey Reed | Ahmet Murat Tekalp |
This edition first published 2018
© 2018 the IEEE Computer Society, Inc.
All rights reserved. No part of this publication may be reproduced, stored in a retrieval system, or transmitted, in any form or by any means, electronic, mechanical, photocopying, recording or otherwise, except as permitted by law. Advice on how to obtain permission to reuse material from this title is available at http://www.wiley.com/go/permissions.
The right of Mike Hinchey to be identified as the author of the editorial material in this work has been asserted in accordance with law.
Registered Office
John Wiley & Sons, Inc., 111 River Street, Hoboken, NJ 07030, USA
Editorial Office
111 River Street, Hoboken, NJ 07030, USA
For details of our global editorial offices, customer services, and more information about Wiley products visit us at www.wiley.com.
Wiley also publishes its books in a variety of electronic formats and by print-on-demand. Some content that appears in standard print versions of this book may not be available in other formats.
Limit of Liability/Disclaimer of Warranty
While the publisher and authors have used their best efforts in preparing this work, they make no representations or warranties with respect to the accuracy or completeness of the contents of this work and specifically disclaim all warranties, including without limitation any implied warranties of merchantability or fitness for a particular purpose. No warranty may be created or extended by sales representatives, written sales materials or promotional statements for this work. The fact that an organization, website, or product is referred to in this work as a citation and/or potential source of further information does not mean that the publisher and authors endorse the information or services the organization, website, or product may provide or recommendations it may make. This work is sold with the understanding that the publisher is not engaged in rendering professional services. The advice and strategies contained herein may not be suitable for your situation. You should consult with a specialist where appropriate. Further, readers should be aware that websites listed in this work may have changed or disappeared between when this work was written and when it is read. Neither the publisher nor authors shall be liable for any loss of profit or any other commercial damages, including but not limited to special, incidental, consequential, or other damages.
Library of Congress Cataloging-in-Publication Data
Names: Hinchey, Michael G. (Michael Gerard), 1969- editor.
Title: Software technology : 10 years of innovation in IEEE Computer /edited by Mike Hinchey.
Description: First edition. | Hoboken, NJ : IEEE Computer Society, Inc., 2018. | Includes bibliographical references and index. |
Identifiers: LCCN 2018024346 (print) | LCCN 2018026690 (ebook) | ISBN97 81119174226 (Adobe PDF) | ISBN 9781119174233 (ePub) | ISBN9781119174219 (hardcover)
Subjects: LCSH: Software engineering–History. | IEEE Computer Society–History.
Classification: LCC QA76.758 (ebook) | LCC QA76.758 .S6568 2018 (print) |
DDC 005.1–dc23
LC record available at https://lccn.loc.gov/2018024346
ISBN: 9781119174219
Cover image: © BlackJack3D/Getty Images
Cover design by Wiley
Generally, you cannot claim to fully understand software engineering until you have attended at least 1-day-long planning session. Even then, you may not completely grasp how all the pieces work and interact. Software engineering involves a surprisingly large number of topics, ranging from the purely technical to the unquestionably human, from minute details of code and data to large interactions with other systems, from immediate problems to issues that may not appear for years.
However, if you confine yourself to a single planning meeting, you will never see the dynamic nature of the field, how software engineers learn and grow over the lifetime of a project. Like all engineering disciplines, software engineering is a process of self-education. As engineers work on the problems of building new software systems, they learn the limits of their own ideas and begin the search for more effective ways of creating software.
The great value of this book is that it exposes the educational nature of software engineering. Based on a column that appeared in IEEE Computer magazine, it shows how both researchers and practitioners were striving to learn the nuances of their field and develop ideas that would improve the nature of software. It deals with issues that were prominent during the past decade but at the same time all of its chapters discuss ideas that have been prominent for the entire history of software and software engineering.
The opening chapter explores the idea of a crisis in software development. Historically, software engineers have pointed to a crisis in the mid-1960s as the start of their field. At that time, all software was custom built. All customers employed had to develop software to support their business. This approach was challenged by the third-generation computers, notably the IBM 360 family, which radically expanded the computer market and created an unfulfilled demand for programmers.
The computing field responded to the crisis of the 1960s in two ways. First, it created a software industry that would sell the same piece of software to multiple customers. Second, it created the field of software engineering in order to create software products that could be run at multiple sites by different companies. Any present crisis in software, according to author Brian Fitzgerald, is driven by forces similar to those that drove the 1960s crisis. However, in the second decade of the twenty-first century, the software market is shaped by a sophisticated group of users or “digital natives.” These individuals have born in a technological world and make strong demands on software and on software engineering.
Many of the chapters that follow address the perception that we are unable to produce the amount of software that we need. Cloud computing and Agile development have taken over the position held by the software industry and the original software engineering models in the 1960s. The cloud is an approach that offers computing as a service. More than its 1960s equivalent, time-sharing services, it has the potential of delivering software to a large market and allowing customers to buy exactly the services that they need. However, cloud computing demands new kind of engineering and design, as a single piece of software has to satisfy a large and diverse customer base. So, in this book, we find numerous chapters dealing with the complexity of software and the need to satisfy the needs of sophisticated customers without producing burdensome and inefficient programs. In these chapters, we find that many of the traditional techniques of software engineering need to be adapted to modern computing environments. The tool of software product lines, for example, is a common way of reducing complexity. It allows developers to use a common base of technology while limiting the complexity of each application. At the same time, as the chapter by Hallsteinsen, Hinchey, Park, and Schmid notes, software product lines do not always work in dynamic programming environments where many constraints are not known before runtime. Hence, developers need to recognize that the needs of customers may not be known in advance and that the development team may not always be able to identify those needs that will change.
To create software, either for the cloud or any other environment, software engineers began turning to the ideas of Agile development since 2001, when a group of software engineers drafted the Agile Manifesto to describe a new approach to creating software. The Agile Manifesto drew heavily from the ideas of lean manufacturing, which came to prominence during the 1980s, and from the ideas of Frederick P. Brooks, the original software architect for the IBM 360 operating system. The proponents of agile argue for a close relationship between customer and developer, a short time line for creating new code, a rigorous approach for testing software, and a distinctive minimalism. They claim that software is best produced by small, self-organized teams. The chapters in this book show how thoroughly the ideas of agile have permeated software engineering. The chapter by Margaria and Steffen argues that the core idea of Agile is indeed managerial simplicity.
These chapters are valuable not only from the perspectives of their completeness but rather that they deal with the full scope of cloud-based software or Agile development as well as the other topics that have gained importance over the past decades. They offer some insight into key topics such as formal methods, model-based software engineering, requirements engineering, adaptive systems, data and knowledge engineering, and critical safety engineering. Above all, these chapters show how experienced software engineers have been thinking about problems, how they have been expanding the methods of the field, and how these software engineers are looking toward the future.
Washington, DC | David Alan Grier |
Although not always obvious, software has become a vital part of our life in modern times. Millions of lines of software are used in many diverse areas of our daily lives ranging from agriculture to automotive systems, entertainment, FinTech, and medicine.
Software is also the major source of innovation and advancement in a large number of areas that are currently highly hyped and covered extensively in the media. These include IoT (Internet of Things), Big Data and data science, self-driving cars, AI and machine learning, robotics, and a range of other areas. Software is the enabler in cyber-physical systems, wearable devices, medical devices, smart cities, smart grids, and smart everything.
More and more industries are becoming highly software intensive and software dependent, and this is not restricted to the IT sector. Automotive manufacturers are using software at an unprecedented level. The world's largest bookstore (Amazon) is in fact a software vendor and a major provider of cloud computing services; one of the largest fleets of cars for hire (Uber) is completely dependent on apps to run its business.
Software development is far from being perfect (as covered by a number of chapters in this book), and new technologies and approaches are constantly emerging and evolving to bring new solutions, new techniques, and indeed entirely new business models.
The Software Technology column of IEEE Computer published bimonthly for 10 years produced 60 columns on a broad range of topics in the software arena. Some of the topics covered were short-lived, or were very much the subjective opinion of the authors. Many others, however, have had a long-term effect, or led to further developments and remained as research topics for the authors.
Structured into six parts, this book brings together a collection of chapters based on enhanced, extended, and updated versions of various columns that appeared over the 10 year period. They cover a diverse range of topics, but of course all have a common theme: software technology.
In Chapter 1 Fitzgerald warns that we are approaching a new impasse in software development: The pervasiveness of software requires significant improvements in productivity, but this is at a time when we face a great shortage of appropriately skilled and trained programmers.
Margaria and Steffen in Chapter 2 argue that an approach based on simplicity – “less is more” – is an effective means of supporting innovation. They point to a number of organizations who have learned this lesson and highlight a number of technologies that may facilitate agility in software organizations.
Claes et al. in Chapter 3 consider component-based reuse in the context of the complex software ecosystems that have emerged in recent years. They analyze issues of interdependencies that affect software developers and present two case studies based on popular open-source software package ecosystems.
Beecham et al. in Chapter 4 question whether practitioners ever really read academic research outputs and whether academics care enough about practical application of their results to warrant a change in the way they disseminate their work.
In Chapter 5, Hinchey and Sterritt describe an approach to developing autonomous software systems based on the concept of apoptosis, whereby software components are programmed to self-destruct unless they are given a reprieve.
In Chapter 6, Vassev and Hinchey address the issue of how to express requirements for adaptive and self-adaptive systems, recognizing that additional issues need to be addressed above and beyond nonadaptive systems. In Chapter 7, these authors further describe an approach to achieving awareness in software systems via knowledge representation in KnowLang.
In Chapter 8, Margaria et al. point out that agile approaches to software development mean less documentation and an emphasis on code. However, they highlight that we should focus on the level of models, not on the code.
In Chapter 9, Broy does exactly that, and approaches functional system requirements in a different way.
In Chapter 10, Holzmann gives guidance on developing high-integrity software for critical applications; in Chapter 11, Meyer gives testing tips in software. This chapter originally appeared in IEEE Computer and is simply reprinted here.
Updating their original column 5 years on, Meurice et al. in Chapter 12 describe the state of the art in the evolution of open-source Java projects that make use of relational database technology.
In Chapter 13, Hallsteinsen et al. introduce the field, which brings the concept of software product lines to dynamic, adaptive, and self-adaptive systems, as a means of handling variability. This chapter is reprinted here exactly as it appeared in the original column. Many more papers on dynamic software product lines have been published since then, including those by Hallsteinsen et al., but this chapter is widely cited in the literature.
In Chapter 14, Capilla et al. again address dynamic software product lines in the context of the challenges, benefits, problems, and solutions offered by dynamic variability.
In Chapter 15, Hähnle and Schafer consider the role of formal methods in software product lines; in Chapter 16, Bowen et al. consider the interrelationship of formal methods, agile development methods, security, and software evolution.
While technical aspects of cloud computing have been well-addressed, what makes cloud computing relevant and beneficial to an organization has not been well studied. In Chapter 17, Morgan and Conboy report on a field trial in 10 organizations and what influenced their uptake of cloud computing.
In Chapter 18, Hähnle and Johnsen point to the role of formal methods, executable models, and deployment modeling as means of moving deployment decision up the development chain to meet SLAs at lower costs and provide the client with better control of resource usage.
First and foremost, I would like to acknowledge Science Foundation Ireland for Grant 13/RC/2094 for the preparation of this book.
I am grateful to David Alan Grier, a regular columnist in IEEE Computer and former President of IEEE Computer Society, for writing such a nice introduction to the collection, to all of the authors of the chapters, and all of the authors who contributed to the column over 10 years without whom this book would not have been possible. Many thanks to Mary Hatcher, Victoria Bradshaw, Vishnu Narayanan, and all at Wiley, as well as Abhishek Sarkari at Thomson Digital, for their assistance and support in the preparation of this book.
Doris Carver was the Editor-in-Chief of IEEE Computer who invited me to edit the book in the first place. Subsequent Editors-in-Chief – Ron Vetter, Carl Chang, and Sumi Helai – were also very supportive. The editors at IEEE Computer Society Press – Chris Nelson, Bob Werner, Yu-Tzu Tsai, and Carrie Clark – did a great job of taking often scrappy notes and turning them into a polished column. Managing Editors Judi Prow and Carrie Clark were always great to work with. Dozens of people contributed to making the column, and hence this book a success over 10 years. But it would not have been possible without the late Dr. Scott Hamilton, a great editor and a really great friend.
Sean Baker
Lero – The Irish Software Research Centre
University of Limerick
Limerick
Ireland
Sarah Beecham
Lero – The Irish Software Research Centre
University of Limerick
Limerick
Ireland
Jan Bosch
Department of Computer Science and Engineering
Chalmers University of Technology
Goteborg
Sweden
Jonathan P. Bowen
School of Engineering
London South Bank University
Borough Road
London
UK
Manfred Broy
Institut für Informatik
Technische Universität München
München
Germany
Rafael Capilla
Department of Informatics
Rey Juan Carlos University
Madrid
Spain
Maëlick Claes
COMPLEXYS Research Institute
University of Mons
Belgium
Anthony Cleve
PReCISE Research Center on Information Systems Engineering
Faculty of Computer Science
University of Namur
Namur
Belgium
Kieran Conboy
Lero – The Irish Software Research Centre
NUI Galway
Galway
Ireland
Alexandre Decan
COMPLEXYS Research Institute
Software Engineering Lab
Faculty of Sciences
University of Mons
Mons
Belgium
Brian Fitzgerald
Lero – The Irish Software Research Centre
University of Limerick
Limerick
Ireland
Mathieu Goeminne
COMPLEXYS Research Institute
Software Engineering Lab
Faculty of Sciences
University of Mons
Mons
Belgium
Reiner Hähnle
Department of Computer Science
Software Engineering
Technische Universität Darmstadt
Darmstadt
Germany
Svein Hallsteinsen
SINTEF ICT
Trondheim
Norway
Mike Hinchey
Lero – The Irish Software Research Centre
University of Limerick
Limerick
Ireland
Gerard J. Holzmann
JPL Laboratory for Reliable Software
NASA
Pasadena
CA
USA
Helge Janicke
Software Technology Research Laboratory
De Montfort University
Leicester
UK
Einar Broch Johnsen
University of Oslo
Norway
Anna-Lena Lamprecht
Department of Computer Science and Information Systems
University of Limerick
and Lero – The Irish Software Research Centre
Limerick
Ireland
Tiziana Margaria
Department of Computer Science and Information Systems
University of Limerick
and Lero – The Irish Software Research Centre
Limerick
Ireland
Tom Mens
COMPLEXYS Research Institute
Software Engineering Lab
Faculty of Sciences
University of Mons
Mons
Belgium
Loup Meurice
PReCISE Research Center on Information Systems Engineering
Faculty of Computer Science
University of Namur
Namur
Belgium
Bertrand Meyer
E.T.H. Zürich
Zurich
Switzerland
Lorraine Morgan
Lero – The Irish Software Research Centre
Maynooth University
Maynooth
Ireland
Csaba Nagy
PReCISE Research Center on Information Systems Engineering
Faculty of Computer Science
University of Namur
Namur
Belgium
John Noll
Lero – The Irish Software Research Centre
University of Limerick
Limerick
Ireland
and
University of East London
London
UK
Padraig O'Leary
School of Computer Science
University of Adelaide
Australia
Sooyong Park
Center for Advanced Blockchain Research
Sogang University
Seoul
Republic of Korea
Ita Richardson
Lero – The Irish Software Research Centre
University of Limerick
Limerick
Ireland
Ina Schaefer
Institute of Software Engineering and Vehicle Informatics
Technische Universität Braunschweig
Braunschweig
Germany
Klaus Schmid
Institute of Computer Science
University of Hildesheim
Hildesheim
Germany
Ian Sommerville
School of Computer Science
University of St Andrews
Scotland
UK
Bernhard Steffen
Fakultät für Informatik
TU Dortmund University
Dortmund
Germany
Roy Sterritt
School of Computing
and Computer Science Research Institute
Ulster University
County Antrim
Northern Ireland
Emil Vassev
Lero – The Irish Software Research Centre
University of Limerick
Limerick
Ireland
Martin Ward
Software Technology Research Laboratory
De Montfort University
Leicester
UK
Hussein Zedan
Department of Computer Science
Applied Science University
Al Eker
Bahrain