Effective fault localization techniques for concurrent software