Empirical study of optimization techniques for massive slicing

This article presents results from a study of techniques that improve the performance of graph-based interprocedural slicing of the System Dependence Graph (SDG). This is useful in “massive slicing” where slices are required for many or all of the possible set of slicing criteria. Several different techniques are considered, including forming strongly connected components, topological sorting, and removing transitive edges. Data collected from a test bed of just over 1,000,000 lines of code are presented. This data illustrates the impact on computation time of the techniques. Together, the best combination produces a 71% reduction in run-time (and a 64% reduction in memory usage). The complete set of techniques also illustrates the point at which faster computation is not viable due to prohibitive preprocessing costs.

[1]  Aniello Cimitile,et al.  Identifying reusable functions using specification driven program slicing: a case study , 1995, Proceedings of International Conference on Software Maintenance.

[2]  Linda M. Ott,et al.  Slice based metrics for estimating cohesion , 1993, [1993] Proceedings First International Software Metrics Symposium.

[3]  Jianjun Zhao,et al.  Slicing aspect-oriented software , 2002, Proceedings 10th International Workshop on Program Comprehension.

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

[5]  Donglin Liang,et al.  Efficient points-to analysis for whole-program analysis , 1999, ESEC/FSE-7.

[6]  Aniello Cimitile,et al.  Software salvaging based on conditions , 1994, Proceedings 1994 International Conference on Software Maintenance.

[7]  Mark Harman,et al.  Analysis and visualization of predicate dependence on formal parameters and global variables , 2004, IEEE Transactions on Software Engineering.

[8]  Hausi A. Müller,et al.  Rigi: a system for programming-in-the-large , 1988, Proceedings. [1989] 11th International Conference on Software Engineering.

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

[10]  Phil Pfeiffer,et al.  Dependence analysis for pointer variables , 1989, PLDI '89.

[11]  Atanas Rountev,et al.  Off-line variable substitution for scaling points-to analysis , 2000, PLDI '00.

[12]  Gregor Snelting,et al.  Efficient path conditions in dependence graphs for software safety analysis , 2006, TSEM.

[13]  David W. Binkley,et al.  The application of program slicing to regression testing , 1998, Inf. Softw. Technol..

[14]  Mark Harman,et al.  Node coarsening calculi for program slicing , 2001, Proceedings Eighth Working Conference on Reverse Engineering.

[15]  Barbara G. Ryder,et al.  Effectively exploiting parallelism in data flow analysis , 2005, The Journal of Supercomputing.

[16]  Alexander Aiken,et al.  Partial online cycle elimination in inclusion constraint graphs , 1998, PLDI.

[17]  Mark Harman,et al.  Results from a large-scale study of performance optimization techniques for source code analyses based on graph reachability algorithms , 2003, Proceedings Third IEEE International Workshop on Source Code Analysis and Manipulation.

[18]  Joseph Robert Horgan,et al.  Dynamic program slicing , 1990, PLDI '90.

[19]  Olivier Tardieu,et al.  Ultra-fast aliasing analysis using CLA: a million lines of C code in a second , 2001, PLDI '01.

[20]  Mark Harman,et al.  Backward conditioning: a new program specialisation technique and its application to program comprehension , 2001, Proceedings 9th International Workshop on Program Comprehension. IWPC 2001.

[21]  David W. Binkley,et al.  Slice-based cohesion metrics and software intervention , 2004, 11th Working Conference on Reverse Engineering.

[22]  Aniello Cimitile,et al.  Qualifying reusable functions using symbolic execution , 1995, Proceedings of 2nd Working Conference on Reverse Engineering.

[23]  Aniello Cimitile,et al.  RE2: Reverse-engineering and reuse re-engineering , 1994, J. Softw. Maintenance Res. Pract..

[24]  Mark Harman,et al.  Forward slices are smaller than backward slices , 2005, Fifth IEEE International Workshop on Source Code Analysis and Manipulation (SCAM'05).

[25]  James R. Larus,et al.  Cache-conscious structure definition , 1999, PLDI '99.

[26]  Jens Krinke,et al.  Advanced slicing of sequential and concurrent programs , 2003, 20th IEEE International Conference on Software Maintenance, 2004. Proceedings..

[27]  Mark Harman,et al.  Using program slicing to assist in the detection of equivalent mutants , 1999, Softw. Test. Verification Reliab..

[28]  Thomas W. Reps,et al.  Program analysis via graph reachability , 1997, Inf. Softw. Technol..

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

[30]  Karl J. Ottenstein,et al.  The program dependence graph in a software development environment , 1984 .

[31]  Mark Harman,et al.  Using program slicing to assist in the detection of equivalent mutants , 1999, Softw. Test. Verification Reliab..

[32]  David W. Binkley,et al.  A large-scale empirical study of forward and backward static slice size and context sensitivity , 2003, International Conference on Software Maintenance, 2003. ICSM 2003. Proceedings..

[33]  Daniel Jackson,et al.  Chopping: A Generalization of Slicing , 1994 .

[34]  Sue Black,et al.  Computing ripple effect for software maintenance , 2001, J. Softw. Maintenance Res. Pract..

[35]  Markus Mock,et al.  Improving program slicing with dynamic points-to data , 2002, SIGSOFT '02/FSE-10.

[36]  Jens Krinke,et al.  Evaluating context-sensitive slicing and chopping , 2002, International Conference on Software Maintenance, 2002. Proceedings..

[37]  James M. Bieman,et al.  Measuring Functional Cohesion , 1994, IEEE Trans. Software Eng..

[38]  Linda M. Ott,et al.  The relationship between slices and module cohesion , 1989, ICSE '89.

[39]  Charles N. Fischer,et al.  Crafting a Compiler , 1988 .

[40]  Francoise Balmas,et al.  Using dependence graphs as a support to document programs , 2002, Proceedings. Second IEEE International Workshop on Source Code Analysis and Manipulation.

[41]  Frank Tip,et al.  A survey of program slicing techniques , 1994, J. Program. Lang..

[42]  Paul Anderson,et al.  Flow insensitive points-to sets , 2001, Proceedings First IEEE International Workshop on Source Code Analysis and Manipulation.

[43]  Mark Harman,et al.  An overview of program slicing , 2001, Softw. Focus.

[44]  David W. Binkley,et al.  Program integration for languages with procedure calls , 1995, TSEM.

[45]  Mark Weiser,et al.  Programmers use slices when debugging , 1982, CACM.

[46]  Lori A. Clarke,et al.  A Formal Model of Program Dependences and Its Implications for Software Testing, Debugging, and Maintenance , 1990, IEEE Trans. Software Eng..

[47]  Mark Harman,et al.  Building executable union slices using conditioned slicing , 2004, Proceedings. 12th IEEE International Workshop on Program Comprehension, 2004..

[48]  Thomas W. Reps,et al.  Speeding up slicing , 1994, SIGSOFT '94.

[49]  Mark Harman,et al.  An empirical study of amorphous slicing as a program comprehension support tool , 2000, Proceedings IWPC 2000. 8th International Workshop on Program Comprehension.

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

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

[52]  Rainer Koschke,et al.  Static trace extraction , 2002, Ninth Working Conference on Reverse Engineering, 2002. Proceedings..

[53]  HarmanMark,et al.  Empirical study of optimization techniques for massive slicing , 2007 .

[54]  Mark Harman,et al.  Conditioned slicing supports partition testing , 2002, Softw. Test. Verification Reliab..

[55]  James M. Bieman,et al.  Effects of software changes on module cohesion , 1992, Proceedings Conference on Software Maintenance 1992.

[56]  Mark Harman,et al.  Using program slicing to simplify testing , 1995, Softw. Test. Verification Reliab..

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

[58]  Mark Harman,et al.  Locating dependence clusters and dependence pollution , 2005, 21st IEEE International Conference on Software Maintenance (ICSM'05).

[59]  Rainer Koschke An incremental semi-automatic method for component recovery , 1999, Sixth Working Conference on Reverse Engineering (Cat. No.PR00303).