Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于测试多线程java应用程序的确定性记录/回放框架_Java_Multithreading_Unit Testing_Debugging_Concurrency - Fatal编程技术网

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

用于测试多线程java应用程序的确定性记录/回放框架,java,multithreading,unit-testing,debugging,concurrency,Java,Multithreading,Unit Testing,Debugging,Concurrency,我正在开发一个使用一些第三方库的框架。框架客户端可以在多线程上下文中使用代码,但框架本身不生成线程或使用共享内存或锁/同步。我在客户端环境中看到了一些多线程问题,并且正在寻找一个确定性多线程测试框架,因为这个问题似乎发生在第三方框架中 目前已尝试: 1) 能够在jmeter性能测试环境中的几次运行中重现它 2) 通过使用testng多线程注释进行压力测试,能够以不太一致的方式复制它。 (@Test(threadPoolSize=10,invocationCount=100,timeOut=100

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

目前已尝试:

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

2) 通过使用testng多线程注释进行压力测试,能够以不太一致的方式复制它。 (@Test(threadPoolSize=10,invocationCount=100,timeOut=10000))

缺点:这只是在线程池中执行该方法,不能保证交错/静态代码分析,也不能提供确定地复制的方法

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

4) :对于基于锁定/同步/共享内存的多线程代码,似乎工作得很好

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

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

任何类似于Microsoft Chess或HelGrind/DRD for Java的建议,这些建议可以通过静态代码分析或字节码插装和回放来记录特定的线程交互,以便进行调试


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

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

据我所知,这方面的最新进展是一个叫做共生的系统。java/c/c++的开源实现(以及测试、示例和发表的论文)可在以下URL中找到:


希望能有帮助。很抱歉回复太晚,但我最近加入了

您看到了什么类型的问题?如果你经历过比赛情况,可能会有所帮助。谢谢。我刚刚在我的项目上尝试了vmlens。我相信这个项目太复杂了,代理现在无法处理。我已经对可能发生竞争情况的特定类和字段产生了怀疑。如果您可以提供包含筛选器或测试“主题”功能,而不是排除筛选器,那么它可能非常有用。请参阅