System Dependence Graphs in Sequential Erlang

The system dependence graph (SDG) is a data structure used in the imperative paradigm for different static analysis, and particularly, for program slicing. Program slicing allows us to determine the part of a program (called slice) that influences a given variable of interest. Thanks to the SDG, we can produce precise slices for interprocedural programs. Unfortunately, the SDG cannot be used in the functional paradigm due to important features that are not considered in this formalism (e.g., pattern matching, higher-order, composite expressions, etc.). In this work we propose the first adaptation of the SDG to a functional language facing these problems. We take Erlang as the host language and we adapt the algorithms used to slice the SDG to produce precise slices of Erlang interprocedural programs. As a proof-of-concept, we have implemented a program slicer for Erlang based on our SDGs.

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

[2]  Zoltán Horváth,et al.  Impact Analysis of Erlang Programs Using Behaviour Dependency Graphs , 2009, CEFP.

[3]  Christopher Mark Brown,et al.  Tool support for refactoring Haskell programs , 2008 .

[4]  Neil Walkinshaw,et al.  The Java system dependence graph , 2003, Proceedings Third IEEE International Workshop on Source Code Analysis and Manipulation.

[5]  Germán Vidal,et al.  Static Slicing of Rewrite Systems , 2007, WFLP.

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

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

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

[9]  Moni Naor,et al.  Central European Functional Programming School , 2013, Lecture Notes in Computer Science.

[10]  Manfred Widera Concurrent Erlang Flow Graphs , 2005 .

[11]  Mary Jean Harrold,et al.  Slicing object-oriented software , 1996, Proceedings of IEEE 18th International Conference on Software Engineering.

[12]  Heinrich Müller,et al.  Effiziente Methoden der geometrischen Modellierung und der wissenschaftlichen Visualisierung, Dagstuhl Seminar 1997 , 1999, Effiziente Methoden der geometrischen Modellierung und der wissenschaftlichen Visualisierung.

[13]  Donglin Liang,et al.  Slicing objects using system dependence graphs , 1998, Proceedings. International Conference on Software Maintenance (Cat. No. 98CB36272).

[14]  Zhao Jianjun Slicing Aspect-Oriented Software (ソフトウェア工学 研究報告) , 2001 .

[15]  Thomas W. Reps,et al.  Program Specialization via Program Slicing , 1996, Dagstuhl Seminar on Partial Evaluation.

[16]  Konstantinos Sagonas,et al.  Practical type inference based on success typings , 2006, PPDP '06.

[17]  Olivier Danvy,et al.  Partial evaluation , 2003 .

[18]  Germán Vidal,et al.  Dynamic slicing based on redex trails , 2004, PEPM '04.

[19]  Frank Tip,et al.  Parametric program slicing , 1995, POPL '95.

[20]  Janusz W. Laski,et al.  Dynamic Program Slicing , 1988, Inf. Process. Lett..

[21]  Konstantinos Sagonas,et al.  TypEr: a type annotator of Erlang code , 2005, ERLANG '05.

[22]  Luís Soares Barbosa,et al.  Component Identification Through Program Slicing , 2006, FACS.

[23]  Manfred Widera Flow graphs for testing sequential erlang programs , 2004, ERLANG '04.

[24]  M. Eliantonio,et al.  Private Parties and the Annulment Procedure: Can the Gap in the European System of Judicial Protection Be Closed? , 2010 .