您有没有任何建议如何测试多线程应用程序?
我知道,线程错误非常难以捕捉,它们可能随时发生 - 或根本不会发生。测试很困难,结果永远不确定。当然,最好仔细设计和编写并发模块。
尽管如此 - 我不想忽略测试方面。因此,运行许多同时处理相同项目的线程可能会调用线程错误。
有什么想法或最佳实践,可以获得高命中率的隐藏线程错误吗?
(我正在使用.Net/C#)
您有没有任何建议如何测试多线程应用程序?
我知道,线程错误非常难以捕捉,它们可能随时发生 - 或根本不会发生。测试很困难,结果永远不确定。当然,最好仔细设计和编写并发模块。
尽管如此 - 我不想忽略测试方面。因此,运行许多同时处理相同项目的线程可能会调用线程错误。
有什么想法或最佳实践,可以获得高命中率的隐藏线程错误吗?
(我正在使用.Net/C#)
您可以使用一些好的工具来测试所有线程问题,例如数据竞争、死锁、阻塞线程等。其中一个好的工具是intel-thread-checker。
您还可以尝试微软研究院的CHESS。
如果可能的话,请将线程数增加到一个很大的数字,甚至超过发布中将要使用的数量。运行许多线程的程序会更容易出现错误,因为更多的线程正在运行代码。
仔细检查你的声明、锁定、解锁、信号量计数等,并确保它们是合理的。
创建一个测试文档或电子表格,并利用你对代码的了解,思考可能发生竞争条件或死锁的地方。
从走廊里找些人进行“走廊可用性测试”(Joel on Software好像说过这个?)。通常,那些对你的程序不知所措的人很容易就能破坏它。
搜索调用线程例程的代码。如果找到任何线程相关的代码,则测试失败,因为您的代码存在多线程错误。
如果测试通过,请将搜索范围扩展到您使用的库的部分,直到测试失败或(不太可能)证明是线程安全的(即单线程)。
一旦确定存在线程错误,测试工作就完成了。剩下的只是找到并消除它们这个小问题...