On opportunistic software reuse

  • PDF / 641,194 Bytes
  • 24 Pages / 439.37 x 666.142 pts Page_size
  • 14 Downloads / 243 Views

DOWNLOAD

REPORT


On opportunistic software reuse Niko Mäkitalo1 · Antero Taivalsaari2 · Arto Kiviluoto1 · Tommi Mikkonen1 · Rafael Capilla3 Received: 27 February 2020 / Accepted: 2 July 2020 © The Author(s) 2020

Abstract The availability of open source assets for almost all imaginable domains has led the software industry to opportunistic design—an approach in which people develop new software systems in an ad hoc fashion by reusing and combining components that were not designed to be used together. In this paper we investigate this emerging approach. We demonstrate the approach with an industrial example in which Node.js modules and various subsystems are used in an opportunistic way. Furthermore, to study opportunistic reuse as a phenomenon, we present the results of three contextual interviews and a survey with reuse practitioners to understand to what extent opportunistic reuse offers improvements over traditional systematic reuse approaches. Keywords Software reuse · Software engineering · Opportunistic design · Opportunistic reuse · Software architecture · Code snippet Mathematics Subject Classification 68-04

B

Tommi Mikkonen [email protected] Niko Mäkitalo [email protected] Antero Taivalsaari [email protected] Arto Kiviluoto [email protected] Rafael Capilla [email protected]

1

Department of Computer Science, University of Helsinki, Helsinki, Finland

2

Nokia Bell Labs, Tampere, Finland

3

Department of Computer Science, Rey Juan Carlos University, Madrid, Spain

123

N. Mäkitalo et al.

1 Introduction Ever since software reuse became a software engineering discipline in the early 1970s, there has been a call for systematic software reuse practices. The key idea in reuse is that parts of a computer program written at one time can be used in the construction of other programs later [15]. Reusability is typically considered as one of the key “ilities” or major software quality factors [15]. However, it has turned out that for various reasons achieving the benefits of reuse and reusable software is difficult [40]. Today, software reuse takes place in many ways. The evolution of software artifacts from mere source code to modern forms of reuse as services and microservices [4] has changed the way developers integrate functionality into their systems. Moreover, the systematization offered by software product line engineering practices for building and customize reusable core assets into a common product line architecture [9] is a popular development strategy nowadays. However, the current popularity of today’s open source repositories has brought a shift in which developers search and reuse code modules seemingly without any systematic reuse method and in which software designs are created and modified opportunistically based on available third-party components. Opportunistic design is an approach in which people develop new software systems by reusing and combining components that were not designed to be used together [18, 34]. This emergent pattern places focus