腾讯移动品质中心TMQ 利用线上数据提升移动 app 质量

匿名 · 2016年06月02日 · 最后由 期待飞翔的小鸟 回复于 2016年08月23日 · 2027 次阅读

1 线上数据测试模型
1.1 背景
随着移动互联网的发展,移动 app 质量要求越来越高, 传统行业质量的保证方式是测试人员在 app 开发过程中进行阶段性的测试,这种测试方式我们可以称之为主动测试, 即测试人员主动对 app 进行测试。这种测试最典型的模型如下:

图 1 传统测试
测试质量的高低取决于用例输入的全面性,体现在产品上莫过于包含场景和数据。
虽然测试人员借助于自身测试经验和一些测试理论(探索性测试、精准化测试等)已覆盖了产品绝大部分功能,但依然存在不够全面和不具有针对性等问题。 某些功能测试人员是无法测试保证的,如视频播放器 app 播放失败,文件打开 app 打开文件失败等, 测试人员构造的用例输入根本就没有办法完全覆盖有问题的视频和文件。
移动端 app 发布一般经历功能测试,集成测试,内测和几轮的灰度测试,灰度测试阶段已经放到部分用户手上,最后完成发布,移动 app 面对的移动终端,场景环境都是千差万别,使用传统的构造输入用例方式无法测试充分。这里介绍一种利用线上数据提升移动 app 质量的测试模型, 模型最核心的思想是利用埋点上报异常数据,提炼一种利用聚类分析、关联分析等数据分析模型抽取具有针对性和全面性的测试输入数据,通过真机验证等方式找出产品质量问题,提供给开发分析解决,提升 app 质量。在传统测试基础场,补充异常线上数据输入,提升 app 质量。

图 2 补充线上数据源测试
1.2 线上数据提升移动 app 质量模型
测试人员需要挖掘提升一个 app 的质量核心前提是对这个 app 有足够的了解, 线上数据分析测试模型需要一定的积累准备才能深入使用,通过在 QQ 浏览器视频和文件能力方面的使用经验, 总结线上数据测试的一般流程:

图 3 线上数据智能测试模型
1.2.1 数据统计上报
移动 app 功能异常上报指的是记录程序运行过程中遇到的功能错误、程序 crash 和 ANR 等信息,并将这些信息上报到后台。移动 app 功能异常上报是线上数据测试的基础,只有通过异常上报,才能记录用户使用 app 过程中遇到的问题。 上报信息的全面性决定着上报数据的有效性,一般上报信息可以通过下面方式进行统计。
(1) 功能细分
基于对 app 功能的熟悉,可以将 app 的功能分类,对于那些 app 中使用频率最高和后续容易使用自动化方式验证的功能点进行上报信息分析。容易使用自动化验证主要目的是在后续的线上数据分析验证种可以使用自动化方式找到有价值的用户输入数据,可以直接提供给开发定位问题,提高线上数据测试的效率。
(2) 状态埋点
基于最基本的测试模型,用户的不同测试输入可能产生除了正常结果外不同的异常情况,这里可以进行统计上报,将测试输入和输出上报。在线视频播放:输入的视频播放地址,播放状态失败,超时等;文件打开:输入的文件信息,打开失败超时或者空白等。
(3) 基本信息
手机相关信息:版本,系统,相应的硬件信息
App 版本信息:版本号,插件版本号,其它信息
(4) 系统资源
系统内存使用,cpu 使用等,对一些特别重要的功能场景,资源消耗可能是导致问题发生的原因。

1.2.2 数据仓储
移动 app 的用户量庞大惊人,一般会使用专门的集群存储大量上报数据。为了获取使用集群存储上报数据,一般步骤如下:
(1) 集群存储环境学习
一般公司集群环境可以通过服务器直接登录,腾讯内部需要通过跳板机连接到集群服务器; 如果对服务器操作有权限等限制,了解是否提供了便捷的集群服务入口,可以针对集群数据进行二次开发利用,腾讯这边提供了米格数据服务平台,只要简单的权限申请,就可以很便捷的对集群数据进行操作。
(2) 操作脚本学习
测试人员可以根据集群使用对应的操作脚本,从集群获取需要的数据。一般的集群操作可以使用类 SQL 语言进行,比如 Hive SQL.

Hive SQL 的学习地址在:

https://cwiki.apache.org/confluence/display/Hive/GettingStarted

对于腾讯 QQ 浏览器项目中文件和视频能力,分别使用如下形式的 Hive SQL 语句得到需要的数据:

1.2.3 数据分析
数据分析的目的是对大批量的异常上报的数据进行统计分析,挖掘出有用的数据,使其能够更加直观的体现移动 app 的质量问题,提供有效数据帮助开发提升移动 app 的质量。不同产品对上报数据分析不一样,这里根据 QQ 浏览器视频和文件能力项目,抽象出一套数据分析模型:

图 4 数据分析模型

大致需要按照下面几步进行:
(1) 字段含义理解
数据记录一般按照关系数据库字段形式导出内容,第一步要了解每个字段的含义;第二步需要了解每个字段内容的解析方式,得出有用有价值的信息。
(2) 功能分类
集群数据的每条记录都是用户操作 app 某项功能异常上报上来的,为了明确功能点,需要对批量数据按照功能进行分类。通常可以使用记录中得到的信息进行区分,将相同功能点的记录归为一类,便于后续统一进行分析。比如浏览器文件打开能力这块我们可以将在线文文件打开、浏览器内部文件打开和第三方调用文件打开作为功能划分;浏览器视频播放能力也可以划分为本地播放,在线播放功能。
(3) 聚类分析
聚类分析是针对功能的输入数据而言,将具有相似特征的数据划分成一类,得出移动 app 在对某一类输入处理上的问题占比。 聚类分析可以作为对移动 app 的问题监控使用。 比如 QQ 浏览器的在线视频播放,我们可以将不同的视频网站作为一个聚类进行监控,比如 youku,腾讯视频等;文件打开能力我们可以对不同的文档格式进行聚类统计,比如 doc(x),ppt(x),xls(x),pdf 都各成一个聚类,监控聚类间的问题比例。聚类分析本身应该是层级关系,按照从粗到细的方式进行聚类细化(漏斗分析),比如将出现播放多次的 url 合并处理,记录播放失败次数等,聚类分析结果一般可作为质量监控使用。

图 5 聚类分析
(4) 关联分析
关联分析的目的是找到与记录相关联的信息, 这些信息可以直接或者间接补全记录数据,更容易的得到问题的有效用例输入数据。关联分析的关键在于从记录中找到与另外的数据平台相对应的键值,从而找到对应数据。比如视频播放数据记录中通过用户手机的 guid 和用户反馈平台对应起来找到用户反馈信息,找到播放失败的问题描述等信息。

图 6 关联分析

(5) 测试数据提取
测试数据抽取的主要目的是对一些可以通过自动化方式验证的功能特性,从上报数据中抽取出可以直接自动化输入测试的测试数据, 通过真机的验证方式重现问题,最后将数据和验证结果可视化方式提供开发解决。
QQ 浏览器视频播放能力播放失败上报记录,可以通过记录中分析摘取到视频播放所在的页面 url, 这个数据可以作为真机验证的输入数据; 文件打开能力可以通过记录分析或者关联分析得到用户打开失败的文档作为真机验证的输入。
1.2.4 测试验证
目的:通过真机验证客户端异常上报的数据是否真的出现功能问题
输入:数据分析得到的测试数据,这些数据均是用户遇到的异常数据
输出:真机验证结果,分为正常和异常两种。
条件:满足真机验证的功能一般是平时的测试中已经实现自动化测试的模块和功能, 可以自动化得出程序运行的结果。 大批量的数据如果没有自动化方式验证,人工检测基本不可能,也失去了线上数据测试的意义。
优点:真机验证过程虽然使用平时的自动化测试框架验证程序功能,但是最大的区别在于自动化的输入数据,这些数据均直接来自于用户,并且是用户使用时出现的有问题的数据,体现了线上数据测试的优点:测试输入的针对性和全面性,让我们平时测试不到的情况可以很好的解决。
虽然输入的是用户异常上报的数据,可能大部分情况下真机验证的结果是正常的,这个时候就需要考虑可能影响测试结果的因素,比如机型,系统资源使用等。比如可以对这些验证正常的记录的机型进行数量排序,对发生问题前几名的机型通过人工验证等方式验证结果等。QQ 浏览器文件和视频播放都可以用真机验证方式找到打开失败的文件和视频,帮助产品提升打开成功率。
1.2.5 结果展示
一般通过 web 页面形式将真机验证的结果展示出来,页面设计的宗旨是简单,明了,开发可以便捷获取解决问题需要的测试数据。比如 QQ 浏览器文件线上数据处理的结果展示页面如下:

图 7 结果展示
开发可以便捷得到打开失败的文档, 可以通过状态看出文档在 QQ 浏览器下打开是失败还是超时,可以通过后面文件大小头文件得到解决问题的必要信息等。
1.2.6 问题修复和自动化验证
问题修复包含:开发解决问题,输入源自行修复等情况,其中关系到产品质量最核心的是开发修复 bug。 线上数据经真机验证有问题的数据放在结果处理中心,开发可以直接拿到数据分析解决,解决后需要将最新版本进行提测,为了验证解决情况,我们可以使用自动化验证的方式测试提测的最新 app, 确认有问题的数据是否结果正常。在结果展示界面标记提测后经过自动化验证后数据的状况,从而得到此次解决了哪些问题。

2 案例
依据第一章中对线上数据提升移动 app 质量模型分析,这里以 QQ 浏览器文件打开能力和视频播放作为案例 进行线上数据测试实践。
2.1 线上数据提升文件打开成功率
(1) 文件打开能力线上数据质量模型
文件用户异常数据自动化验证系统的整体结构如下图,系统整体结构主要分为:数据仓库数据分析和获取、线上数据下载验证、验证结果处理中心和插件更新自动校验。线上数据下载验证模块验证得到打开失败和超时的文档库,结果处理中心负责展示和分析,插件更新自动校验模块针对开发修复后插件提测进行打开失败文档的自动化验证工作。

图 8 QQ 浏览器文件打开能力线上数据测试结构图

(2) 结果展示
验证结果处理中心接收到自动验证系统发送来的验证结果后,负责结果数据的存储、处理和展示功能。这里重点介绍展示功能,为了尽可能方便开发定位问题,将已验证打开失败或者超时有问题的文档形式展示如下图:

图 9 文件真机验证结果展示
结果展示的目的是最直观的提供给开发解决问题,并且对修复状态进行验证展示,字段说明如下:


ab-test-for-app
(3) 收益
每天发现打开失败或者超时文档 100+, 累计搭建失败文档库:4000+, 积累正常文档库:20000+
开发修复了 doc 和 xls 格式打开失败的某类问题,通过线上监控系统,我们可以直接的看到收益:线上 doc 插件失败率降低 1.4%, 线上 xls 插件降低 1.8%, 优化效果明显。
说明线上数据的挖掘对文件打开成功率提升起到直接效果。
2.2 线上数据提升视频播放成功率
Android QQ 浏览器每天都会遇到大批量播放失败的片源,为了提升播放成功率,利用线上数据提升播放成功率,质量处理模型如下:

0
图 10 视频线上数据测试流图
通过对异常上报播放失败的 url 的校验和真机验证,不断完善视频播放器质量,视频线上数据测试每天会将测试结果按照邮件形式进行发送。视频结果展示如下:

1
图 11 视频真机验证结果图
视频累计处理验证异常上报 30000+,确认问题 1200+
3 总结
线上数据提升移动 app 质量的方案最核心的原理是利用用户上报线上数据构造更具有针对性,更加全面的测试输入, 这些测试输入能更加高效的发现 app 的质量问题。通过问题占比的分析解决,大幅度提升移动 app 的产品质量。
本文使用线上数据提升 QQ 浏览器文件打开和视频播放成功率,这套方案流程是线上数据挖掘使用的一种场景,对于移动 app 不同的功能,未来还需要挖掘出更多更丰富的线上数据测试模型。
未来方向:潜在问题的挖掘。 异常上报经过二次验证 有问题数据还是处于少数,大部分数据经过真机验证未能复现用户当时的问题,需要进一步挖掘这部分问题出现原因。

申明:文章涉及公司相关涉密产品信息均未采用真实数据和名称,但是数据与真实数据有着同样效果。

欢迎各位读者扫描关注,会有更多精彩文章推送以及互动活动,赶快关注吧!

共收到 13 条回复 时间 点赞

非常有价值的文章!

问下 testin 的埋点能做到?

非常有价值的文章!感谢分享。

匿名 #4 · 2016年06月07日

#9 楼 @seveniruby 有试过。我把 markdown 的格式先编辑好,copy 过来后,显示的都是有符号的。

#6 楼 @tmq 就在发帖或者回帖的页面里面. 右下角有个排版说明

匿名 #6 · 2016年06月06日

#3 楼 @testly 这位同学具体是哪个方面没有明白呢?

匿名 #7 · 2016年06月06日

#1 楼 @gaopeng1106 同学有高见可以指导指导小编

匿名 #8 · 2016年06月06日

#2 楼 @seveniruby 亲,markdown 我有试过,但是在这边貌似不支持,方便的话可以指导指导一下~

#3 楼 @testly 看来你没醉啊:D

#3 楼 @testly 看来你没醉啊:D

没说清楚。能简单概括,么?

同学, 你得学学 markdown 了. 用 # 来简单排版下.

排版不能看

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