Deterministic recording / playback structure for testing multi-threaded Java applications

I am working on a framework that uses some third-party libraries. Framework clients can use code in a multi-threaded context, but the framework itself does not spawn threads or uses shared memory or locks / synchronization. I see some multithreading issues in the client environment and am looking for a deterministic multithreaded testing system, since the problem seems to be happening in a third-party framework.

Tried so far:

1) The ability to play it in a few runs in the jmeter performance testing environment

2) The ability to reproduce it not so consistently by stress testing using testng multithreading annotation. (@Test (threadPoolSize = 10, invocationCount = 100, timeOut = 10000))

Cons: it just executes the method in the thread pool and does not guarantee strip / static code analysis or provides a deterministic playback method.

3) Tried Junit ActiveTestSuite and @ConcurrentJunitRunner. This is similar to the testng annotation.

4) MultiThreadedTC : seems to work well for multi-threaded lock / sync / shared memory code

5) GroboUtils It seems to be more focused on testing / monitoring shared memory

6) IBM ConTest, , , , , , .

, Microsoft Chess HelGrind/DRD Java, .?

unit test/build, .

+4
1

, concurrency, - , . . , SMT ( ) .

, . URL java/c/++ ( , ):

http://www.gsd.inesc-id.pt/~nmachado/software/Symbiosis_Tutorial.html

, . ,

+2

All Articles