背景:手机管家目前有 6 年多的历史了,一直在持续不断的加入新特性,每次发布前除了新增功能之外,旧的核心功能也是发布之前必须确保的。
精简的收益与目标
鉴于以上分析,用例精简值得做,且会有很大收益。
解决的思路
知道了精简的必要性之后,思考要怎么去执行,时间 + 成本最小的做法,我认为如下:
1.改造用例
了解实现原理,将用例按照代码实现方式来分类,比如手机管家。
1.1 代码实现方式:插件
1.2 划分功能用例功能模块
尽量完全独立,与其他功能模块少交互,这样才有利于第三部的划分,有耦合的也没有问题,只是相对应的插件会更多,见第三点
1.3 理清功能模块与插件的关系
1、一般一个插件是一个主要的功能模块,这是最理想的状态
2.、事实是,大部分的插件也会遵循一个插件是一个主要的功能模块,但是为了减少代码量或是其他原因,有时候会做一些移动,把某些的代码放到其他名字看上去完全不相关的插件里
3、要做的就是把上述 2 点,哪个功能模块的实现分别在哪几个插件中的对应关系整理清楚
1.4 修改功能用例的模块
按照第三点都把功能用例对应的功能写清楚,基本全部能够直接对应到插件,这样后面的执行有利于筛选
2.分配功能模块的优先级
按照功能的重要性,分配每个功能模块的优先级,功能复杂的模块用时会多些,最后按照优先级以及耗时制定计划。制定计划清晰又有每个阶段应该做什么怎么做,避免浪费时间。
用例与计划都准备好之后,就可以开始精简之路了。
3.开始精简
精简方法:经验沉淀+代码覆盖率+知识库
采用先减后加,放开胆子去删的思路
覆盖率采用方法覆盖,工具为 emma 的二次开发工具—代码覆盖率平台
3.11 级用例删减
1 级用例的删减,采用采供过滤的方式,后面再查缺补漏即可。
1、1 级用例中与当前版本不符的用例降级
分析这些用例应该是 2 级还是 3 级,确定之后标注好,这里尤其要注意那些历史问题,这一步完全可以让外包同学做,接口人 review 就好。
2、执行用例,查看代码覆盖率
此时一般都在 50% 左右,因为主路径基本都已涵盖
需要注意的是,这 2 步做完还不需要具体去分析没有覆盖到的代码,毕竟 1 级用例的占比不会太多,为了能够减少工作量,下文会提到什么时候才是合适的时机去分析没有覆盖到的代码。
3.22 级用例删减
现在开始进行 2 级用例的删减,一般来说 2 级用例是量最大的,1 级和 3 级用例都只占一小部分而已,所以最大的工作量在这里。
1、人工删减
人工删减 2 级用例要做到大胆的删,原则是只留属于主路径和重要的异常路径,其他全部降为 3 级
2、执行,查看代码覆盖率
这时代码覆盖率一般都在 70% 左右,接下来要开始分析代码了。
小 tips:我做了 8 个插件,最后得出我认为最快捷的方式,举例为 java 代码,分析路径 package-class-method。
3.3.1 第一步的目标
消除所有 0% 的 package,即每个 class 的 method 覆盖不为 0,一般最多 2 次
找出所有 0% 的 package 分析,可以自己走读代码,也可以咨询相应对模块的开发,为了省时,我在开始精简代码开始之前已经找过开发负责人,每个插件都有对应的开发负责人接口。
1、查看 package 下的每个 class,分析百分之 0 的原因,确认这个 package 的作用,有以下三种操作
a) 冗余
b) 忽略
例如:数据库升级
覆盖安装及对应的读写数据库
其他完全不相关的插件调用使用的
c) 确认遗漏的,补充 package 和 class 的知识库,添加模块相应注释
2、根据注释补充用例,并确定优先级
3、执行,检查覆盖率是否还有 0%
a) 还有为 0 的要分析为什么之前补充的用例没有覆盖到?
注释有误,修改用例,接着重新执行
模块已废弃不用,路径跑不到,因为历史遗留代码的问题,开发对于代码的反应一般都是害怕错删,标注冗余
这一轮一般做 2 轮左右就 ok 了,如果执行的时候大于 2 轮,那要好好思考下第三点所提到的没覆盖的原因,是否是需要提高注释的质量等。
3.3.2 第二步的目标
全部的 package 覆盖率达到 50% 以上,即每个 class 的 method 覆盖大于等于 50%,次数在 3 次以内
1、package,根据覆盖率分为 2 类,大于 50%,小于 50%
1) 小于 50% 的 package,按照从小到大的顺序排序划分
再将每个 package 中的 class 的 method 覆盖小于 50% 的的 class 按照从小打到的顺序划分
分析 class 下 method 覆盖为 0 的,具体分析方式跟 package 为 0% 一致详见 3.2.2.1
分析 class 下 method 覆盖小于 50% 的
做完 3.2.2.1 和 3.2.2.2 描述的 2 步,一般覆盖率就达到了 80% 左右。
3.3.3 第三步的目标
每个 class 的 method 覆盖于大于等于 90% 左右,一般要 5 次左右
这个过程是整个流程中耗时最长,但增加最少的阶段,因为牵扯到细节,所以要耐心,全局查看 method 覆盖从小到大的 class 挨个分析。整个过程最好保留基线和已上传的 ec,一直更新 EC,再查看。
3.3.4 第四步的目标
人工审核,查缺补漏
覆盖率只是个数据,并且是辅助工具,如何做到上线前的,主线集成的用例够精简且不会遗漏,精简后还需要再人工审核一遍,我的具体做法是:
1、主路径:
打开 app,按照插件来检查每个模块的用例,app 中能看到的所有入口必须涵盖在 1 级用例中。
2、用户常用场景:
将用户常用场景按照模块列出来,对照相对应的用例,1,2 级用例必须全部涵盖。
3、运用集体智慧:
人的经验转换,一起共同测试的同学聚在一起,按照模块一起 review 用例,觉得哪里有遗漏,按照经验什么地方经常出问题,是否需要增加用例,PK 之后觉得合理的加入。
4、线上缺陷&线上反馈:
版本发布后,根据线上缺陷&线上反馈来检查,是否是测试用例遗漏造成的,分析线上缺陷的根因,根据严重等级和用户反馈数来决定是否要添加用例,以及应该添加到哪个阶段最合适。
4.精简收益
1.用例精简效果,远大于目标
2.测试时间,精简之后的用例,历经 2 个版本,集成时间在 0.5 内,上线前时间 2h。
5.后期验证与维护
1.维护:
(与当前版本不符的 1 级用例,即历史某个版本的 1 级用例,尤其是本次新添加的用例)规避:每次版本结束后归档时,新增内容优先级修改,FT 集成,主线集成,上线前的用例明确,不要再留有历史 1 级用例
2.验证:
主线集成,上线前,灰度,线上 bug 跟进,看是否有 bug 是因为精简用例而造成的缺失,分析并查缺补漏,目前已经历了 3 个大版本,截止目前为止只有灰度期间发现的 1 个一般问题,补充上线前用例 1 条。
原文链接:http://tmq.qq.com/2016/12/cases_precision_testing/
关注我们的微信公众号查看完整内容哦~~~~
想知道更多测试相关干货
请关注我们的微信公众号:腾讯移动品质中心 TMQ
二维码:
版权声明:腾讯 TMQ 拥有内容的全部版权,任何人或单位对本贴内容进行复制、转载时请申明原创腾讯 tmq,否则将追究法律责任。