1. A method of software simulation of a target software without actually running or testing the target software, the method comprising the steps of: reading a first set of configuration files that contain details of the code to be simulated, the simulation parameters, and output format; reading a second set of configuration files that contain details of the rules to be applied to the code being simulated; loading rules which describe the expected behavior of the software, the rules being loaded from said configuration files; reading said target software program code; constructing a program model, which is a memory representation of program structure of the target software; attaching the loaded rules to specific nodes in the program model in accordance with the rules; running a plurality of simulation algorithms on the target software program without running the target software, to check for defects and obtain metrics and other attributes of the target software code, wherein running the plurality of simulation algorithms on said target software program comprises determining context sensitivity and data structures, upon completion of operation processes values of variable from multiple caller methods, generating an output with defects and other results reported by the plurality of algorithms; and displaying the output on an interface.