Concolic Testing in CLP

Concolic testing is a popular software verification technique based on a combination of concrete and symbolic execution. Its main focus is finding bugs and generating test cases with the aim of maximizing code coverage. A previous approach to concolic testing in logic programming was not sound because it only dealt with positive constraints (by means of substitutions) but could not represent negative constraints. In this paper, we present a novel framework for concolic testing of CLP programs that generalizes the previous technique. In the CLP setting, one can represent both positive and negative constraints in a natural way, thus giving rise to a sound and (potentially) more efficient technique. Defining verification and testing techniques for CLP programs is increasingly relevant since this framework is becoming popular as an intermediate representation to analyze programs written in other programming paradigms.

[1]  John W. Lloyd,et al.  Partial Evaluation in Logic Programming , 1991, J. Log. Program..

[2]  Max Bramer Logic Programming with Prolog , 2005, Springer London.

[3]  Michael J. Maher,et al.  The Semantics of Constraint Logic Programs , 1998, J. Log. Program..

[4]  Germán Vidal,et al.  Concolic Execution and Test Case Generation in Prolog , 2014, LOPSTR.

[5]  Germán Vidal,et al.  Concolic Execution in Functional Programming by Program Instrumentation , 2015, LOPSTR.

[6]  Zoltan Somogyi,et al.  The Execution Algorithm of Mercury, an Efficient Purely Declarative Logic Programming Language , 1996, J. Log. Program..

[7]  Koushik Sen,et al.  DART: directed automated random testing , 2005, PLDI '05.

[8]  James C. King,et al.  Symbolic execution and program testing , 1976, CACM.

[9]  Koushik Sen,et al.  CUTE and jCUTE: Concolic Unit Testing and Explicit Path Model-Checking Tools , 2006, CAV.

[10]  Étienne Payet,et al.  Selective unification in constraint logic programming , 2017, PPDP.

[11]  Jorge A. Navas,et al.  The SeaHorn Verification Framework , 2015, CAV.

[12]  Manuel V. Hermenegildo,et al.  Assertion-based Debugging of Higher-Order (C)LP Programs , 2014, PPDP '14.

[13]  John P. Gallagher,et al.  The derivation of an algorithm for program specialisation , 1990, New Generation Computing.

[14]  Étienne Payet,et al.  Concolic testing in logic programming , 2015, Theory Pract. Log. Program..

[15]  Jorge A. Navas,et al.  Horn Clauses as an Intermediate Representation for Program Analysis and Transformation , 2015, Theory Pract. Log. Program..

[16]  Krzysztof R. Apt,et al.  From logic programming to Prolog , 1996, Prentice Hall International series in computer science.

[17]  Claude Kirchner,et al.  Constraint Solving on Terms , 2001, CCL.

[18]  Bart Demoen,et al.  Towards Typed Prolog , 2008, ICLP.

[19]  Danny De Schreye,et al.  Constrained partial deduction and the preservation of characteristic trees , 2009, New Generation Computing.

[20]  Koushik Sen,et al.  CUTE: a concolic unit testing engine for C , 2005, ESEC/FSE-13.

[21]  Jürgen Giesl,et al.  A Linear Operational Semantics for Termination and Complexity Analysis of ISO Prolog , 2011, LOPSTR.

[22]  Konstantinos Sagonas,et al.  Concolic testing for functional languages , 2015, PPDP.