前言
Preface现在已经是移动互联网的时代,借助手机等移动设备,人们可以完成资讯的获取、社交、游戏,以及日常生活的各种应用,甚至很多工作的开展。有很多新兴的移动互联网公司在崛起,也有很多传统的IT公司在转型,更有大量传统行业的企业在借助移动互联网拓展自己的业务。对IT技术人员而言,这是一个非常好的时代,有大量的工作机会,因为有大量的移动互联网相关系统的研发需求。当然,这也意味着有很多新的技术和方法要去学习。有很多的研发人员快速转型到移动互联网领域,有大量的移动互联网产品被开发出来。在这个过程中,也会面临一个问题,那就是产品质量的参差不齐。在某种程度上,因为移动设备的特点,比如屏幕相比PC较小、电量有限、移动网络状况复杂,以及设备性能的问题,移动互联网产品对质量的要求其实更高。有过相关研发经验的人应该能体会,快速开发一个可用的移动App并不难,但是做一个高质量的App其实是一件非常有挑战的事情。
这本书写作的初衷就是希望给移动互联网产品的研发团队,包括测试团队,一个基于大量一线实践的比较系统性的参考。
我们毕业后工作的几家公司都比较重视产品质量,对测试的投入都比较大,对人员的要求也比较高,使得我们有机会比较系统地实践专业的测试工作。另一方面,近几年我们接触了很多规模较小的软件研发组织,甚至是一些创业公司,他们的团队和业务在快速发展,有非常强烈的意愿去深入了解体系化的测试和质量提升工作是如何开展的,但常常会感到一些迷茫。之前我们写过一些博客文章和培训材料,并参加了一些业界的技术交流,得到了非常多的正面反馈,让我们觉得这件事有价值,对同行们可能也有一些帮助。一两次的技术交流和零散的讨论总觉得不够系统,说不清楚。那不如写一本书吧,正好这些都是我们自己做过的事情,有过一些实践经验,也踩过一些坑。
本书的内容组织基于以上的出发点,我们希望比较系统地介绍整个移动App的测试,其实广泛一点来讲是质量保证的工作,因为这本书里介绍的不少实践已经超出了单纯的测试的范畴。
首先我们会介绍一下典型的互联网产品的研发流程。就我们工作过的几家公司,每家都有一些不同,但是核心的做法其实非常类似。并不是简单地套用敏捷等流程方法,而是经过不断实践的摸索和调整,各家都找到一些适合产品特定以及互联网快速迭代要求的流程做法。这些也是后面讨论一些质量实践的基础。在第1章的第二部分我们介绍了功能测试中的一些实践,包括测试用例的设计和评审,以及测试进度的管理。
第2章介绍了自动化的方法,包括接口层面的自动化,这里我们重点介绍了一种实践过的轻量级方案,以及App UI层面的自动化,分布介绍了Android和iOS用到的一些技术方案。
第3章介绍了性能测试的方法,包括Web前端的性能,为了介绍这部分的性能问题,也介绍HTTP协议相关的知识,以及常用的测试方法。第二部分是App端的性能,包括Android和iOS内存相关的问题,以及内嵌Web组件的性能分析。最后介绍了后台服务的性能测试,包括了压力场景的建模、测试工具的介绍以及测试数据的收集和分析。
第4章重点介绍了几个针对App的测试方法,包括兼容性测试、流量测试、电量测试、弱网络测试、稳定性测试、安全测试和环境相关测试。这些方法,由于都是针对某个特殊方面或者问题的,所以我们统称为专项测试。
第5章介绍了代码静态扫描、代码覆盖率分析、接口Mock方法和AOP测试方法,这些是测试方法中非常有效的补充,我们称之为辅助测试方法。
第6章介绍了发布过程中的质量保证活动,包括持续集成的实践,以及发布环境的质量包括,包括发布系统的介绍。另外还专门讨论了内测和灰度这两个互联网产品比较常用的方法。
第7章介绍了质量的度量和推动方法。包括我们常用的一些质量分析的维度,QA的角色和所做的工作,并专门讨论跨团队的质量推动。
第8章介绍了一些发布之后的质量管理工作,包括继续进行一些模块之间的交叉测试,发现一些之前没有发现的问题。另外,介绍了互联网产品的一些常见的监控维度,并重点介绍了适合测试团队开展的接口方面的自动化监控的实践做法。最后,讨论了关于外部用户问题反馈的收集和跟进的一些常见的做法。
第9章,最后,作为在软件测试领域工作多年的专业人员,我们也想借这个机会讨论一些我们对于软件测试、测试人员以及团队的看法和思考。因为前面介绍的所有实践,都是这些人做出来的。
关于内容本身,如果只用一个词来形容其特点,我想那就是实战。除了个别知识点补充了一点点介绍性材料,这本书几乎所有的内容都是我们在真实的项目中实践过的,有很多材料都是直接来自真实的项目(当然做了一些敏感信息的过滤)。我们的原则是宁愿不全面,也不想误导。因为工作久了,我们发现有很多的理论似是而非,怎么说都有道理,比如凭空讨论一个企业应该专注一个领域还是应该多元化经营?这样的讨论可能会一直绕圈子,给不了真正有价值的参考;还不如介绍几个真实的企业是做什么的,处于什么样的状况,有什么优势,遇到什么实际问题,是怎么处理的。软件测试,甚至整个软件研发,都属于工程实践的范畴,最终是要有实际的产出,不是凭空的理论,所以我们觉得也应该用实践的态度来对待知识经验的分享。
谁适合阅读本书说实话,在给这本书起名的时候我们有一些纠结,因为内容是围绕着一个移动App测试的各个方面来讲解的,但是有经验的读者会发现,这里介绍的测试技术和质量流程对于其他互联网产品同样适用。比如一些自动化和性能测试的方法,以及代码静态分析和覆盖率等技术手段,还有质量度量和推动的实践,都不局限于移动互联网方面,我们甚至觉得并不局限在互联网方面。就我们个人的经历而言,我们曾经参与过大型电信系统的开发,企业级服务器软件的测试,以及PC客户端的产品,后来转型到互联网领域,有很多在之前领域里好的实践可以被借鉴和应用,只不过要考虑实际产品和项目的特点来调整,我想反之也是一样。所以请大家不要被互联网或者所谓的互联网思维束缚,不是触了网就立即如何。我们仍然需要理解每一个技术的原理和优缺点,对于每一个质量提升的实践也是一样,然后结合自己所在项目的实践,优化和调整,这样会更加有效果。
基于本书的内容组织,这本书可能适合下面这些人:
希望将测试做得更加深入的一线测试人员,特别是互联网和移动互联网的测试人员,可以更加系统地了解相关的测试技术和方法。
希望提高代码质量的一线开发人员。本书有很多质量提升做法也可以用于开发,比如静态扫描和内存分析,在很多的团队中也确实如此应用。
测试团队的leader,特别是一些接手互联网或者移动互联网测试团队时间不长的,可以比较系统地了解测试和质量管理工作的规划和思路。
希望提高产品质量和研发效率的研发团队负责人,可以作为对全流程质量提升的一些参考。
在校的大学生,了解到现在很多学校有测试相关的专业了,希望大家在校园里就可以了解到一些业界的实践做法。
其他任何关注移动互联网产品研发和质量提升的人员。
这是一本很全面的关于测试的书吗嗯……我们很想说是,但很遗憾它可能还差很远。
一个人知道得越多,就知道自己不知道的越多,最近这几年工作的经历让我们深感如此。在工作中,我们不断遇到新的问题和挑战,新的技术和方法也在不断涌现出来。另外,我们在工作中接触了大量优秀的测试人员和各种深入的测试技术实践,也接触了许多业界同行,因此深知测试领域的博大精深。不过可能因为大家工作节奏都比较快,鲜有人系统化来做分享,所以本书也算是抛砖引玉,希望更多资深的业界同行把自己在一线的实战经验分享出来,共同推动国内的测试做得更加系统和深入,更加的有价值。也正是这样的想法激励着我们花费大量的业余时间,希望比较直接和鲜活地把我们在一线的实践分享出来。
本书阅读建议对于移动App测试经验比较少的人,我们建议比较完整地阅读本书。对于有一定经验的人,请随手翻到你感兴趣的章节,因为本书的很多内容都有一定的独立性。本书的很多内容都结合了具体的实例讲解,因此我们也建议大家在看到相关的章节时动手实践。
关于作者本书由三位作者:邱鹏(Ricky)、陈吉(Allen)、潘晓明(Shawn)共同完成,我们曾经在一个团队中长时间一起工作,对产品质量的持续提升和新的测试技术研究都一直怀有共同的热情。同时,我们背后有好几十位业务测试、测试开发和质量管理的同事都贡献了具体的项目实践和很多好的建议。本书具体内容的分工如下:
Ricky规划了整本书的内容,并编写了接口自动化、Web前端性能测试、后台服务性能测试、兼容性测试、部分流量测试内容、部分电量测试内容、弱网络测试、App稳定性测试主要内容和接口Mock的部分内容,以及第1章、第6章、第7章、第8章、第9章。
Allen作为资深的Android测试开发专家,编写了其中主要的Android相关内容,包括Android UI自动化、Android内存测试和WebView性能、Android代码静态扫描、Android流量自动化部分、Android的ANR、安全测试、App环境相关测试、Android代码覆盖率、Mock Server、Android AOP方法。
Shawn作为资深的iOS测试开发专家,编写了其中主要的iOS相关章节,包括iOS UI自动化、iOS内存和WebView性能分析、iOS代码静态扫描、iOS流量和电量的部分内容、iOS代码覆盖率,iOS AOP方法,以及持续集成中的iOS覆盖率案例。
分工协作是这本书得以完成的基础,不只是内容本身,也因为一个人无法承担繁忙的工作之余如此巨大的工作量,因为除了文字编写,每个案例都需要实践。协作本身就是一种精神力量,也是愉快的经历。
致谢以下是一些我们共同想感谢的人:
首先我们想感谢曾经一起努力工作的腾讯、易迅和京东的同事们,他们对我们的测试工作给了非常多的支持和建议,促进我们不断提高。
我们也想特别感谢我们的编辑,机械工业出版社的吴怡编辑,她是推动这个写作计划变成现实的人,包括选题、内容的组织以及细节的文字方面都给了我们很多的帮助,是她的鼓励和肯定让这本书得以完成。我们也想感谢在写作本书的过程中,那些得知我们在进行这个长跑并给予支持和鼓励的人。
以下是几位作者分别想感谢的人:
Ricky致谢:
首先我想感谢腾讯的吴凯华(Jeremy)先生,是他带我进入互联网测试领域,并给予非常多的指导,另外他还抽出宝贵的时间为这本书作序。为了这篇序,他向我仔细了解了内容组织背后的考虑,并阅读了本书的绝大部分内容,他这种认真负责的精神是一贯的,一直以来都令我非常敬佩,使人见贤思齐。这篇序本身也融入了他对于软件测试和个人发展的深入思考,非常值得一读。也特别感谢李俊(Jasper)先生,另一位在腾讯期间我的老板,也是非常的卓越、认真和正直,从他那里得到很多关于做好事情、带好团队的具体指导,至今受用。
感谢曾经在腾讯电商上海测试团队,以及京东无线测试部的每一位同事,这本书的内容是大家一起实践的一个小结,非常高兴能和大家一起共事,也为每个人取得的进步感到骄傲。谨以此书,致以:曹计昌先生、Joe Chen、Yun Zhang、John Li、Jicheng Wang、Tao Qian、Allen Wang、Enoch Huangfu、Fei Zou、付学宝、徐奇琛、彭晓虹、马弘烨、Scott Li、Step Tian、袁蓉蓉、党杰、朱永敏、幸锐、姚醒、王孝满、江川、盖美红、王宇、李松峰、陈保安、李伟奇、谭丁强、李大鹏、Nina Luo、Jessica、Shelly Hu、Victor Wan、Eddie Liu、Rocken Meng、Frank Xia、Allen Fang、Lampard Chen、Haison Tang、Allan Zhou等老师和朋友,在此表示深深感激。限于篇幅无法一一列举,但内心中对于所以给予过支持、建议和批评的人们深怀感激。
也借此机会感谢蚂蚁金服的同事们,感谢给予我新的机会让我可以迎接新的挑战。这本书包含了之前一些工作内容的沉淀,希望可以在新的领域有更多新的收获。
最后我想感谢我的家人,感谢他们对于我工作的理解,这本书的写作在工作之外又额外占去了一些本该陪他们的时间。儿童节快到了,把这本书献给我的女儿甜甜。
Allen致谢:
首先感谢Ricky在Android专项测试工作中给予的支持和建议,此外感谢我的同事朱玮在Android代码覆盖率工作中的前期探索工作。本书Android部分的很多内容其实是源自前人的工作,加上我们自己的摸索和改进,总结出的一点经验。因此借此机会也感谢所有致力于Android测试的先驱者们。向你们致敬!
Shawn致谢:
我首先要感谢我的leader邱鹏,在工作中给予了我不少帮助,得益于他的指导,让我能够在工作中自由地发挥,也使我个人在快速地成长。其次要感谢唐辰、王孝满两位开发同事在工作中给予我的支持和帮助,深深地让我体会到测试工作的开展离不开开发同事和测试人员的紧密配合。最后要感谢所有在工作中给予我帮助的同事们,是你们的帮助让我在工作中如鱼得水。再次感谢!
作者简介
邱鹏,蚂蚁金服高级测试专家,负责电商系统的前后台及无线App测试,以及团队管理工作。毕业于华中科技大学计算机学院,曾担任京东无线测试部负责人、腾讯高级测试工程师、趋势科技中国研发中心高级技术经理,完整参与了多个大型企业级安全产品的测试工作。在自动化测试、性能测试、测试整体技术规划以及团队管理方面有比较丰富的经验。
陈吉,毕业于上海交通大学计算机系,曾在微软全球技术支持中心从事开发技术支持工作,对微软系开发技术底层有较深入的了解,擅长代码调试和疑难问题诊断。2013年以后先后加入易迅和京东无线部门从事软件测试开发工作,主攻Android系统的测试,期间负责京东外网接口端对端的监控系统研发、测试工具开发、测试技术的探索和推广等工作。
潘晓明,从事软件测试行业8年,在黑盒测试、自动化测试、性能测试和专项测试方面有着丰富的经验。他很早就开始参与移动App测试,在WebOS、Android和iOS等平台上都有丰富的测试经验。曾就职于惠普和腾讯科技,目前效力于京东,负责测试工具的开发、iOS测试技术研究以及iOS的性能专项测试等。
目录
序言
前言
第1章 产品功能测试概述
1.1 互联网产品常见的研发流程
1.2 测试用例设计和评审
1.3 测试进度管理
1.3.1 测试进度报告
1.3.2 测试完成报告
1.3.3 系统化的方法
1.4 本章小结
第2章 功能测试自动化
2.1 轻量接口自动化测试
2.1.1 JMeter关于自动化方面的特性介绍
2.1.2 基于JMeter的轻量接口自动化实践
2.2 App UI层面的自动化
2.2.1 Android的UI自动化技术
2.2.2 iOS的UI自动化技术
2.3 本章小结
第3章 性能测试
3.1 Web前端性能测试
3.1.1 HTTP性能相关的技术要点
3.1.2 Web前端性能测试方法
3.2 App端性能测试
3.2.1 Android内存问题分析
3.2.2 iOS内存问题分析
3.2.3 App内嵌Web组件的性能分析
3.3 后台服务性能测试
3.3.1 压力场景的建模
3.3.2 测试工具
3.3.3 测试数据的收集
3.3.4 分析和报告
3.4 本章小结
第4章 专 项 测 试
4.1 兼容性测试
4.1.1 兼容性测试的准备和手工测试
4.1.2 基于UI自动化脚本的云测试方案
4.2 流量测试
4.2.1 Android App特有的流量测试方法
4.2.2 iOS App特有的流量测试方法
4.2.3 通用的流量测试方法
4.2.4 常见的流量节省方法
4.3 电量测试
4.3.1 Android电量测试方法
4.3.2 iOS电量测试方法
4.4 弱网络测试
4.4.1 借助手机自带的网络状况模拟工具
4.4.2 基于代理的弱网络的模拟
4.5 稳定性测试
4.5.1 基于Monkey的稳定性测试
4.5.2 Android 的ANR
4.5.3 基于模糊测试思路的稳定性测试方法探索
4.6 安全测试
4.6.1 安装包测试
4.6.2 敏感信息测试
4.6.3 软键盘劫持
4.6.4 账户安全
4.6.5 数据通信安全
4.6.6 组件安全测试
4.6.7 服务端接口测试
4.7 环境相关的测试
4.7.1 干扰测试
4.7.2 权限测试
4.7.3 边界情况
4.7.4 Android定位测试
4.8 本章小结
第5章 辅助测试方法
5.1 代码静态扫描
5.1.1 针对Android的静态代码扫描
5.1.2 针对iOS的静态代码扫描和分析
5.2 代码覆盖率分析
5.2.1 Android代码覆盖率技术方案
5.2.2 iOS代码覆盖率技术方案
5.2.3 代码覆盖率的应用实践
5.3 接口Mock方法
5.3.1 常见的接口异常模拟方法
5.3.2 使用Fiddler作为Mock Server
5.3.3 基于FiddlerCore二次开发的Mock工具
5.4 AOP测试方法
5.4.1 Android AOP测试实践
5.4.2 iOS AOP测试实践
5.5 本章小结
第6章 发布过程中的质量管理
6.1 持续集成
6.1.1 持续集成简介
6.1.2 持续集成实践
6.2 发布环节的质量把控
6.2.1 后台服务的发布
6.2.2 App的发布
6.3 内测
6.3.1 内测的范围
6.3.2 内测的实施
6.4 灰度
6.4.1 Android App的灰度方法
6.4.2 iOS App的灰度方法
6.5 本章小结
第7章 质量的度量和推动
7.1 质量的度量和推动概念
7.1.1 质量数据的度量
7.1.2 质量推动的活动
7.2 QA的角色
7.3 跨团队的质量推动
7.3.1 开发自测
7.3.2 设计走查
7.3.3 产品走查
7.4 本章小结
第8章 发布之后的质量管理
8.1 发布后的交叉测试
8.2 线上监控
8.2.1 监控类型介绍
8.2.2 接口自动化监控
8.3 外部用户问题反馈的收集和跟进
8.4 本章小结
第9章 关于软件测试和测试团队
9.1 测试是否必需
9.2 专职测试人员的价值
9.3 测试团队和发展
9.4 本章小结
参考文献
内容摘要
在移动互联网高速发展的今天,打造上千万乃至上亿用户的移动App是每个开发者的梦想。为了支持这样量级的用户并持续运营和发展,App的高质量非常重要。而作为质量保证的重要手段,测试技术的重要性是不言而喻的,可以说每一个成功App背后都有一支强大的测试队伍。本书作者在腾讯、京东、阿里等大型互联网公司有多年丰富的测试研发和测试管理经验,为我们揭开了移动App测试的神秘面纱。本书结合大量的实战经验,对移动互联网测试在功能测试、自动化测试、专项测试、QA等方面做了全面而详细的讲解,帮助测试从业者快速、系统地了解和学习移动互联网测试架构,无论是对初级测试员、专业测试员还是测试管理者都会有一些很好的启发和帮助作用。
《移动App测试实战:互联网企业软件测试和质量提升实践》主要内容:
移动互联网产品的常见研发流程,以及自动化测试的高效方法。
性能测试,包括Web前端、App端、后台服务器等性能测试。
专项测试,包括App兼容性测试、内存问题测试和分析、流量和电量测试、弱网络和稳定性测试、环境相关的测试等。
辅助测试,包括代码的静态扫描、代码覆盖率、接口mock方法以及AOP测试方法等。
移动App发布过程中的质量管理,包括持续集成、发布环节的质量把控点、内测的利与弊、灰度方法的技巧等。
产品发布之后的质量管理方法,包括交叉测试、线上监控、问题收集与反馈机制等。
主编推荐
国内互联网公司测试实战经验总结,阿里、腾讯、京东、携程、百度等公司多位测试专家联袂推荐。
从移动互联网产品测试的准备工作到产品发布后的质量管理方法,涉及移动产品的整个研发流程,是移动App开发与测试人员的必备参考。
以下为对购买帮助不大的评价