1. A method for testing software comprising: providing a current state, a plurality of test objects, and a plurality of test methods, wherein the current state includes a first set of test objects that has at least one test object, the test methods can be associated with one or more state transitions, and each test method is associated with one test object; identifying each test method associated with at least one test object included within the first set of test objects; obtaining input that selects a test method; modifying the current state if the selected test method is associated with a state transition that results in a state different from the current state, the modified current state including a second set of test objects that has at least one test object, wherein at least one test object is not included in both the first set of test objects and the second set of test objects; identifying each test method associated with at least one test object included within the second set of test objects; and generating a test script that executes the software.