1. A computer-implemented method to explore branches of a conditional statement in software code, comprising: (a) selecting a first branch of the conditional statement in the software to evaluate; (b) placing a second branch of the conditional statement in a pending branch list, the pending branch list including information on unexecuted branches for one or more conditional statements, and placing an indicator in the pending branch list that either a true or a false condition of the conditional statement is unevaluated: (c) automatically generating a range of input values for input into the first and second branches; (d) storing checkpoint information on a program state for the conditional statement associated with the second branch, wherein the checkpoint information comprises at least one of one or more program states evaluated by the software code to reach the conditional stateroom and one or more program states required to trigger the second branch; (e) selecting an input value that triggers the second branch of the conditional statement from the range of input values; and (f) evaluating the second branch using the selected input value, based on the checkpoint information, after an evaluation of the first branch is performed.