Patent ID: 8516443

Claim:
A method for identifying program properties in a plurality of source code, comprising: identifying, using a processor, a plurality of program objects corresponding to a potential program property within the plurality of source code; identifying, using the processor, a function associated with the plurality of program objects in the plurality of source code; identifying an input and an output of the function in the plurality of source code; creating a value flow graph comprising a plurality of graph nodes by: creating a first plurality of object nodes corresponding to a plurality of input variables of the function; creating a function input node of the plurality of graph nodes representing the input of the function; creating a function output node of the plurality of graph nodes representing the output of the function; creating a second plurality of object nodes corresponding to a plurality of output variables of the function; identifying a plurality of value flow functions, wherein each value flow function of the plurality of value flow functions defines a conditional dependency between a pair of graph nodes of the plurality of graph nodes; and creating, based on the plurality of value flow functions, a plurality of directed graph edges of the value flow graph modeling a potential flow of data among the plurality of graph nodes; identifying a feasible subset of the plurality of directed graph edges, wherein identifying the feasible subset comprises: identifying, based on the potential program property, a start node of the value flow graph among the plurality of graph nodes; identifying, in the plurality of source code, a plurality of context data items corresponding to a subset of the plurality of value flow functions dependent on the start node; and evaluating, in a depth-first order of the value flow graph, the subset of the plurality of value flow functions using the plurality of context data items; and identifying, using the processor and based on the feasible subset of the plurality of directed graph edges, a feasible path in the value flow graph depicting an occurrence of the potential program property in the plurality of source code.