[ZZ]MTSC 2017 Mobile Testing@Google 演讲的感受
原文地址: https://testerhome.com/topics/9364
Mobile Testing@Google
其实在开始听谷歌的张南和潘岩开始演讲前,了解下 Google Test Certified 会有所帮助。
- 谈谈 Google 的 Test Certified https://testerhome.com/topics/5752
- 详细说说 Google Test Certified 的各级——Level 1 https://testerhome.com/topics/5776
- 详细说说 Google Test Certified 的各级——Level 2,3 https://testerhome.com/topics/5784
甚至,我们从此次的演讲中依然能感受到,谷歌对建立测试认证标准的努力。下面我们仔细聊聊这次的演讲。
谷歌也在寻求开发效能和测试效能的平衡点
产品由简到繁需不同的测试体系来支持,如何在开发效能和测试效能之前寻找平衡点是每个发展中的公司痛苦的事情。谷歌经历了小城镇式的开发模式到大都市模式,测试策略也从1.0到测试策略3.0。每个阶段的痛点都不一样,所采用的对策也不一样。测试模型从大体上,是从bug驱动到测试驱动,到3.0的数据驱动。对于测试的技术要求也是越来越高。从ppt上来看,谷歌在2.0阶段已经实现了测试全自动化,这在业内还是属于领先的。这个有可能和谷歌的业务有关。至少到目前为止,我经历的项目中,手工测试的比例还是占了大头(我记得7年前在谷歌做vender的时候,DE项目其实手动比例也有50%左右,但是其他项目,比如谷歌的image啊,据我所知好像都自动化了)。
测试能放心地交给自动化,我想很大一部分应该得益于谷歌工程师的高素质和完善的 code review 机制。Ron Patton 的《软件测试》中反复强调一点:问题发现的越早,成本越低。需求阶段发现问题,就可以避免浪费开发资源,开发阶段发现问题,就可以避免浪费测试资源,测试阶段发现问题,就可以避免发布之后的打patch啊,回滚啊,紧急发布啊,从而避免线上故障带来的直接损失。需求阶段一般就依赖于强大的pd,但是pd一般都坑,
所以开发就非常关键,而pre-submit 和 post-submit 这两个阶段就变得至关重要,提交前的code review 和提交后的冒烟测试和持续集成就是这两个阶段的利器。
谷歌的CR做的非常好,LGTM已经深入人心。我记得我那个时候,提交代码之后,CR个个把礼拜是正常的事情。遇见一次,搞了半个月,许多开发轮流CR。我还记得有一会测试提交代码,然后国外的一个耿直boy直接CR后打回,totally useless,全部重写。反观我们目前的情况,CR大多数情况是一种流程上的摆设,是开发重新把自己写的讲一遍,不会深入细节,也不会举一反三。很多线上问题,如果有细致的CR,就不会出现。
再来看持续集成,现在国内公司都爱持续集成,但是侧重点在解决开发发布或者出包效率,对于持续集成中的测试工作投入偏少。这可能和我们的测试类型有关:
- 我们缺少单元测试
- 我们有接口测试,但是没有稳定的测试环境
- 我们偏爱重型的UI测试,无论是web端还是手机端
- 等等,有人补充不?
从我们一直推崇的测试金字塔来看,本末倒置的很厉害。这样也就把产品质量往后压了很多,导致很多事情在集成测试阶段之后才发现,而测试也疲于奔命。这也是老生常谈的问题了。这么多年了,似乎也没有解决的也很好。也似乎只有谷歌这样的公司,搞得不错,但我还是那句话,和业务有关。
谷歌也在摸索移动测试
从演讲和PPT上不难看出,谷歌也在摸索移动测试。谷歌缔造了安卓帝国,但是Android测试未必做的最好。从大会整天的topic来看,国内的移动测试其实是领先的,有的甚至是超越谷歌的。比如,华为对标谷歌的实验室,比如腾讯的专项专题。不过由于毕竟Android是谷歌亲儿子,所以有些内部的能提升效能的工具还是领先业界一大截,我记得谷歌就有一个内部adb,比正常adb好非常多。然后这次演讲讲到的 image diffing service,谷歌的移动lab等。
但是我觉得技术都不是问题,我们看后半程潘岩的演讲,可以明显感受到,他们是在从整个研发测试流程上来提升移动测试的效率,提高自动化比例,解耦普适性和移动特特性,提高可测性,而且也只有这样,潘岩后面讲的工具和测试平台才能用的上。
- Automate everything
- Decouple functions and make each test simple
- Find problems as early as possible
- Integration with existing framework
不再神秘
2013年的时候,James Whittaker的《Google软件测试之道》的书揭开了谷歌测试的神秘面纱,一度被国内捧为测试圣经。这一次,张南和潘岩带我们再次走进谷歌测试,了解了谷歌的移动测试。其实可以感受到作为先行者,谷歌做的很好,但是也没有到赶超我们一大截的地步。大道同归,国内公司在移动上的实践,方向和策略上也是类似的。我记得我一个老板曾经说过,整个技术圈,80%都是差不多的,差别在20%的执行者。
这一次,大家了解了谷歌的移动测试,再看看自己公司做的,找到一些共鸣,找到一些认同,然后继续探索和研究,这也是一种收获。这大概也是在外面参加会议的意义。
[ZZ]MTSC 2017 Mobile Testing@Google 演讲的感受的更多相关文章
- 「Mobile Testing Summit China 2017」第三届中国移动互联网测试开发大会-讲师征集
时至北京盛夏,一场由 TesterHome 主办的关于移动互联网测试技术的盛会正在紧锣密鼓的筹备中.只要你关注软件质量,热爱测试,期待学习,都欢迎你加入这次移动测试技术大会中和我们一起分享经验.探讨话 ...
- 「Mobile Testing Summit China 2016」 中国移动互联网测试大会-议题征集
时至北京盛夏,一场由 TesterHome 主办的关于移动互联网测试技术的盛会正在紧锣密鼓的筹备中.只要你关注软件质量,热爱测试,期待学习,都欢迎你加入这次移动测试技术大会中和我们一起分享经验.探讨话 ...
- [ZZ]Android UI Automated Testing
Google Testing Blog最近发表了一篇Android UI Automated Testing,我把他转载过来,墙外地址:http://googletesting.blogspot.co ...
- [ZZ] Valse 2017 | 生成对抗网络(GAN)研究年度进展评述
Valse 2017 | 生成对抗网络(GAN)研究年度进展评述 https://www.leiphone.com/news/201704/fcG0rTSZWqgI31eY.html?viewType ...
- Mobile testing基础之签名
1. 什么是数字签名? 数字签名就是为你的程序打上一种标记,来作为你自己的标识,当别人看到签名的时候会知道它是与你相关的 2. 为什么要数字签名? 最简单直接的回答: 系统要求的. Android系统 ...
- Mobile testing基础之Native、Web、Hybrid、activity、webview
应用一词指的是app,即application.原生应用指的是能直接运行于当前操作系统的应用程序:web应用指需要在浏览器中运行的网页应用,由于界面体验.功能上都更加强大,可媲美原生应用,故称web应 ...
- 腾讯WeTest开启“测试扶持计划”赠送重磅福利(含MTSC/TiD门票)
WeTest导语 伴随着互联网行业的发展,与各行各业的连接更加紧密,竞争也变得越发激烈,用户对于产品的体验开始变得更加“挑剔”.然而目前互联网产品却始终受到各类质量问题的困扰.以兼容问题为例,应用平台 ...
- MTSC 2019 深圳站精彩议题第一波更新! | 七五折门票火热售票中
MTSC(中国移动互联网测试开发大会)到今年已经成功举办了五届,这四年里,TesterHome社区一直秉持着务实.能落地.有深度.高质量.重分享的原则,从讲师邀请到内容筛选都严格把控,只为将最能提 ...
- 美国政府关于Google公司2013年度的财务报表红头文件
请管理员移至新闻版块,谢谢! 来源:http://www.sec.gov/ 财务报表下载↓ 此文仅作参考分析. 10-K 1 goog2013123110-k.htm FORM 10-K UNIT ...
随机推荐
- PC能替代服务器吗?
PC能替代服务器吗?全方位解析二者区别_华为服务器_服务器x86服务器-中关村在线http://server.zol.com.cn/536/5366835_all.html
- 深入理解java虚拟机《一》
一.java发展史 1995.5.23 Oak语言改名为java,sun正式发布java 1.0版本 1996.1.23 JDK 1.0发布,java语言第一个正式版本运行环境 主要包括:java虚拟 ...
- SpringMVC后台接受前台传值的方法
1.HttpRequestServlet 接收前台传值 @RequestMapping("/go5") public String hello5(HttpServletReques ...
- 删除单链表节点,时间复杂度为O(1)
一个编程练习,删除单链表一个节点,且时间复杂度控制在O(1)内. 1.核心操作代码如下: struct ListNode { int m_data; ListNode *m_pNext; }; voi ...
- php 调用接口
1.一般常用方法 file_get_contents(): 今天调用了一个反人类的接口,接口是get方式传输,里面有一个参数是当前时间,没错,不是时间戳,是当前格式化的时间:2017-8-9 11:1 ...
- css内外边距属性
盒子模型: 所有HTML元素可以看作盒子,在CSS中,"box model"是用来设计和布局时 使用. CSS盒模型本质上是一个盒子, 封装周围的HTML元素, 它包括:边距,边框 ...
- mybatis 类创建流程
Configuration ---> XmlConfigBuilder ---> SqlSessionFactoryBuilder ---> SqlSessionFactory(Co ...
- Scala基础学习(一、数据类型)
Scala 支持的数据类型: 数据类型 描述 Byte 8位有符号补码整数.数值区间为 -128 到 127 Short 16位有符号补码整数.数值区间为 -32768 到 32767 Int 32位 ...
- [LeetCode&Python] Problem 27. Remove Element
Given an array nums and a value val, remove all instances of that value in-placeand return the new l ...
- SQLI DUMB SERIES-17
(1)无论怎么输入username,都没有回显.尝试改变password的输入.找到了闭合方式:单引号 (2)报错注入: 爆库名 admin&passwd=admin' and extract ...