用于测试多线程Java应用程序的确定性记录/重放框架

我正在开发一个使用某些第三方库的框架.框架客户端可以在多线程上下文中使用代码,但框架本身不会产生线程或使用共享内存或锁定/同步.我在客户端环境中看到一些多线程问题并寻找确定性的多线程测试框架,因为问题似乎在第三方框架中出现.

试了这么远:

1)能够在jmeter性能测试环境中的几次运行中重现它

2)能够通过使用testng多线程注释的压力测试以不那么一致的方式再现它.
(@Test(threadPoolSize = 10,invocationCount = 100,timeOut = 10000))

缺点:这只是在线程池中执行方法,并不保证交错/静态代码分析或提供确定性重现的方法.

3)尝试过Junit的ActiveTestSuite和@ConcurrentJunitRunner.它类似于testng注释.

4)MultiThreadedTC:似乎适用于基于锁/同步/共享内存的多线程代码

5)GroboUtils似乎更倾向于测试/监控共享内存

6)IBM ConTest似乎已获得许可,我们没有试用版以确保它符合我们的需求并要求我们的管理层购买它.

任何类似于Microsoft Chess或HelGrind / DRD for Java的建议,可以通过静态代码分析或字节代码检测记录特定的线程间隔,并进行重放以进行调试.

我也在考虑将此工具集成到我们的单元测试/构建过程中,以避免将来出现类似错误.

最佳答案 重现并发错误的记录和重放系统的主要挑战是需要记录的大量信息.记录共享变量的线程交错会产生非常大的日志和大的减速.因此,最近的研究工作尝试执行部分记录,然后使用SMT求解器来完成交错的缺失(未记录)部分.

据我所知,这一领域的最新进展是一个名为共生的系统.此URL中提供了java / c / c的开源实现(以及测试,示例和已发布的论文):

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

希望能帮助到你.对不起,迟到的回复,但我最近加入

点赞