1. A method of testing a software component comprising: creating an abstraction matrix that describes the software component, the abstraction matrix comprising state and event information; parsing the abstraction matrix to generate test cases and mapped expected results therefore; separating the test cases based on layers of the software component, and associating data structures with the separated test cases of the layers, the data structures allowing the test cases of the various layers to be uncorrelated; employing the software component in executable form to generate for each layer of the software component test case execution threads from the test cases and mapped expected results for that layer; and executing in parallel at least some of the test case execution threads for at least one layer of the software component, thereby testing the software component.