多线程程序,只有黑盒测试是不够的!

今天记一下工做经验吧。

在不少软件中,都会有进度条,进度条显示了另一个线程的工做进度。
咱们的项目也有这样的一个进度条,测试同窗那边发现,在他的测试环境,必现一个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)!

因此, 只靠黑盒测试去保证多线程程序的质量,是多么不靠谱!
相关文章
相关标签/搜索