Towards a Theory of Reach

When testing a program, there are usually some parts that are rarely executed and hence more difficult to test. Finding inputs that guarantee that such parts are executed is an example of a reach problem, which in general seeks to ensure that targeted parts of a program are always executed. In previous work, Naylor and Runciman have developed a reachability solver for Haskell, based on the use of lazy narrowing from functional logic programming. Their work was focused on practical issues concerning implementation and performance. In this paper, we lay the groundwork for an underlying theory of such a system, by formally establishing the correctness of a simple reach solver.

[1]  U. Norell,et al.  Towards a practical programming language based on dependent type theory , 2007 .

[2]  Colin Runciman,et al.  Advances in Lazy SmallCheck , 2012, IFL.

[3]  Michael Hanus,et al.  A unified computation model for functional and logic programming , 1997, POPL '97.

[4]  Colin Runciman,et al.  Haskell program coverage , 2007, Haskell '07.

[5]  Jean-Pierre Jouannaud,et al.  Rewrite Systems , 1991, Handbook of Theoretical Computer Science, Volume B: Formal Models and Sematics.

[6]  Colin Runciman,et al.  Finding Inputs that Reach a Target Expression , 2007, Seventh IEEE International Working Conference on Source Code Analysis and Manipulation (SCAM 2007).

[7]  M. Hanus,et al.  Curry: An Integrated Functional Logic Language , 2003 .

[8]  Sebastian Fischer,et al.  EasyCheck - Test Data for Free , 2008, FLOPS.

[9]  Rostislav Khlebnikov,et al.  Lecture Notes in Computer Science (including subseries Lecture Notes in Artificial Intelligence and Lecture Notes in Bioinformatics) , 2016 .

[10]  Fredrik Lindblad Property Directed Generation of First-Order Test Data , 2007, Trends in Functional Programming.

[11]  Andrew Moran,et al.  Improvement in a lazy context: an operational theory for call-by-need , 1999, POPL '99.

[12]  Ralf Hinze,et al.  A new approach to generic functional programming , 2000, POPL '00.

[13]  Germán Vidal,et al.  Operational semantics for declarative multi-paradigm languages , 2005, J. Symb. Comput..

[14]  Colin Runciman,et al.  Smallcheck and lazy smallcheck: automatic exhaustive testing for small values , 2008, Haskell '08.

[15]  Rachid Echahed,et al.  A needed narrowing strategy , 2000, JACM.

[16]  Jennifer Hackett,et al.  Worker/wrapper/makes it/faster , 2014, ICFP.

[17]  Koen Claessen,et al.  QuickCheck: a lightweight tool for random testing of Haskell programs , 2011, SIGP.

[18]  Rita Loogen,et al.  A Demand Driven Computation Strategy for Lazy Narrowing , 1993, PLILP.

[19]  Herbert Kuchen,et al.  Systematic generation of glass-box test cases for functional logic programs , 2007, PPDP '07.

[20]  Matthew Francis Naylor,et al.  Hardware-Assisted and Target-Directed Evaluation of Functional Programs , 2008 .