ABSTRACT

Software is nowadays a critical asset for many organizations: many aspects of our daily lives indeed depend on complex software-intensive systems, from banking and communications to transportation and medicine. Constant market evolution triggered an exponential growth in the complexity and variability of modern software solutions. Due to the increasing demand of highly customized products and services, software organizations now have to produce many complex variants accounting not only for differences in software functionalities but also for differences in hardware (e.g., graphic cards, display capacities, and input devices), operating systems, localization, user preferences, look and feel, and so forth. Of course, since they do not want to develop each variant from scratch and independently, they have a strong motivation to investigate new ways of reusing common parts to create new software systems from existing software assets.