编程进阶网编程进阶网
  • 基础组成体系
  • 程序编程原理
  • 异常和IO系统
  • 六大设计原则
  • 设计模式导读
  • 创建型设计模式
  • 结构型设计模式
  • 行为型设计模式
  • 设计模式案例
  • 面向对象思想
  • 基础入门
  • 高级进阶
  • JVM虚拟机
  • 数据集合
  • Java面试题
  • C语言入门
  • C综合案例
  • C标准库
  • C语言专栏
  • C++入门
  • C++综合案例
  • C++专栏
  • HTML
  • CSS
  • JavaScript
  • 前端专栏
  • Swift
  • iOS入门
  • 基础入门
  • 开源库解读
  • 性能优化
  • Framework
  • 方案设计
  • 媒体音视频
  • 硬件开发
  • Groovy
  • 常用工具
  • 大厂面试题
  • 综合案例
  • 网络底层
  • Https
  • 网络请求
  • 故障排查
  • 专栏
  • 数组
  • 链表
  • 栈
  • 队列
  • 树
  • 递归
  • 哈希
  • 排序
  • 查找
  • 字符串
  • 其他
  • Bash脚本
  • Linux入门
  • 嵌入式开发
  • 代码规范
  • Markdown
  • 开发理论
  • 开发工具
  • Git管理
  • 百宝箱
  • 开源协议
  • 技术招聘
  • 测试经验
  • 职场提升
  • 技术模版
  • 关于我
  • 目标清单
  • 学习框架
  • 育儿经验
  • 我的专栏
  • 底层能力
  • 读书心得
  • 随笔笔记
  • 职场思考
  • 中华历史
  • 经济学故事
  • 基础组成体系
  • 程序编程原理
  • 异常和IO系统
  • 六大设计原则
  • 设计模式导读
  • 创建型设计模式
  • 结构型设计模式
  • 行为型设计模式
  • 设计模式案例
  • 面向对象思想
  • 基础入门
  • 高级进阶
  • JVM虚拟机
  • 数据集合
  • Java面试题
  • C语言入门
  • C综合案例
  • C标准库
  • C语言专栏
  • C++入门
  • C++综合案例
  • C++专栏
  • HTML
  • CSS
  • JavaScript
  • 前端专栏
  • Swift
  • iOS入门
  • 基础入门
  • 开源库解读
  • 性能优化
  • Framework
  • 方案设计
  • 媒体音视频
  • 硬件开发
  • Groovy
  • 常用工具
  • 大厂面试题
  • 综合案例
  • 网络底层
  • Https
  • 网络请求
  • 故障排查
  • 专栏
  • 数组
  • 链表
  • 栈
  • 队列
  • 树
  • 递归
  • 哈希
  • 排序
  • 查找
  • 字符串
  • 其他
  • Bash脚本
  • Linux入门
  • 嵌入式开发
  • 代码规范
  • Markdown
  • 开发理论
  • 开发工具
  • Git管理
  • 百宝箱
  • 开源协议
  • 技术招聘
  • 测试经验
  • 职场提升
  • 技术模版
  • 关于我
  • 目标清单
  • 学习框架
  • 育儿经验
  • 我的专栏
  • 底层能力
  • 读书心得
  • 随笔笔记
  • 职场思考
  • 中华历史
  • 经济学故事
  • 01.测试规范案例
  • 02.App自测规范

02.App自测规范

目录介绍

  • 01.概述说明
  • 02.兼容性覆盖
  • 03.多端覆盖
  • 04.异常覆盖
  • 05.关联覆盖
  • 06.核心流程覆盖
  • 07.集成覆盖
  • 08.新老版本覆盖
  • 09.CI覆盖

01.概述说明

  • App质量问题是个很大的Topic,为了最终达成优秀的线上质量,需要在全流程各个环节都通过流程与技术相结合的方式做好约束,QA只是质量保证的一个环节,且较为后置,研发更应该对自己的交付质量做好前置性的保障,自测是个很重要的环节。
  • 业务场景复杂,自测要关注的维度很多,在尽可能保证效率的情况下要提高自测质量,需要一套可行且全面的自测规范来引导思路,梳理了一套规范,主要包括8个方面:
  • 兼容性覆盖;多端覆盖;异常覆盖;关联覆盖;核心流程覆盖;集成覆盖;新老版本覆盖;CI覆盖

02.兼容性覆盖

2.1 兼容性说明

  • 说明:App开发受限于Android/iOS系统变更和一些机型碎片化问题,兼容性问题是经常被提及的重要方面,但不是所有代码都涉及到兼容性问题。
  • 准则:一般认为与系统/机型的差异化密切相关的高危点需要做兼容性测试。(Android推荐云测平台:http://mcloud.intra.xiaojukeji.com/remote/#!/devices)

2.2 常见场景

  • 使用高版本系统API,低版本直接不支持造成Crash
  • 使用低频、不常见、项目中没用过的API,虽然API不存在高低版本区分问题,但很可能会因为不熟悉,导致一些兼容性表现被忽视
  • 引入新的SDK,包括集团内SDK与开源SDK,引用量大的SDK一般在兼容性方面表现较好,但仍需做好回归验证,比如引入Lottie
  • 复杂UI开发/动效开发/自定义View等,复杂UI/动效/自定义View容易在特殊机型/小屏等出现与预期不一致的表现,比如换行异常、截断、动效轨迹错误等
  • 功能命中Android/iOS官方明确提出的系统特性差异,比如典型的权限适配、存储适配等,需要重视兼容性覆盖
  • 大规模的功能改版/重构,无需原因,必须做兼容性覆盖

03.多端覆盖

  • 说明:既要保证功能在多个产物的稳定性,又要尽可能提高效率。
  • 准则:一般认为在时间充足的情况下应该做全端测试,在时间有限的情况下应该对一些多端敏感型场景做好覆盖测试。

04.异常覆盖

4.1 异常覆盖说明

  • 说明:大部分情况下,产研都只关注到了正常的业务主流程,但对于很多异常分支(包括业务异常分支、代码异常分支)关注不够,导致后期花大量时间对异常情况做处理,时刻保持异常覆盖意识才能避免后期的被动。
  • 准则:一般认为代码中涉及到if-else、onFailure、onException、null、empty、nil 等场景,需要做异常覆盖测试。

4.2 常见场景

  • 网络数据请求,只关注data != null,error_code = 0的情况,忽略可能出现的网络/服务异常/时序问题
  • try-catch代码中,只处理try不处理catch,上线后出现严重的异常状态或执行流程
  • 只对异常分支逻辑提供了 Assert 断言,便于在 DEBUG 模式下发现问题,而未对异常分支逻辑进行降级处理,易造成线上逻辑错误
  • 对List类型数据做remove、insert等操作时,不考虑列表长度可能为空、为1时的range异常,导致严重Crash

05.关联覆盖

5.1 关联覆盖说明

  • 说明:在大部分规模较大的应用系统中,代码之间都会存在千丝万缕的关联,尽管可以通过一些工程化手段尽量提高内聚降低耦合,但合理的代码关联与引用还是很常见,现代IDE都会提供代码关联查看功能。
  • 准则:代码常见操作(M-修改,A-新增,D-删除),每种操作都可能直接/间接的导致与之关联的模块出现问题,都需要小心测试。

5.2 常见场景

  • A-新增,该操作大部分情况下不会影响其他模块,但需要关注新增的代码是否包含一些间接的关联因素,例如新增了个SPI实现类,会被SPI Loader运行时动态加载,编译期无任何引用
  • D-删除,该操作大部分情况下不会影响其他模块,因为相关联模块在编译期会直接报错,但需要关注删除的代码可能包含一些间接的关联因素,例如包含被反射调用的代码、SPI实现类等
  • M-修改,该操作出现问题的场景要多很多,一般需要通过IDE检查所有关联,并确认每处引用是否受影响:

06.核心流程覆盖

  • 说明:核心流程覆盖一般在发版前QA都会做重点关注验证,正常feature级别开发一般不会涉及到核心流程验证,但如果修改面涉及到底层代码、通用业务能力等,是需要做核心流程覆盖的。
  • 准则:一般当修改超出单一业务模块边界,且影响主流程环节>1个时,需要做核心流程覆盖测试。

07.集成覆盖

  • 说明:这里说到的【集成】概念,并不泛指QA后期的集成测试,由于业务场景的特殊性,项目某一模块需要集成到其他应用,此环节容易出现被忽视的问题。
  • 准则:一般当修改涉及到与乘客端相关联的部分,非外卖内部自闭环的部分,需要做集成覆盖测试。

08.新老版本覆盖

8.1 说明和准则

  • 说明:大部分开发测试阶段,都是以当前最新版本为基准,但容易忽略对老版本的覆盖测试,导致上线后老版本出现严重问题。
  • 准则:一般当API修改涉及到版本控制,新老版本差异化处理,或端上修改涉及到对老版本缓存数据依赖时,需要做老版本覆盖测试和老版本升级测试。

8.2 常见场景

  • 端上新版本需要依赖老版本在设备中存入的老数据时,例如给某个序列化结构新增/删除/修改字段,且该序列化结构已经被老版本写入本地缓存,需要覆盖两个场景:
  • 在不清理应用数据的情况下,用老版本做直接覆盖升级并测试
  • 完全清理应用数据,模拟新用户安装后无缓存场景做测试(例如首页启动逻辑,有无缓存是两个分支)

09.CI覆盖

  • 说明:CI覆盖是指在前期已完成各类自测后,最终提交代码时,做的最后一步check,之前曾出现不止一起线上问题,与最后一步check不足有关。
  • 准则:开发阶段一定要打开Lint检查,并对增量代码做编译前扫描,修改Error问题,最终提交CR前,需要Check自己的所有改动文件。
  • 常见场景:
  • 开发阶段打开Lint检查,并对编译前报错Error做修复,不要在本地强制关闭Lint
  • 提交CR前,通过自己常用的Git diff工具,对每一个文件的每一处改动都要做认真审视,必须避免一些测试代码、忘记修改的代码被提上去
贡献者: yangchong211
上一篇
01.测试规范案例