Model Checking, Tla Plus, TLC, Java, Concurrency.
When tests are not enough, use formal methods! Producers and consumers share a bounded buffer A Multi-Threaded Program (in Java) To write concurrent programs is hard. To a large extent, this difficulty stems from a lack of good testing and debugging strategies. We also make mistakes when we write