本文主要是介绍【腾讯Bugly干货分享】经典随机Crash之一:线程安全,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
本文作者:鲁可——腾讯SNG专项测试组 测试工程师
背景
Android QQ 在2016下半年连着好几个版本二灰 Crash 率都很高,如果说有新需求,一灰的 Crash 率高,还能找点理由,可是开发童鞋解过一灰的 Crash 单后,为啥二灰还有这么高的 Crash 率,我们还有覆盖全 SNG、不少外 BG 明星产品的终端稳定性测试工具 NewMonkey 随身版(NewMonkey系腾讯内部研发的测试工具,外部app有兴趣请点击这里填问卷调查申请使用)每天都在跑,更何况大多 Top Crash 都发生在用户使用很普通、很频繁的场景,实在令人匪夷所思,那段时间抄送各老板的运营邮件 Crash 率数据天天标红,项目组人心惶惶,发个版本感觉要烧高香,当时作为 Android NewMonkey 核心成员的我更是压力山大,在这样的背景下,我临危受命,负责研究外网 Top Crash,尽可能找到一些共性问题,在研究过程中,得到开发的大多反馈是:
问开发:这个 Top Crash 能找到复现场景吗?答:场景就在这里,但就是复现不了
这里有个线程安全问题,那我加个同步;这里有个空指针,那我就加个判空
一时间我也陷入深深的困扰:
代码是开发写的,开发都复现不了,我更复现不了啊
会 Crash 的代码在那,开发就改了,完全是头痛医头脚痛医脚的做法,作为一个测试,我还能做啥呢?
当时的心情真的是如图所示:
然而作为一名专项测试,如果只是看到这些表象,是远远不够的,也感谢老大一直对我的激励:“一切你复现不了的 Crash,那都是你没有找到问题的根源。”我当时给自己的目标是“一定要复现,有条件要上,没有条件创造条件也要上。”
线程安全问题的现状
《Bugly2016移动应用质量大数据报告》提到:
空指针异常在Java代码中最为常见,不出所料,
NullPointerException
依然是最常见的Java异常,该异常影响面广但容易修复,开发者想快速降低崩溃率可以优先解决此类异常。相较于2015年,IllegalStateException
从5%提升至10%,OutOfMemoryError
从3%提升至6%。
——数据源自腾讯Bugly
IllegalStateException
主要是由线程引起的,本篇就线程安全类问题与您一探究竟,我将向您展示研究过程中的乐趣以及最终取得的效果,另外解密我申请的两个线程领域的专利。
我们先来看一种具有代表性的Crash,这里以一次灰度的Top 1 Crash为例子,至于这个Crash的引入原因,开发童鞋为了修改性能bug,将方法放到了线程中执行,我省去中间几百行代码,抽取出代码梗概。
类中声明了一个成员变量mTask
这篇关于【腾讯Bugly干货分享】经典随机Crash之一:线程安全的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!