1. A computer-implemented method of storing one or more representations of states of software, the software having logic and being configured to execute using a plurality of processes, the method comprising: storing a model of the software in one or more objects, wherein the model comprises modeled logic modeling at least a subset of the logic of the software, the model comprises a current state of the software model modeling a possible state of the software, and the one or more objects are instantiated from one or more object classes, wherein the one or more objects comprise a state object configured to describe a number of active processes for the current state of the software model among the plurality of processes and a most recently explored process of the plurality of processes, wherein the state object is configured to indicate whether a selected process of the plurality of processes is blocked in the current state of the software model, and wherein the state object is configured to execute the selected process in the current state of the software model for one atomic step and to provide an indication of a new state; storing a representation of a difference between a previous state of the software model and the current state of the software model rather than storing both the previous state of the software model and the current state of the software model, allowing the previous state of the software model to be recovered without having to keep a complete copy of the previous state of the software model; receiving, in at least one of the objects, a method call initiating a software modeling function; and responsive to receiving the method call, initiating the software modeling function.