1. A computer-implemented method for analyzing a set of two or more communicating applications comprising a plurality of code fragments, the computer-implemented method comprising: receiving at least a portion of code fragments as part of a first application and receiving at least a portion of the code fragments as part of a second application, wherein the first application and the second application communicate with each other during execution; receiving an initial input for executing the first application and the second application; adding the initial input to a set of inputs; performing the following at least once: selecting one or more inputs out of the set of inputs for execution; executing, using one or more of the selected inputs, at least one of: a) the portion of the code fragments as part of the second application concretely and symbolically to record a second application path constraint and to record second application information communicated to the portion of the code fragments as part of the first application and generating a set of one or more new second application inputs for the portion of the code fragments as part of the second application based the second application path constraint and information communicated from the first application to the second application; and b) the portion of the code fragments as part of the first application concretely and symbolically to record a first application path constraint and to record first application information communicated to the portion of the code fragments as part of the second application and generating a set of one or more new first application inputs for the portion of the code fragments as part of the first application based the first application path constraint and information communicated from the second application to the first application; and adding to the set of inputs at least one or more of new first application inputs and new second application inputs.