A method comprising, by one or more computing devices: analyzing one or more first numeric constraints and one or more first string constraints associated with a software module (m), wherein: the software module comprises: one or more numeric variables (vi, vb); one or more string variables (vs); one or more first operations that apply to specific ones of the numeric variables and produce numeric or string results; and one or more second operations that apply to specific ones of the string variables and produce numeric or string results; the first numeric constraints apply to specific ones of the numeric variables; and the first string constraints apply to specific ones of the string variables; inferring one or more second numeric constraints applying to specific ones of the string variables; inferring one or more second string constraints applying to specific ones of the numeric variables; combining the one or more first numeric constraints, the one or more first string constraints, the one or more second numeric constraints, and the one or more second string constraints into a hybrid set of constraints; representing each one of the first and second numeric constraints with an equation; representing each one of the first and second string constraints with a finite state machine; grouping each of the first and second string constraints represented by the finite state machine in a string domain and each of the first and second numeric constraints into a numeric domain; in a plurality of iterations, testing the software module for one or more possible errors by attempting to solve for a solution in the string domain and the numeric domain, during the plurality of iterations, feeding a solution derived from a previous iteration in the string domain to the numeric domain and feeding a solution derived from a previous iteration in the numeric domain to the string domain, and testing the software module using the solutions found as input. analyzing one or more first numeric constraints and one or more first string constraints associated with a software module (m), wherein: the software module comprises: one or more numeric variables (vi, vb); one or more string variables (vs); one or more first operations that apply to specific ones of the numeric variables and produce numeric or string results; and one or more second operations that apply to specific ones of the string variables and produce numeric or string results; the first numeric constraints apply to specific ones of the numeric variables; and the first string constraints apply to specific ones of the string variables; the software module comprises: one or more numeric variables (vi, vb); one or more string variables (vs); one or more first operations that apply to specific ones of the numeric variables and produce numeric or string results; and one or more second operations that apply to specific ones of the string variables and produce numeric or string results; one or more numeric variables (vi, vb); one or more string variables (vs); one or more first operations that apply to specific ones of the numeric variables and produce numeric or string results; and one or more second operations that apply to specific ones of the string variables and produce numeric or string results; the first numeric constraints apply to specific ones of the numeric variables; and the first string constraints apply to specific ones of the string variables; inferring one or more second numeric constraints applying to specific ones of the string variables; inferring one or more second string constraints applying to specific ones of the numeric variables; combining the one or more first numeric constraints, the one or more first string constraints, the one or more second numeric constraints, and the one or more second string constraints into a hybrid set of constraints; representing each one of the first and second numeric constraints with an equation; representing each one of the first and second string constraints with a finite state machine; grouping each of the first and second string constraints represented by the finite state machine in a string domain and each of the first and second numeric constraints into a numeric domain; in a plurality of iterations, testing the software module for one or more possible errors by attempting to solve for a solution in the string domain and the numeric domain, during the plurality of iterations, feeding a solution derived from a previous iteration in the string domain to the numeric domain and feeding a solution derived from a previous iteration in the numeric domain to the string domain, and testing the software module using the solutions found as input.