This research extends work in the area of Generative Programming, which explains how programs in a domain are designed from features. A generative programming model is both constructive and predictive because it tells us how to synthesize programs in a domain with particular properties. A program's design can be specified as a base program plus a set of features, which are units of program functionality. Programs consisting of features can be formalized mathematically as an algebra with suitable composition operators. Research in generative programming shows that evaluation of algebraic expressions synthesizes the target program, and expression optimization optimizes the program's design.
Feature interaction occurs when one or more features modify or influence another feature. We focus on interactions that are static and structural: how a feature influences (or changes) the source code of another feature. Our research contributes to a Science of Design by showing how feature interactions obey algebraic laws that lead to highly structured programs that are amenable to synthesis, optimization, and evolution. We will demonstrate practical applications of our work: (1) refactoring Java legacy applications into feature-based designs (so that features can be more easily added and removed), and (2) realizing a form of on-demand modularization, where a query specifies a particular concern and our theory tells us how to extract software that satisfies that query.