1. A method of verifying software, the method comprising: receiving at least a portion of a software program, the portion of the software program including a software function within a class; generating a proxy class based on the class, the proxy class including a proxy function that includes a call to the software function and a proxy condition within the proxy function that operates as a parameter in the proxy function, the proxy condition based on a software function variable from the software function that determines a control flow of the software function and is configured to apply conditions to parameters and/or variables in the software function; analyzing the proxy function, the analysis of the proxy function resulting in analysis of selected behavior of the software function, the behavior of the software function selected for analysis based on the proxy condition limiting potential execution paths of the software function; determining a test case for verifying the selected behavior of the software function based on the analysis of the selected behavior; and when errors, which include errors due to: lack of computing resources, timing out of a process, non-identification of previously known errors an inability to handle the proxy function or errors identified at a function level in the software program as false positive errors when considered in view of the software program, are encountered while generating test cases corresponding to the proxy class and proxy functions, constraining or generalizing the proxy function.