Practical systematic concurrency testing for concurrent and distributed software