所有
最近我开发了一个代码,据说是一个线程安全的类。现在我说'所谓'的原因是因为即使在使用sync'ed块,不可变数据结构和并发类之后,由于JVM的线程调度环境,我无法在某些情况下测试代码。即我只在纸上有测试用例,但无法复制相同的测试环境。是否有任何具体的指导方针或有经验的成员可以分享如何测试多线程环境。
答案 0 :(得分:10)
首先,您无法确保只测试您的类是完全线程安全的。无论您运行什么测试,您仍然需要让尽可能多的经验丰富的人员审查您的代码,以检测细微的并发问题。
也就是说,您可以设计特定的测试场景,尝试涵盖所有可能的线程间时序场景,就像您一样。对于这方面的想法(以及一般的设计线程安全类),建议阅读Java Concurrency in Practice。
此外,您可以运行压力测试,在很长一段时间内同时执行多个线程。线程数应超过合理限制,以确保经常发生线程争用 - 这会增加潜在并发错误随时间推移出现的可能性。
答案 1 :(得分:1)
另外,我建议您使用code coverage测量工具并设定高标准作为目标。例如,为修改后的条件/决策覆盖率设置一个高目标。
答案 2 :(得分:1)
我们使用GroboUtils创建多线程测试。
答案 3 :(得分:0)
如果您有计划测试的代码以使其可靠,那么将其设置为单线程。
线程应该保留给不需要特别需要工作的代码,或者很简单,无需测试就可以进行静态分析和证明是正确的。