案例描述
在日常测试中,当程序加载数据文件时,经常会出现页面卡住、程序不响应、程序崩溃等情况。,调查发现与程序进程中线程的同步和异步有关。
问题描述:
使用文件查看器打开压缩文件时,程序没有响应。
问题原因:
1、经过调查发现,文件查看器打开压缩文件时,会遍历压缩文件中的所有资源,在遍历过程中,出现资源解析错误会导致任务阻塞。
2、经过进一步了解,我们发现开发实现该功能时,资源遍历线程放入主线程同步加载,所以当资源遍历线程被阻塞时,主线程没有响应。
解决方案:
1、对资源遍历线程的阻塞场景增加保护,保证遍历线程的正常执行。
2、将资源遍历压缩文件线程从主线程放到子线程,形成异步加载,避免单线程失败导致主线程直接挂机,影响程序使用。
从以上案例可以看出,在逻辑实现中使用同步或异步线程对于提高程序效率和保护主线程非常重要。
扩展思维
1、开发层面的线程使用:
1) 使用线程的场景:
①当手机APP程序模块需要加载框架+内容时,使用线程效率更高;
②优化程序性能时,更倾向于使用线程。
2) 线程同步和异步在程序中的应用:
①主线程执行任务时,异步任务在子线程中执行。主线程可以在主线程上完成操作,而不需要等待子线程的结果返回,然后调用回主线程完成整个过程。这是线程的异步加载操作,可以提高执行效率(如下图);
②当主线程正在执行任务1时,需要等待任务1的响应完成后才能启动任务2。如果任务1被阻止,整个过程将无法继续。这样的同步线程对执行效率影响很大(如下图所示)。
2、线程对测试的影响:
1) 线程对用例设计的影响:
①数据流加载类的作用。这些功能大部分是异步线程,测试用例的设计可以从网络级和负载级来考虑。
②JS注入类的功能。这些函数大部分都是同步线程,所以可以从注入JS函数的有效性和JS注入的时机来考虑测试用例的设计。
2) 线程对程序性能的影响:
①从安全性和性能的角度来看,同步线程虽然解决了线程的安全问题,但始终存在判断锁,导致性能下降;
②与同步线程相比,异步线程对程序性能有积极影响,效率更高。一般建议在APP程序中使用异步线程,以保证程序效率。
注: 在安全和性能之间,安全是第一考虑因素,其次是性能。
理解程序实现的逻辑在测试工作中是必不可少的。只有更仔细、更清晰地了解,才能对检测方案有更全面的思考,从而保证产品质量。在这里,希望朋友们在技术上越来越好,在软件测试上越来越高!