1. A method for testing a component for thread safety, comprising: providing a test that identifies operations performed by two or more threads, the operations being a call and a response to interact with the component to be tested; and using a computer-implemented safety checking system for: generating and recording a set of coarse-grained observations for the test, each coarse-grained observation being generated based on an assumption that there is no concurrency within the component as the component interacts with said two or more threads; generating and recording a set of fine-grained observations for the test, each fine-grained observation being generated based on an assumption that there can be concurrency within the component; and determining whether each of the fine-grained observations has a counterpart entry in the set of coarse-grained observations, and identifying each fine-grained observation that does not have a counterpart entry as a potential linearizability error in the component.