An electronic device, comprising: a memory; a processor coupled to the memory; one or more policies stored in the memory, including: a resource availability policy determining whether the processor should continue evaluating the software; and, a job availability policy determining whether new jobs will be created for unexplored branches; wherein the processor is configured to: receive a job to be executed, the job comprising an indication of a portion of software to be evaluated; evaluate the software; if a branch in the software is encountered: select a branch to explore; and store an initialization sequence of one or more unexplored branches; evaluate the job availability policy; based on the job availability policy, decide whether to create a new job for each of the unexplored branches or to explore each unexplored branch as part of the received job; evaluate the resource availability policy; and based on the resource availability policy, decide whether to continue evaluating the software at the branch selected to explore or to finish execution of the job to become available for assignment to a new job. a memory; a processor coupled to the memory; one or more policies stored in the memory, including: a resource availability policy determining whether the processor should continue evaluating the software; and, a job availability policy determining whether new jobs will be created for unexplored branches; a resource availability policy determining whether the processor should continue evaluating the software; and, a job availability policy determining whether new jobs will be created for unexplored branches; wherein the processor is configured to: receive a job to be executed, the job comprising an indication of a portion of software to be evaluated; evaluate the software; if a branch in the software is encountered: select a branch to explore; and store an initialization sequence of one or more unexplored branches; evaluate the job availability policy; based on the job availability policy, decide whether to create a new job for each of the unexplored branches or to explore each unexplored branch as part of the received job; evaluate the resource availability policy; and based on the resource availability policy, decide whether to continue evaluating the software at the branch selected to explore or to finish execution of the job to become available for assignment to a new job. receive a job to be executed, the job comprising an indication of a portion of software to be evaluated; evaluate the software; if a branch in the software is encountered: select a branch to explore; and store an initialization sequence of one or more unexplored branches; select a branch to explore; and store an initialization sequence of one or more unexplored branches; evaluate the job availability policy; based on the job availability policy, decide whether to create a new job for each of the unexplored branches or to explore each unexplored branch as part of the received job; evaluate the resource availability policy; and based on the resource availability policy, decide whether to continue evaluating the software at the branch selected to explore or to finish execution of the job to become available for assignment to a new job.