博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多线程程序,只有黑盒测试是不够的!
阅读量:7014 次
发布时间:2019-06-28

本文共 638 字,大约阅读时间需要 2 分钟。

hot3.png

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

你可能感兴趣的文章
Docker Nginx 静态资源部署
查看>>
DSA数字签名算法
查看>>
Mongodb Mac安装
查看>>
中间件事务码R3AC1里Block Size的含义
查看>>
实战Android 上推下拉——隐藏、显示ActionBar
查看>>
GDB 调试 Mysql 实战(二)GDB 调试打印
查看>>
Spring AOP(三) Advisor类架构
查看>>
LeetCode 316. Remove Duplicate Letters
查看>>
第十三课时:递归组件的使用
查看>>
【跃迁之路】【712天】程序员高效学习方法论探索系列(实验阶段469-2019.2.2)...
查看>>
SpiderData 2019年2月18日 DApp数据排行榜
查看>>
react-refetch的使用小例子
查看>>
周末游攻略 - 南昌之行
查看>>
tcpdump查看Nginx长连接还是短连接
查看>>
Vue+thinkJs博客网站(二)之thinkJs的使用
查看>>
Electron学习笔记:主进程与渲染进程的通信方式
查看>>
JVM(六)为什么新生代有两个Survivor分区?
查看>>
Spark是一种基本的开源大数据技术
查看>>
Iterator 和 for...of 循环
查看>>
Font-face目前浏览器的兼容性
查看>>