A framework for partial data flow analysis

Although data flow analysis was first developed for use in compilers, its usefulness is now recognized in many software tools. Because of its compiler origins, the computation of data flow for software tools is based on the traditional exhaustive data flow framework. However, although this framework is useful for computing data flow for compilers, it is not the most appropriate for software tools, particularly those used in the maintenance stage. In maintenance, testing and debugging is typically performed in response to program changes. As such, the data flow required is demand driven from the changed program points. Rather than compute the data flow exhaustively using the traditional data flow frame work, we present a framework for partial analysis. The framework includes a specification language enabling the specification of the demand driven data flow desired by a user. From the specification, a partial analysis algorithm is automatically generated using an L-attributed definition for the grammar of the specification language. A specification of a demand driven data flow problem expresses characteristics that define the kind of traversal needed in the partial analysis and the type of dependencies to be captured. The partial analyses algorithms are efficient in that only as much of the program is analyzed as actually needed, thus reducing the time and space requirements over exhaustively computing the data flow information. The algorithms are shown to be useful when debugging and testing programs during maintenance.<<ETX>>

[1]  Joe D. Warren,et al.  The program dependence graph and its use in optimization , 1987, TOPL.

[2]  Rajiv Gupta Generalized dominators and post-dominators , 1992, POPL '92.

[3]  Mary Lou Soffa,et al.  An Incremental Version of Iterative Data Flow Analysis , 1989, IEEE Trans. Software Eng..

[4]  Thomas W. Reps,et al.  Incremental Context-Dependent Analysis for Language-Based Editors , 1983, TOPL.

[5]  Elaine J. Weyuker,et al.  Selecting Software Test Data Using Data Flow Information , 1985, IEEE Transactions on Software Engineering.

[6]  Leon J. Osterweil,et al.  Cecil: A Sequencing Constraint Language for Automatic Static Analysis Generation , 1990, IEEE Trans. Software Eng..

[7]  Mary Lou Soffa,et al.  Interprocedual data flow testing , 1989 .

[8]  Barbara G. Ryder,et al.  Incremental data-flow analysis algorithms , 1988, TOPL.

[9]  Charles N. Fischer,et al.  SPARE: A Development Environment For Program Analysis Algorithms , 1992, IEEE Trans. Software Eng..

[10]  Barry K. Rosen Linear cost is sometimes quadratic , 1981, POPL '81.

[11]  Steven W. K. Tjiang,et al.  Sharlit—a tool for building optimizers , 1992, PLDI '92.

[12]  Rajiv Gupta,et al.  Employing static information in the generation of test cases , 1993, Softw. Test. Verification Reliab..

[13]  Mary Lou Soffa,et al.  Concurrency analysis in the presence of procedures using a data-flow framework , 1991, TAV4.

[14]  Leon J. Osterweil,et al.  Interprocedural static analysis of sequencing constraints , 1992, TSEM.

[15]  David A. Padua,et al.  Advanced compiler optimizations for supercomputers , 1986, CACM.

[16]  David W. Binkley,et al.  Interprocedural slicing using dependence graphs , 1990, TOPL.

[17]  Thomas W. Reps,et al.  Integrating noninterfering versions of programs , 1989, TOPL.

[18]  Jaspal Subhlok,et al.  Static analysis of low-level synchronization , 1988, PADD '88.

[19]  Rajiv Gupta,et al.  An approach to regression testing using slicing , 1992, Proceedings Conference on Software Maintenance 1992.

[20]  David W. Binkley,et al.  Program slicing , 2008, 2008 Frontiers of Software Maintenance.

[21]  F. Kenneth Zadeck,et al.  Incremental data flow analysis in a structured program editor , 1984, SIGPLAN '84.