1. A method for detecting constructs in computer program source code in a manner that it independent of underlying source code variations used to implement the source code constructs, the method comprising: (a) converting a first computer source code file into a fact set in a mathematical notation suitable for inputting into an automated inference engine; (b) accessing a catalog including elemental design patterns and constructs composed of elemental design patterns for identifying predetermined source code constructs, wherein the elemental design patterns and the constructs in the catalog are independent of source code semantic tags; (c) accessing a set of rules in the mathematical notation usable by the automated inference engine to identify relationships between source code constructs; and (d) inputting the fact set, the catalog, and the rules to the automated inference engine and identifying constructs present in the first computer program source code file.