|Title||Towards Evidence-Based Recommendations to Guide the Evolution of Component-Based Product Families|
|Afilliation||Software Engineering, The Certus Centre (SFI), Software Engineering|
|Publication Type||Journal Article|
|Year of Publication||2015|
|Journal||Science of Computer Programming|
Many large-scale software-intensive systems are produced as instances of component-based product families, a well-known tactic to develop a portfolio of software products based on a collection of shared assets. However, sharing components between software products introduces dependencies that complicate maintenance and evolution: changes made in a component to address an issue in one product may have undesirable effects on other products in which the same component is used. Therefore, developers not only need to understand how a proposed change will impact the component and product at hand; they also need to understand how it affects the whole product family, including systems that are already deployed. Given that these systems contain thousands of components, it is no surprise that it is hard to reason about the impact of a change on a single product, let alone assess the effects of more complex evolution scenarios on a complete product family. Conventional impact analysis techniques do not suffice for large-scale software-intensive systems and highly populated product families, and software engineers need better support to conduct these tasks. Finally, for an accountable comparison of alternative evolution scenarios, a measure is needed to quantify the scale of impact for each strategy. This is especially important in our context of safety-critical systems since these need to undergo (costly) re-certification after a change. Cost-effective recommendations should prioritize evolution scenarios that minimize impact scale, and thereby minimize re-certification efforts. This paper explores how reverse engineering and program comprehension techniques can be used to develop novel recommendation technology that uses concrete evidence gathered from software artifacts to support engineers with the evolution of families of complex, safety-critical, software-intensive systems. We give an overview of the state of the art in this area, discuss some of the research directions that have been considered up to now and, identify challenges, and pose a number of research questions to advance the state of the art.