During the past few years, research in agile product line engineering has been gaining more popularity, driven by the much needed ability to combine the flexibility and high responsiveness of agile methods with the economic advantages of reuse and mass customization offered by software product lines. This dissertation presents a novel framework to manage variability in software product lines in an agile context.
By leveraging agile practices such as iterative and incremental development, test-driven development, and refactoring, this dissertation shows that a reactive approach to variability management is indeed feasible. The findings of this research demonstrate that acceptance tests can play an important role in variability elicitation; but they may not be sufficient to deduce implicit constraints from requirements. This issue is addressed by using executable acceptance tests alongside feature models in order to uncover implicit constraints and hidden dependencies. The dissertation also discusses the role of executable acceptance tests in supporting the evolution of variability by providing instantaneous feedback on the impact of adding or removing features or variants. For requirements that cannot be adequately described using acceptance tests such as usability and portability requirements, the dissertation demonstrates how such requirements can be treated using a lightweight and reactive approach.
At the implementation level, the results of this research show that realizing variability can occur in a reactive manner provided that proper refactoring and testing practices are followed. The results also illustrate how the process can be made more systematic by using tests as a common starting point to inject variability on-demand. The efficiency of the process can be improved by providing automated tool support. Once variability has been realized in the system, the dissertation discusses how individual products can be built using the derivation technique or the instantiation technique.
Finally, the dissertation presents important findings on the issues and challenges likely to arise when adopting a new software product line framework in an industrial context. The findings reveal a number of technical challenges, but also bring to surface non-technical issues related to the business needs, the organizational context, and a raft of human factors.