2009-06-05 81 views
15

您有任何建議如何測試多線程應用程序?如何測試線程安全

我知道,線程錯誤是很難抓到他們可能隨時發生 - 或者根本沒有。測試是困難的,並且結果從未確定。當然,最好仔細設計和編程併發模塊。
儘管如此 - 我不想忽略測試方面。因此,運行大量線程都可以處理相同的項目,有時可能會調用線程錯誤。

任何想法或最佳實踐,以獲得隱藏的線程錯誤的高命中率?
(我正在使用.Net/C#)

+0

這裏有一個類似的問題:http://stackoverflow.com/questions/111676/unit-testing-a-multithreaded-application – 2009-06-05 12:19:38

+0

謝謝,我有一個環顧四周,但沒有找到這一個。 – tanascius 2009-06-05 12:25:22

回答

11

你可以使用一些很好的工具來測試所有的線程問題,比如數據競爭,死鎖,失速線程等。 intel-thread-checker就是這樣一個很好的工具。

您也可以嘗試,CHESS由微軟研究院

5

嘗試將線程數增加到很大數量(如果可能的話),甚至超過在發行版中使用的線程數。由於運行程序的線程數量很多,因爲運行代碼的線程越多,出現錯誤的頻率越高。

仔細檢查您的聲明,鎖定,解鎖,信號計數等,並確保他們是有意義的。

創建測試文檔或電子表格,並使用你的代碼的知識,想在那裏可能發生可能的競爭條件或死鎖。

抓住一些人從大廳和做一個「走廊可用性測試」(喬爾的軟件說我想的?)。一般來說,不知道你的程序做什麼/關於什麼的人將能夠輕鬆地打破它。

2

好問題。我通常通過產生許多線索來測試競賽條件,並讓他們瘋狂地執行我懷疑可能會受到競爭條件影響的操作。

也許你可以看看PNUnit - 雖然它可能來自你正在尋找一點點不同。作者說他們構建它是因爲「我們需要在同一臺服務器上模擬數百個客戶端」。

-1

調用線程例程的grep代碼。如果發現任何錯誤,則測試失敗,因爲您的代碼存在多線程錯誤。

如果通過,擴大搜索範圍,您使用的庫的部分,直到它失敗或(不太可能)被證明是線程安全的(即單線程)。

一旦你知道你有線程錯誤,測試部分的工作就完成了。所有剩下的就是尋找和刪除它們的小問題...