img

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

Software Technology

10 Years of Innovation in IEEE Computer

Edited by Mike Hinchey

Wiley Logo

Foreword

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

Preface

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.

Part I: The Software Landscape

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.

Part II: Autonomous Software Systems

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.

Part III: Software Development and Evolution

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.

Part IV: Software Product Lines and Variability

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.

Part V: Formal Methods

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.

Part VI: Cloud Computing

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.

Acknowledgments

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.

List of Contributors

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

Part I
The Software Landscape