多線程程序,只有黑盒測試是不夠的!

今天記一下工做經驗吧。

在不少軟件中,都會有進度條,進度條顯示了另一個線程的工做進度。
咱們的項目也有這樣的一個進度條,測試同窗那邊發現,在他的測試環境,必現一個bug:主界面的進度條進度一直爲0。

很鬱悶的是,我用本身的電腦,不管是win7和win8,都不能重現這個bug......

難道是UI繪製的問題?不,感受不像,接着,我把子線程向UI上報的進度逐一打印出來:
10 20 30100 0
很明顯,子線程的工做已經作完了,但是最後上報了進度0!
並且,子線程的工做時間極短,因此用戶也察覺不到是進度條到了100再變回0的!

出問題的僞代碼以下:
void func() 
{
    beginCopy(); // 該函數建立一個線程copy,而後根據進度調用updateProgress更新UI
    updateProgress(0); // 初始化進度條
}
updateProgress移到beginCopy以前便可解決該bug。

咱們的軟件發佈了這麼久,也通過了不少測試,爲何一直沒發現這個bug呢?
能夠想到,上報的進度0,只要不是在beginCopy線程徹底退出後執行,用戶是不會有感知的,而剛好在某個測試環境下,beginCopy線程是徹底退出後纔會執行updateProgress(0)!

因此, 只靠黑盒測試去保證多線程程序的質量,是多麼不靠譜!
相關文章
相關標籤/搜索