Combining Preprocessor Slicing with C/C++ Language Slicing

Slicing C programs has been one of the most popular ways for the implementation of slicing algorithms; out of the very few practical implementations that exist many deal with this programming language. Yet, preprocessor related issues have been addressed very marginally by these slicers, despite the fact that ignoring (or handling poorly) these constructs may lead to serious inaccuracies in the slicing results and hence in the comprehension process. An accurate slicing method for preprocessor related constructs has been proposed which - when combined with existing C/C++ language slicers - can provide a more complete comprehension of these languages. In this paper, we overview our approach for this combination and report its benefits in terms of the completeness of the resulting slices.

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

[2]  Václav Rajlich,et al.  A model for change propagation based on graph rewriting , 1997, 1997 Proceedings International Conference on Software Maintenance.

[3]  Panos E. Livadas,et al.  Understanding code containing preprocessor constructs , 1994, Proceedings 1994 IEEE 3rd Workshop on Program Comprehension- WPC '94.

[4]  Tibor Gyimóthy,et al.  Columbus - reverse engineering tool and schema for C++ , 2002, International Conference on Software Maintenance, 2002. Proceedings..

[5]  Jianjun Zhao,et al.  A slicing-based approach to extracting reusable software architectures , 2000, Proceedings of the Fourth European Conference on Software Maintenance and Reengineering.

[6]  Tibor Gyimóthy,et al.  Combining preprocessor slicing with C/C++ language slicing , 2009, Sci. Comput. Program..

[7]  Eugene H. Spafford,et al.  Debugging with dynamic slicing and backtracking , 1993, Softw. Pract. Exp..

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

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

[10]  Rudolf Ferenc,et al.  Columbus schema for C/C++ preprocessing , 2004, Eighth European Conference on Software Maintenance and Reengineering, 2004. CSMR 2004. Proceedings..

[11]  Volker Riediger,et al.  Folding: an approach to enable program understanding of preprocessed languages , 2001, Proceedings Eighth Working Conference on Reverse Engineering.

[12]  Marian Vittek Refactoring browser with preprocessor , 2003, Seventh European Conference onSoftware Maintenance and Reengineering, 2003. Proceedings..

[13]  Alejandra Garrido,et al.  Program refactoring in the presence of preprocessor directives , 2005 .

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

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

[16]  Rudolf Ferenc,et al.  Macro Impact Analysis Using Macro Slicing , 2007, ICSOFT.

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

[18]  Markus Mock,et al.  Program slicing with dynamic points-to sets , 2005, IEEE Transactions on Software Engineering.

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

[20]  Pierre-Etienne Moreau,et al.  A collection of C, C++ and Java code understanding and refactoring plugins , 2005, ICSM.

[21]  Robert S. Arnold,et al.  Software Change Impact Analysis , 1996 .

[22]  Gregg Rothermel,et al.  Selecting tests and identifying test coverage requirements for modified software , 1994, ISSTA '94.

[23]  Baowen Xu,et al.  A brief survey of program slicing , 2005, SOEN.

[24]  Aniello Cimitile,et al.  A Specification Driven Slicing Process for Identifying Reusable Functions , 1996, J. Softw. Maintenance Res. Pract..

[25]  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..

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

[27]  Michael D. Ernst,et al.  An Empirical Analysis of C Preprocessor Use , 2002, IEEE Trans. Software Eng..