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

本文详细记录了一次在多线程程序中遇到的进度条显示异常现象,从黑盒测试的角度出发,深入分析了问题产生的原因,并提供了有效的解决方案。通过案例分享,强调了在多线程环境下,依赖于UI反馈的逻辑设计需要特别注意的事项,以避免潜在的错误和混淆。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天记一下工作经验吧。

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

所以, 只靠黑盒测试去保证多线程程序的质量,是多么不靠谱!

转载于:https://my.oschina.net/u/1453800/blog/268458

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值