1. A method for generating test inputs for applying concolic testing in a program, the method comprising: receiving a program; performing a source-to-source transformation of the program; performing interpretation on the program based on a set of test input values; symbolically executing the program; recording a symbolic constraint for each of one or more conditional expressions encountered during execution of the program further comprising; for each variable occurrence in a Boolean control expression, creating a copy of the expression and setting all other variable occurrences in the expression to their concrete values from the execution, thereby generating a set of expressions where each expression in the set has only a single variable occurrence and each subexpression that does not depend on that variable is replaced with its concrete values; and including analyzing a string operation in the program to identify one or more possible execution paths, generating symbolic inputs representing values of variables in each of the conditional expressions as a numeric expression and a string constraint including generating constraints on string values by modeling string operations using finite state transducers (FSTs) and supplying values from the program's execution in place of intractable sub-expressions, analyzing string operations in the program using the FSTs, wherein the FSTs represent library string functions, and resolving control dependencies by recording a stack trace at a beginning of a function call, wherein functions that called the function are to be added to a set of functions to be analyzed; and generating new inputs to drive the program during a subsequent iteration based on results of solving the recorded string constraints.
1. A method for generating test inputs for applying concolic testing in a program, the method comprising: receiving a program; performing a source-to-source transformation of the program; performing interpretation on the program based on a set of test input values; symbolically executing the program; recording a symbolic constraint for each of one or more conditional expressions encountered during execution of the program further comprising; for each variable occurrence in a Boolean control expression, creating a copy of the expression and setting all other variable occurrences in the expression to their concrete values from the execution, thereby generating a set of expressions where each expression in the set has only a single variable occurrence and each subexpression that does not depend on that variable is replaced with its concrete values; and including analyzing a string operation in the program to identify one or more possible execution paths, generating symbolic inputs representing values of variables in each of the conditional expressions as a numeric expression and a string constraint including generating constraints on string values by modeling string operations using finite state transducers (FSTs) and supplying values from the program's execution in place of intractable sub-expressions, analyzing string operations in the program using the FSTs, wherein the FSTs represent library string functions, and resolving control dependencies by recording a stack trace at a beginning of a function call, wherein functions that called the function are to be added to a set of functions to be analyzed; and generating new inputs to drive the program during a subsequent iteration based on results of solving the recorded string constraints. 11. The method defined in claim 1 further comprising: identifying a point of possible failure in the program; and computing a backward slice from the point of possible failure, and wherein constraints are only recorded from the backward slice.