Software Reliability for Concurrent and Distributed Systems