Date of this Version
Program analysis techniques analyze software systems to collect, deduce, or infer information about them, which can then be used in software-engineering related tasks. Recent research has suggested that a new form of program analysis technique might be created by incorporating characteristics of experimentation into analyses. This paper reports the results of research exploring this suggestion. Building on background in classical experimentation, we provide descriptive and operational definitions of experimental program analysis, illustrate them by examples, and describe several differences between experimental program analysis and classical experimentation. We present three studies that show how the use of the paradigm can help researchers identify limitations of analysis techniques, improve existing experimental program analysis techniques, and create new experimental program analysis techniques by adapting existing non-experimental techniques.