Extracting static and dynamic structural information from java concurrent programs for coverage testing