测试基础 APP 应用崩溃的测试方法

· 2015年05月28日 · 最后由 回复于 2015年10月15日 · 3303 次阅读

最近安卓环境测试 app 的时候总是碰到 app 崩溃的情况,且不是必现,故有以下疑问:

1、采用什么样的测试方案和测试方法才能更多的把 app 搞崩溃?
2、出了开发日志,测试方面有没有什么监控手段可以在 app 崩溃后给予分析崩溃原因的途径?
3、针对这些偶然且无规律的崩溃现象怎么能增加重现的几率?

以上问题希望大家有什么经验的多指教一下,谢谢。

共收到 17 条回复 时间 点赞

第一个问题嘛,我个人的经验是还是那句老生常谈—多测边界值

各种限制数字的边界值可以测数组也就,界面的极端操作可以测试界面的 view 框架调用错误什么的,还有设备的边界值:支持的设备最低版本的系统和设备,还有手机开启多个应用,让剩余内存和存储处于比较低的情况,容易测出错误的内存释放和其他这种内存存储低的情况下的问题,还有低带宽的边界测试,网速低的时候怎样什么的

第二个问题,你要找你们开发同学用 5 分钟帮个小忙了,可以做应用的崩溃检测

比如有个网站是http://bughd.com ,就是专门做崩溃分析你,你好不容易弄崩溃了,去开发那里如果不好复现就没办法了,开发也不好定位问题,让开发把这个网站的一个 SDK 放到应用里,只有你搞蹦了,他就能看到错误堆栈,能定位到哪个函数哪一行出错了,他方便你也方便

至于第三个问题

你用我我刚才说的崩溃分析检测,你不需要复现问题,搞出来一次开发就知道错哪了 ,你就大胆的测,只要崩溃都会有记录,有证据,省得开发说你复现不出来就改不了;而且因为同一个问题引起的崩溃会整理到一起去;比如你搞的两三种崩溃都是一个问题引起的,开发一看错误堆栈,改一行代码就解决三个崩溃问题。

以上是我的一点小小的经验之谈,坐等其他大神给出其他解决方案

#2 · 2015年05月28日 Author

@sarahzhao 非常感谢,希望大家可以都总结一下测试过程中的经验,更有利于测试

@sarahzhao界面的极端操作怎么测的?网速低需要等到网络不好的时候测试么?

#4 楼 @zgxlz 界面的极端操作是什么?

那啥。。。我要吐槽这个问题。

1、采用什么样的测试方案和测试方法才能更多的把 app 搞崩溃?
Monkey:其实 app 层面的话,的确只有增加 app 的内存值达到一个 limit 值,具体怎么看 limit 值你可以看我的专项测试的帖子
然后其实你应该从 app 的功能或者实现或者业务上面去进行测试 crash。这种才是有意义的。包括你问问题也是的,就是需要有针对性的问,单纯的去问 app 崩溃,就如同问我车子好不好用,又不告诉我什么车到底。

比如通过adb shell am start的方式对 Activity 启动的时候进行参数的插入,很容易出现 crash
比如通过 burpsuites 篡改业务数据,也很容易 crash
比如通过 Android 的一些特性,横竖屏啊。或者根据 Activity 不同的生命周期进行测试。

iOS 的话就更多了,比如双击,切换 app,比如断网络测试,当然也包括越狱,上面提到的篡改数据等。

2、出了开发日志,测试方面有没有什么监控手段可以在 app 崩溃后给予分析崩溃原因的途径?
Monkey:首先这个问题问的也不好。到底是什么日志呢?另外你说监控手段是说马上拿到崩溃的日志呢,还是自动化分析出来崩溃的原因。这些都不是很清楚。

那么一般来讲。大公司都是开发自己埋点,一个一个埋,有问题立马就返回服务端了。小公司么就会用 flurry,友盟或者 1L 同学说的各种工具来做。反正目前日志返回没有问题。分析的话要自动化其实也可以,就是正则去做,就是可能会复杂点。iOS 同样

3、针对这些偶然且无规律的崩溃现象怎么能增加重现的几率?
Monkey:偶然且无规律的 crash 其实很多。其实从我的经验来讲,我们更多的不要去增加重现的几率,而是更多的要让自己去更深入的理解 Android,iOS 等系统的机制,包括熟悉产品的代码,那么你就算碰见无规律的,根据经验也可以增加定位问题的概率。

简单来讲,举个例子。
比如说我们一般不会在 onDraw 或者 onMeasure 方法中去 new 对象,容易造成内存泄漏,crash 等。那么这些都是你需要去积累的经验。这种概率是很小,而且也不是通过模拟方式模拟的出来的。所以这才是正道。这也是我想告诉大家接下来测试的方向。

以上问题希望大家有什么经验的多指教一下,谢谢。
Monkey:我也希望大家问问题专业点,在这里谢谢大家了。

#15 · 2015年05月28日 Author

@zgxlz 模拟网速低应该可以使用 fiddler 工具模拟吧,延长服务器返回数据的时间不知道算不算。

#6 · 2015年05月28日 Author

@monkey 其实之所以问这个问题,是因为在今天自动化以及手动测试的过程中有 app 崩溃现象,且按照崩溃前步骤操作不能重现。并且由于目前没有嵌入分析日志的 SDK,所以问题不好定位。算是病急乱投医的一个问题吧。其实目的就是为了能更高几率的重现崩溃问题。

#8 楼 @hardworkingtester 嗯啊。我明白你的意思。我不是吐槽你。我就是吐槽这个问问题的方式。思考的方式需要更深入,而不是站在表面

#8 楼 @hardworkingtester 简单来讲每个人都是这样过来的,所以都有体会,明白的

@monkey 这也是我想问 1 楼的问题

#4 楼 @zgxlz 极端操作比较简单粗暴的就是狂点,或写脚本看快速的多个操作同时执行的时候,会不会崩溃。低带宽可以通过配代理的方式来来控制。
@xuxu 你这边经验蛮丰富的 哈哈 学习了:)

#1 楼 @sarahzhao bughd 在 ios 上效果好吗?
能看到错误堆栈,能定位到哪个函数哪一行出错吗?

http://beacon.tencent.com/
也可以试试这个哈

1.应用崩溃不可以抓 anr 日志或者 logcat 日志的么?出现了赶紧去抓一下,应该可以抓得到。
2.软件本身是否有打印日志,如果有,也可以一起拿给开发看。

试试 BugHD 看看

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册