我正在寻找一种改进的软件包,当它的输入在多个工作线程之间共享时,我认为该软件包不是线程安全的。根据TDD原则,我应该编写一些首先失败的测试,这些测试对于评估问题肯定是有用的。
我意识到这不是一件容易的事,而且,天真地,多线程测试将不确定,因为操作系统将确定调度和各种操作交错的确切顺序。过去,我已经研究并使用了MultithreadedTC,这很有用。但是,在那种情况下,我事先确切知道了现有实现的失败原因,因此能够编写涵盖它的一组不错的测试。
但是,如果您还不完全了解问题所在,那么是否有一种编写测试的好方法,该测试很有可能引发任何潜在的问题?是否有其他人认为有用的库?从纯粹的角度来看,我是否正确,多线程测试用例应该与通常的单线程测试具有相同的调用和断言,并且仅在适当的情况下与多个工作线程一起运行?
一般而言,任何有关工具/最佳实践/哲学的提议都将受到欢迎。
通过测试并发问题忘记获得良好的结果。尝试减少同步并使问题变小。然后使用尽可能高的库支持来进行同步。并且只有在您真正有能力时才尝试自己处理并发。当您知道每个工作人员都在正确地工作时,您所有的想法都告诉您,您遇到了并发问题,然后产生了一些有趣的负担。单元测试框架及其扩展可以做到这一点,但要知道您不再测试任何单元。(请记住,您已经覆盖了该部分)
如果您的并发模型变得复杂,请查看适用于SPIN之类的工具。