MOAD: Modeling Observation-Based Approximate Dependency

While dependency analysis is foundational to many applications of program analysis, the static nature of many existing techniques presents challenges such as limited scalability and inability to cope with multi-lingual systems. We present a novel dependency analysis technique that aims to approximate program dependency from a relatively small number of perturbed executions. Our technique, called MOAD (Modeling Observation-based Approximate Dependency), reformulates program dependency as the likelihood that one program element is dependent on another, instead of a more classical Boolean relationship. MOAD generates a set of program variants by deleting parts of the source code, and executes them while observing the impacts of the deletions on various program points. From these observations, MOAD infers a model of program dependency that captures the dependency relationship between the modification and observation points. While MOAD is a purely dynamic dependency analysis technique similar to Observation Based Slicing (ORBS), it does not require iterative deletions. Rather, MOAD makes a much smaller number of multiple, independent observations in parallel and infers dependency relationships for multiple program elements simultaneously, significantly reducing the cost of dynamic dependency analysis. We evaluate MOAD by instantiating program slices from the obtained probabilistic dependency model. Compared to ORBS, MOAD's model construction requires only 18.7% of the observations used by ORBS, while its slices are only 16% larger than the corresponding ORBS slice, on average.

[1]  Mark Harman,et al.  ORBS and the limits of static slicing , 2015, 2015 IEEE 15th International Working Conference on Source Code Analysis and Manipulation (SCAM).

[2]  Wang Yu,et al.  State dependency probabilistic model for fault localization , 2015, Inf. Softw. Technol..

[3]  Mark Harman,et al.  ORBS: language-independent program slicing , 2014, SIGSOFT FSE.

[4]  Václav Rajlich,et al.  Hidden dependencies in program comprehension and change propagation , 2001, Proceedings 9th International Workshop on Program Comprehension. IWPC 2001.

[5]  Mark David Weiser,et al.  Program slices: formal, psychological, and practical investigations of an automatic program abstraction method , 1979 .

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

[7]  Raúl A. Santelices,et al.  Probabilistic Slicing for Predictive Impact Analysis , 2010 .

[8]  P. E. Livadas,et al.  Program dependence analysis , 1992, Proceedings Conference on Software Maintenance 1992.

[9]  Vikram S. Adve,et al.  LLVM: a compilation framework for lifelong program analysis & transformation , 2004, International Symposium on Code Generation and Optimization, 2004. CGO 2004..

[10]  Shin Yoo,et al.  Observational slicing based on visual semantics , 2017, J. Syst. Softw..

[11]  David W. Binkley,et al.  PORBS: A parallel observation-based slicer , 2016, 2016 IEEE 24th International Conference on Program Comprehension (ICPC).

[12]  Jonathan I. Maletic,et al.  srcML: An Infrastructure for the Exploration, Analysis, and Manipulation of Source Code: A Tool Demonstration , 2013, 2013 IEEE International Conference on Software Maintenance.

[13]  John W. Tukey,et al.  Exploratory Data Analysis. , 1979 .

[14]  Andy Podgurski,et al.  The Probabilistic Program Dependence Graph and Its Application to Fault Diagnosis , 2010, IEEE Trans. Software Eng..

[15]  Andreas Krause,et al.  Active Learning for Multi-Objective Optimization , 2013, ICML.

[16]  Mark Weiser,et al.  Program Slicing , 1981, IEEE Transactions on Software Engineering.

[17]  Ran Ettinger,et al.  Untangling: a slice extraction refactoring , 2004, AOSD '04.

[18]  K. Chaloner,et al.  Bayesian Experimental Design: A Review , 1995 .

[19]  David W. Binkley,et al.  Semantics Guided Regression Test Cost Reduction , 1997, IEEE Trans. Software Eng..

[20]  Gregg Rothermel,et al.  Supporting Controlled Experimentation with Testing Techniques: An Infrastructure and its Potential Impact , 2005, Empirical Software Engineering.

[21]  Frank Tip,et al.  Platform-Independent Dynamic Taint Analysis for JavaScript , 2020, IEEE Transactions on Software Engineering.

[22]  Keith Brian Gallagher,et al.  Using Program Slicing in Software Maintenance , 1991, IEEE Trans. Software Eng..

[23]  Carl E. Rasmussen,et al.  Gaussian processes for machine learning , 2005, Adaptive computation and machine learning.

[24]  Ákos Hajnal,et al.  A demand‐driven approach to slicing legacy COBOL systems , 2012, J. Softw. Maintenance Res. Pract..

[25]  Rajiv Gupta,et al.  Learning universal probabilistic models for fault localization , 2010, PASTE '10.

[26]  Shin Yoo,et al.  A comparison of tree- and line-oriented observational slicing , 2019, Empirical Software Engineering.

[27]  David W. Binkley,et al.  Interprocedural slicing using dependence graphs , 1988, SIGP.

[28]  Collin McMillan,et al.  Do Programmers do Change Impact Analysis in Debugging? , 2016, Empirical Software Engineering.

[29]  Eugene H. Spafford,et al.  Critical slicing for software fault localization , 1996, ISSTA '96.