ABSTRACT

In this chapter we discuss future directions for the engineering of software systems which need to accommodate high levels of volatility during their creation and evolution. We revisit some of the reasons why this book was written and identify some of the future work needed to address these concerns. This book includes excellent chapters which review the literature on handling variability across the entire software engineering life cycle. More work needs to be done to better understand the impact of variability on software quality. New verification and validation techniques need to be developed specifically for the creation and evolution of variability-intensive systems. The use of tools and techniques developed for data science, machine learning, and program understanding can be applied to automate several software engineering tasks. The effectiveness of tools and techniques need to be validated before they are recommended for general use. The work on software evolution and refactoring done by search-based and model-driven software engineering investigators may be useful in better understanding and managing software variability. The work done in the artificial intelligence community on handling knowledge modeling and feature interaction might be useful in understanding the architectural design of complex software systems. More empirical work needs to be done if we are to create disciplined approaches to handling variability in the design and support of open service-based and context aware systems.