  To develop, analyze, and evolve today's highly configurable software systems,
developers need deep knowledge of a system's configuration options, e.g., how
options need to be set to reach certain locations, what configurations to use
for testing, etc. Today, acquiring this detailed information requires manual
effort that is difficult, expensive, and error prone. In this paper, we propose
iGen, a novel, lightweight dynamic analysis technique that automatically
discovers a program's \emph{interactions}---expressive logical formulae that
give developers rich and detailed information about how a system's
configuration option settings map to particular code coverage. iGen employs an
iterative algorithm that runs a system under a small set of configurations,
capturing coverage data; processes the coverage data to infer potential
interactions; and then generates new configurations to further refine
interactions in the next iteration. We evaluated iGen on 29 programs spanning
five languages; the breadth of this study would be unachievable using prior
interaction inference tools. Our results show that iGen finds precise
interactions based on a very small fraction of the number of possible
configurations. Moreover, iGen's results confirm several earlier hypotheses
about typical interaction distributions and structures.
