上海软件测试培训
达内上海市场营销中心

156-9073-2366

热门课程

上海软件测试培训班案例分析:一个BUG引发的血案

  • 时间:2018-02-27
  • 发布:上海软件测试培训
  • 来源:达内新闻

软件测试人员的世界中总会有那么几个漏网的bug引发惨绝人寰的血案。作为一名高级软件测试工程师,能杜绝这类事情发生不单要靠技术,还需要有丰富的测试案例及分析,一起进入上海软件测试培训班课堂,来剖析血案背后的真相。

上海软件测试培训班

上海软件测试培训班:起因

有用户反馈,应用首页的 4 个 tab 在使用了一段时间之后 reselect 重复点击选中时没有触发刷新,并且是小概率事件。本地进行代码排查。

上海软件测试培训班:排查过程

反馈得到2 个信息:1,点击 tab 没有反应(说明执行过程遇到错误);2,点击 tab 没有崩溃(说明这个错误没有引起闪退)。

看了代码后发现,逻辑上并没有条件判断的 return 逻辑,并且在监听 tab 的事件上使用了 RxJava ,所以很可能是 RxJava 吃掉了本该引起崩溃的异常。

再往排查,发现事情可能没有这么简单,这个异常是一个空指针异常,表示某个 ui 控件的成员变量没有初始化。

ui 控件的成员变量初始化是交给 butterknife 的;butterknife 的逻辑是在 Fragment 的 onCreateView 方法中执行;说明这个 onCreateView 的生命周期方法没有被执行到,反思,这个问题很可能和 savedInstanceState 有关。

软件测试中bug排查2

为什么onCreateView 的生命周期方法没有被执行到?上海软件测试培训班

按逻辑推理:一般和 tab 组合使用的 Fragment 会用到 FragmentPagerAdapter ,而我们在对 Fragment 做重用(即利用 savedInstanceState 进行初始化)的时候,不仅仅需要考虑 Fragment 自身的恢复,还要考虑 Fragment 所包含的成员变量的恢复。对于初始化逻辑嵌套好几层的来说,就需要传递好几层的savedInstanceState ,但代码中明显是漏掉不少的。

上海软件测试培训班:如何做恢复?

问题已经有了头绪,那么接下来就是分析解决问题的时候了,按照正确的流程来走,软件测试工程师这时候应该重新思考,到底什么时候需要做恢复。

1.首页的这 4 个tab对应的 fragment 是不需要做恢复的;

2.在有用户输入的场景(如果没有备份的草稿逻辑,需要做恢复);

3.在数据量不大的关键 ui 上需要做恢复。

去掉恢复逻辑后,处理过程中发现了其他的问题: Fragment 这个东西坑特别多,因为这个东西可以 new 出来,但又有 Activity 类似的生命周期。那么在写代码的时候就要特别注意。

4.尽量不要增加不必要的 public 方法;

5.所有的非生命周期 public 方法都要进行 isAdded 的判断和 final 关键字防止 Override;

6.上海软件测试培训班小编提醒大家,需要大家注意的是:setUserVisibleHint 这个方法是不保证在生命周期内的。

上海软件测试培训班:再次排查

到这里就结束了么?再次排查又发现问题:也是不保留活动引起的(或者说使用了很长一段时间,中间只用 home 键切出)。用户描述如下:打开若干个页面后,按 home 键切回桌面,再进入后,右滑返回动画异常。

上海软件测试培训班:这个问题的原因是切回桌面的时候 MainActivity 被销毁了,再次进入后又重新创建,但其他几个 activity 并没有重新创建(推测是由于 MainActivity 的 singleTask 属性),而右滑返回的动画是依赖于 ActivityStack (手动维护)的,很明显 MainActivity 从 Stack 的栈底被加到栈顶了,造成了动画的异常。

解决方法也比较简单,新增一个叫做 ActivityStackBottom 的接口让 MainActivity 去实现,然后代码如下:

@Override

public void onActivityCreated(Activity activity, Bundle savedInstanceState) {

if (activity instanceof ActivityStackBottom) {

mActivityStack.add(0, activity);

} else {

mActivityStack.add(activity);

}

}

这样就确保 MainActivity 永远在栈底了。

在很多时候,解决恢复问题并不是完善恢复逻辑,而是先思考需要恢复的场景。我们并不一定要从技术来突破软件测试的瓶颈,有时候实践中的案例更能让我们总结出经验。-达内上海软件测试培训班

上一篇:上海软件测试培训班课程重点:测试清单有多重要
下一篇:软件测试工具尝鲜:阿里自动化测试dom平台

软件测试培训学费多少?0元入学学什么

软件测试培训学费多少?120天可以上岗拿薪吗?

软件测试工具尝鲜:阿里自动化测试dom平台

上海软件测试培训班案例分析:一个BUG引发的血案

选择城市和中心
贵州省

广西省

海南省

免费学习5天VIP课程