  Features in product lines and highly configurable systems can interact in
ways that are contrary to developers' intent. Current methods to identify such
unanticipated feature interactions are costly and inadequate. To address this
problem we propose a new approach to learn feature interactions, both in those
product lines where constraints on feature combinations are specified and in
feature-rich configurable systems where such specifications often are not
available. The contribution of the paper is to use program analysis to extract
feature-relevant learning models from the source code in order to detect
unwanted feature interactions. Where specifications of feature constraints are
unavailable, our approach infers the constraints using feature-related
data-flow dependency information. Evaluation in experiments on three software
product line benchmarks and a highly configurable system shows that this
approach is fast and effective. The contribution is to support developers by
automatically detecting feature combinations in a new product or version that
can interact in unwanted or unrecognized ways. This enables better
understanding of latent interactions and identifies software components that
should be tested together because their features interact in some
configurations.
