思考--测试应该从代码中读懂什么

原创 2016年05月30日 22:38:21

前言:
作为系统测试工程师,你不需要对代码了如指掌,不需要掌握每一个方法,每一个逻辑,但是适当的阅读代码是有必要的。可是到底阅读到什么深度,需要掌握多少,这也是每一个测试工程师要面对的问题。阅读得浅了,往往会遗漏;阅读得深了,浪费时间,我又不是开发,也没必要,是不 @.@

分级理论:

为了更好地区分对代码的理解程度,个人主观是把开发代码分级了,这个分级个人主观偏多,如有不当,欢迎指出。
分级一共分为三级(表胡思乱想),下面对这个级别的小技巧分享一下。
一级:对于java来说,万物皆对象;对于android来说,万物皆运行在组件之上,而组件的老大,就是activity。因此,我们首先的入口就是从activity入手,准确的说是activity的生命周期入手。生命周期的定义就不说了,那么结合我所在的项目来说,最重要的就是onCreate()和onDestory()这两个函数,前者负责资源分配以及初始化,后者负责资源回收或者状态保存。
比如说github上面某个简单的开源项目

mWorkHandler = new WorkHandler(mWorkerThread.getLooper());
mWorkHandler.sendEmptyMessage(MSG_READ_ONLINE_PARAM_URL);
mWorkHandler.sendEmptyMessage(MSG_CHECK_DISK_SPACE);

比如上面的onCreate()方法里面的部分截取,看一下就知道是每次打开这个模块就开启了一个HandlerThread线程去检查磁盘剩余空间,以及去读取一些参数,那么一级逻辑看到这里就差不多了。

二级
前面的一级是顾名思义,测试其实已经完成大部分的逻辑,已经是知道的范围了,比如MainActivity的检查更新,安全认证啊等等,在需求文档不会设计到的地方,测试已经关注到了,那么二级是什么呢?那么我认为是在onCreate()方法之下,在具体算法之上的逻辑,比如读取一个播放器列表,一级就是知道什么时机去读取去解析去存储,二级就是这个列表是什么时候去替换旧列表,本地存储什么时候会被换掉,有没有通知其他关联模块去同步…再比如,前面分析robotium的时候,一级就是知道通过viewFetcher去查找控件,二级就是知道它是通过windowManager去得到decoderView,三级就是要掌握这么个算法去筛选我们需要的view。嗯,可能第二个例子可能好懂一点。

三级
三级其实就是具体的算法了,具体的函数了,更多的是作为工具类的定义。作为灰盒测试,其实这部分内容是属于兴趣范围,在三级逻辑下,更多的接入是单元测试,属于白盒测试功能师的范围啦,笔者目前也只是完成一些简单的单元验证,没法深入讨论的,其实很多网络上分析的一些框架,也是到这里就止住了,没办法,算法这东西,博大精深,但偏偏对灰盒测试工程师的作用也不大(除非你是测试开发:<)

对实际测试的益处

在有了理论的分类后,我们扒一扒好处吧
好处一:加深对逻辑的理解提高测试覆盖率
其实对于功能测试来说,最头疼的就是覆盖率,以及出问题被领导质问,功能测试流程一般是这样的:根据需求文档写用例–测试前和过程和开发沟通疑问点–测试完成。这个流程也是大多数测试人员的流程,包括之前的我,这么做没什么问题,但是却不够全面,问题出在和开发沟通上面,谢过一些程序的都知道我们不可能把所有逻辑都记住,意味着测试和你沟通的时候你不可能把所有写的逻辑都很好地列出来,导致测试的盲点,所以代码的粗读(指的是一级二级阅读)也都会很好地发现隐藏的彩蛋,哦不,是代码逻辑,那么据跳槽到bat的某同事讲也确实如此。

好处二:为单元测试和自动化做铺垫
自动化可不止测试当前界面存在,点击跳转正常就完了,在弄清楚代码逻辑后,做自动化可以明白数据的走向,让你的自动化不局限于界面的点点滑滑,而是深入到数据库,二进制文件的验证,效果无疑会好得多。

好处三:提高测试效率
当你知道模块重要数据的调用的时候,构造复杂数据测试显得容易的多了,改改就行了,比如我测试一个列表,只需要在循环里面add多次就行了,这样就产生了多倍数据,多个方便啊。

好处四:对性能还是有些用处的
研究性能已经有段时间了,效果也还可以,所以现在习惯的看代码的时候,看到注册回调了,马上想到在模块退出有没有反注册;在消息中开启多线程处理任务的时候,马上去检查onDestory有没有remove所有消息;各种try…catch资源的时候,也会反射性去看看finally有没有关掉… …这些,都是在学习中不知觉养成的习惯,所以说还是有些用处的

好处N:
对自己未来有好处,加强语言阅读能力,简介提高编码能力,学习开发的思路,巴拉巴拉,差不多就这些了,今天就扯这么多吧,嘿嘿。

版权声明:本文为博主原创文章,转载请说明出处!

相关文章推荐

基于python实时监控cpu的小工具

虽然写的很不完善,但是当练手吧,对于实时监控cpu还是有点用处的,虽然android studio已经提供了一样的功能,但是能够记录并生成成本地csv文件还是比as多一个功能的。 结果图: 直接...

Android App测试分析方法(总结 && 重写)

前言: nick说过,没个人都要有一套自己的测试方法,针对模块有一套自己的解决思路,之后一直在寻找。这就是个人的测试分析思路, 元素分析: 这里之前一篇只分析了静态的元素,经过工作中实践后应...

珊蝴虫QQ2010.12.01冷血影免安装版

珊瑚虫qq2010冷血影免安装版有显ip版功能,还有显隐身功能,珊瑚虫qq2010冷血影免安装版显ip版挂珊瑚虫外挂,完美显ip版显隐身。 腾讯QQ2010新珊瑚虫冷血影免安装版:除了具有QQ2...

1000行代码读懂Spring核心

  • 2014-05-29 14:09
  • 23.97MB
  • 下载

如何读懂代码

  • 2011-11-19 13:54
  • 2.15MB
  • 下载

如何读懂并写出装逼的函数式代码

今天在微博上看到了 有人分享了下面的这段函数式代码,我把代码贴到下面,不过我对原来的代码略有改动,对于函数式的版本,咋一看,的确令人非常费解,仔细看一下,你可能就晕掉了,似乎完全就是天书,看上去非常装...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)