【发布时间】:2011-01-27 02:56:39
【问题描述】:
我有一个成熟的地理空间软件,最近重写了一些区域,以更好地利用现代 PC 中可用的多个处理器。具体来说,显示、GUI、空间搜索和主处理都被划分为单独的线程。该软件有一个相当大的用于功能回归的 GUI 自动化套件,以及另一个用于性能回归的较小的自动化套件。虽然所有自动化测试都通过了,但我不相信它们在查找与竞争条件、死锁和其他与多线程相关的问题相关的错误方面提供了几乎足够的覆盖率。您将使用什么技术来查看是否存在此类错误?假设有一些可以根除的技术,你会提倡什么技术来根除它们?
到目前为止,我正在做的是在调试器下运行的应用程序上运行 GUI 功能自动化,这样我就可以打破死锁并捕获崩溃,并计划构建边界检查器并针对它重复测试版本。我还通过 PC-Lint 对源代码进行了静态分析,希望找到潜在的死锁,但没有任何有价值的结果。
应用程序是 C++、MFC、多文档/视图,每个文档有多个线程。我正在使用的锁定机制基于一个对象,该对象包含一个指向 CMutex 的指针,该指针在 ctor 中锁定并在 dtor 中释放。我根据需要使用该对象的局部变量来锁定各种代码位,并且我的互斥体有一个超时,如果达到超时,我会发出警告。我尽可能避免锁定,而是尽可能使用资源副本。
您还会进行哪些其他测试?
编辑:我已经在许多不同的测试和编程论坛上交叉发布了这个问题,因为我很想看看不同的思维方式和思想流派将如何解决这个问题。因此,如果您看到它在其他地方交叉发布,请道歉。我会在一周左右后提供回复的摘要链接
【问题讨论】:
标签: c++ multithreading testing mfc