您对如何测试多线程应用程序有什么建议吗?
我知道,线程错误很难捕获,它们可能在任何时候发生-或者根本不发生。测试是困难的,并且结果永远不是确定的。当然,最好对并发模块进行仔细的设计和编程。
尽管如此,我不想遗漏测试方面。因此,有时候,运行大量处理相同项目的线程可能会引发线程错误。
有什么想法或最佳实践可以获得高命中率的隐藏线程错误吗?
(我使用的是.Net/C#)
发布于 2009-06-05 12:18:36
你可以使用一些好的工具来测试所有的线程问题,比如数据竞争、死锁、停滞的线程等等。intel-thread-checker就是这样一个好工具。
你也可以试试,微软研究院的CHESS
发布于 2009-06-05 12:17:57
如果可能,请尝试将线程数增加到较大的数量,甚至超过发行版中将使用的线程数。随着大量线程运行你的程序,错误将更频繁地出现,因为更多的线程在代码上运行。
仔细检查你的声明、锁、解锁、信号量计数等,并确保它们有意义。
创建一个测试文档或电子表格,并利用您对代码的了解,考虑可能发生竞争条件或死锁的地方。
从大厅里找一些人来做一个“走廊可用性测试”(Joel on Software说我这么想?)。一般来说,那些不知道你的程序是做什么/是关于什么的人很容易破坏它。
发布于 2009-06-05 13:33:42
问得好。我通常通过产生许多线程并让它们疯狂地执行我怀疑可能会受到竞争条件影响的操作来测试竞争条件。
也许你可以看看PNUnit --尽管它可能和你要找的东西有点不同。作者说,他们之所以构建它,是因为“我们需要在同一服务器上模拟数百个客户端”。
https://stackoverflow.com/questions/955561
复制相似问题