关注前沿技术,分享热点话题,QCon全球软件开发大会三站同启,重磅回归!立即查看 了解详情

详解优酷客户端质量评估体系

2020 年 2 月 22 日

详解优酷客户端质量评估体系

一、客户端质量评估体系的需求

移动客户端的质量包括功能和体验两方面。在不同阶段,客户端质量保障能力建设的粒度和广度的需求并不相同。早期可能快速试错是一种更为高性价比且有效的手段,但是随着应用的规模和用户体量逐渐增加,合理的质量保障投入就成为了一个必需品。明确质量保障的需求和范围,找到质量保障的成本和质量出现问题的修复成本的有机结合点,实现质量和成本收益最大化,是在设计和实施质量保障工作前务必要考虑清楚的事情。

体系化建设主要包括两个维度的实践:通过评估手段和方法的建设实现“有法可依”,通过流程和监督体系的建设实现“有法必依”。本文将介绍优酷技术质量部在“有法可依”维度进行的一系列建设,希望能给读者提供一些参考。

二、客户端质量评估体系的建设

根据优酷质量保障的需求和业务特点,我们重点在如下图示的几个重要阶段进行了投入,并且在构建打包阶段、整包验证阶段和线上验证阶段进行了重点建设。

1. 需求评审阶段

需求评审是整个开发测试流程的起点,占据非常重要的位置。质量控制团队在需求制定和评审阶段有效介入,确认需求的合理性以及质量的可评估性,在需求中强调对质量风险的处理能力以及对测试支持的友善性,将会对后期软件质量的可控起到非常重要的作用。我们在每个版本启动阶段进行需求评审,除了明确需求细节之外,会对新需求潜在的质量和用户体验影响、以及可测试性进行讨论,最大限度的暴露问题并寻求解解方案,极大的节省了后续定位问题和返工的成本。

2. 编码开发阶段

我们通过推动 Code Review 以及单元测试来评估这一阶段的质量情况,主要扮演了协调者和监督者的角色,编码开发阶段的规范化也是我们在加大力度进行建设的部分。

3. 构建打包阶段

构建打包阶段相对整个应用版本的生命周期来说仍然处于一个较早期的阶段,适合的能力针对性的投放在这个阶段可以做到以小博大,投入少,产出明显,例如静态代码扫描、包大小健康度检查等等。优酷技术质量部也是优先在这个环节发力,解决了较多相对埋藏较深的历史遗留隐患。

4. 整包验证阶段

通过测试分层、分类,加强自动化能力建设以及拓展新的测试能力这几个手段,我们在整包测试环节取得了不错的进展,提升了测试能力和测试效果。

针对优酷客户端测试的需求和组织形式,我们优先根据测试的目的从两个维度对测试内容进行分层操作:服务端 + 客户端,白盒 + 黑盒。

常规的端上黑盒验证存在一些固有弊端:场景多、链路长、执行过程复杂,难以维护和提效。通过服务端和客户端的测试分层,在服务端的接口处设置一道验证屏障,保证服务端的逻辑正确,可以有效减少测试验证的链路长度和复杂度,简化客户端的测试场景,从而减小客户端的测试压力。服务端的自动化验证是相对容易实现和部署的,执行效率高,成本低;经过简化的客户端验证因为少了很多待验证场景,去掉了相当多的 pre-condition 设置和环境 / 场景切换动作,自动化可行性也大大提高。

在此基础上,我们又对客户端侧的测试进一步进行细化。部分可以通过白盒测试解决的场景,可自动化程度极高,维护成本非常低,例如通过白盒直接控制播放器接口的方式对播放器进行操作,比 UI 操作的准确性和稳定性都要高很多。设想一个拖拽快进播放的场景,通过 UI 自动化实现几乎是一场噩梦,多机适配更是一个不可能的任务,但是白盒化测试来实现却易如反掌。但确实有些测试确实需要走到 UI 层用黑盒的方式操作才能实现,或者在 UI 层的操作才能触及到验证点,测试团队只有在这种情况下测试团队会选择黑盒方式完成测试。通过两次分层,各层测试场景的数量和复杂度均比较可控,可自动化程度极大提高,需要人工投入的成本和压力减少。

为了最大化的提效,我们对端上测试又进行了分类,如:回归测试、遍历测试、兼容性测试和适配测试等等,其目的是为了进一步提升测试的针对性,减少测试外延,降低测试复杂度。通过测试分类,不同的测试类型关注不同的验证点,进一步拆分了测试场景,降低了每一种类型的测试复杂度,从而使得回归、遍历和兼容性测试可以更好的进行自动化转化,快速高效的完成核心场景的检查,并通过适配测试补齐自动化测试在覆盖面上的短板。对几种测试类型的选择使用和组合使用,将使得测试策略更加灵活,测试效率和效果大大提高。

除了功能验证外,客户端性能测试不可或缺。优酷在性能测试上投入了较多的精力进行建设,取得了不错的成绩。

5. 线上验证阶段

经过编码开发阶段、打包构建阶段和整包阶段三个阶段不同维度的验证,可以最大限度的减少问题上线。但是线上用户的使用设备和使用环境千差万别,使用场景也很随机,线下测试基本无法做到对线上场景进行穷举验证。因此应用发布上线后,很大概率还是带着这样那样的问题的,仍然需要有效的质量保障手段支持。

减少线上用户影响的一个有效方法是控制用户范围,发布灰度版(beta 版、试用版)或分批发布都是比较可行的办法。灰度发布不是简单的随机圈一波用户进行测试版推送,推送的策略非常重要。我们分析了线上用户的各项特征指标,建设了用户分布模型,并基于此实现了可控的灰度推送策略,帮助优酷在灰度发布的效果和效率上取得到了较大的提升。

减少线上用户影响的另一个方法是快速止血,这需要建设完备的线上监控体系:

首先,要求有一个可靠的数据平台,有效的收集和回流线上的特征数据信息;

其次,需要根据自身业务的特点,针对性的制定监控策略,有效的利用数据平台的数据。

无论是在灰度期间还是应用正式上线全量之后发现的问题,都是对线下测试的有益补充,应该有效的加以利用。我们建设了从灰度发布到线上全量的自动化体系,串联起了灰度发布、正式发布、线上监控等环节,并对监控发现的问题自动进行分发并回收结果。基于这套自动化的流程,不仅可以确保线上问题得以及时发现,还可以加强线上问题的处理效果,目前已经成为了优酷版本发布流程中的必备环节。另外,线上问题尤其是影响面比较大的,应该进行深入分析,对可以提炼出问题路径或者验证方法的问题转化为线下验证用例。当前优酷在构建打包阶段的静态代码扫描和整包验证阶段的 BadCase 回归,都有基于线上问题转化而来的用例,来补充线下测试在测试设计阶段难以预估的测试场景。

6. 平台服务化

从需求评审到线上验证,质量保障工作贯穿于每一个需求的整个生命周期,涉及的验证环节众多且分散。我们是通过提供统一的、标准化、规范化的测试平台服务来串联各个环节的测试能力,由平台负责实现、管理、调度各种客户端测试手段,并对接各个业务团队的测试需求,提供各业务一致的解决方案。另外,测试平台利用流程服务的驱动在优酷版本发布的过程中实现关键节点的测试验证和结果展示,帮助业务方、PMO 等核心角色确认当前集成版本的质量。通过平台化建设,整合客户端的各种测试能力实现的这一套测试体系,真正构成了优酷的客户端质量评估体系。

作者介绍

翀宸,阿里文娱技术专家。

2020 年 2 月 22 日 10:15 1181

评论 1 条评论

发布
用户头像
需求评审后就直接进入编码开发阶段啦?
2020 年 02 月 24 日 12:06
回复
没有更多评论了
发现更多内容

JVM源码分析之Java对象头实现

猿灯塔

推动敏捷,就是推动软件业变革

盛安德软件

敏捷 推动软件业变革

2020年全球经济萎缩,火花国际PLUS逆袭而来闪耀数字经济

极客编

MySQL实战四十五讲基础篇总结(二)

一个有志气的DB

MySQL 日志

【玩转写作平台】Markdown & 快捷键详解

InfoQ写作平台

写作平台 markdown 编辑器 快捷键 意见反馈

JavaScript 基础拾遗(一)

吴昊泉

JavaScript 文章收集

nginx 概念及上手

HelloZyjS

Android | Tangram动态页面之路(五)Tangram原理

哈利迪

android

天天都是520

Neco.W

爱情 表白日

关于架构的几件小事:System context

北风

系统架构 系统性思考 架构师 系统上下文 极客大学架构师训练营

企业数字化转型:用 SpreadJS 打造互通互链的电力系统物联网

Geek_Willie

数字化转型 SpreadJS 电力

SQLite是什么

这小胖猫

sqlite 数据库 RDBMS 存储

ARTS_20200520

凌轩

Java ARTS 打卡计划

程序员需要了解的硬核知识大全

cxuan

Java c 计算机基础

Django的ListView超详细用法(含分页paginate功能)

Young先生

Python django ListView 分页

MySQL实战四十五讲基础篇总结(一)

一个有志气的DB

MySQL

【教你如何写作】参与创作,领取 InfoQ 编辑训练营内训课程

InfoQ写作平台

写作平台 有奖活动 投稿 活动专区

JVM源码分析之synchronized实现

猿灯塔

如何做好 To B 的 SAAS 服务

路边水果摊

SASS 企业 服务

万字长文带你看懂Mybatis缓存机制

程序员小岑

Java 源码 技术 mybatis

竟然有人想看我的「日记」,满足一下大家

非著名程序员

程序人生 提升认知 学习日记

识别代码中的坏味道(四)

Page

敏捷开发 面向对象 重构 CleanCode 代码坏味道

当我们持续感觉很糟糕要怎么办

七镜花园-董一凡

写作 生活质量 情感

敏捷为什么会失败之「PA-SA-WAKA-DA」理论

Worktile

Scrum 敏捷开发 Agile

为提升网点业务员效率,我们做的事情。

黄大路

商业

SpringBoot瘦身

JFound

Spring Boot sprnig

Enhanced Github:一个 GitHub 专用的好插件

非著名程序员

GitHub 程序员 效率工具

MySQL实战四十五讲基础篇总结(三)

一个有志气的DB

MySQL mysql事务

Redis6.0 多线程源码分析

代码诗人

redis 源码 技术 线程模型

深入剖析ThreadLocal原理

JFound

Java

我的编程之路-4(进阶)

顿晓

进阶 看书 编程之路

微软秋季技术课堂

微软秋季技术课堂

详解优酷客户端质量评估体系-InfoQ