1. A method, implemented by a computing device, comprising: in parallel with a normal execution of software being tested, performing a symbolic execution of the software being tested to identify one or more path constraints in the software; injecting one or more issue constraints into the software wherein each issue constraint is associated with at least one of the one or more path constraints and comprises a coded formula inserted into the software being tested; solving the one or more issue constraints and the one or more path constraints using a constraint solver, the solving including providing at least one assignment that satisfies the one or more issue constraints and the one or more path constraints, wherein an existence of a solution to the one or more issue constraints and the one or more path constraints indicates a potential failure of the software; based at least in part on the solving, generating at least one test input for testing the software based on the at least one assignment; and testing the software using the at least one test input to check for one or more violations of the injected one or more issue constraints, wherein the testing of the software using the at least one test input extends normal execution checking by checking for one or more issue constraint violations for program executions of the software that follow a same program path.