I saw this post on SO already but it still begs the question, at least for Java. It seems that this should be a pressing issue for any app (i’m testing a web app for this use case) that’s multi-threaded. How have you guys dealt with it in a way that allows your threads to interleave — inherently meaning testing random thread behavior.
Share
I think it’s inherently difficult, since you’re looking to prove the absence of something in a (possibly) non-determinant system. Having said that, it’s always worth writing repeatable tests to stress your multi-threaded components. If a problem occurs, you may not be able to repeat it, but you can perhaps find the bug by inspection. So make sure your tests log the relevant exceptions in great detail (and possibly input parameters etc.)
It’s also worth running a static code analyser. These will pick up (amongst other things) inconsistent synchronisation of variables, and immediately highlight areas for concern. FindBugs is one such tool.