前言
为什么要写这本书
随着业界对软件测试的重视,关于软件测试方面的书籍也逐渐增多。目前软件测试书籍的内容也挺广泛,常见的有测试设计、测试管理、测试团队组建、测试理论、测试过程、测试脚本编写、自动化测试、性能测试等,面面俱到。但是涉及实际的工程,测试如何进行、测试工程师如何进行实际的工作方面的书籍却不多。而针对工作中,测试工程师如何思考问题、如何改进测试方法从而提高软件的质量和开发效率的书就更少了。
于是,我们想要写一本关于测试工程师在企业中如何工作、会做哪些方面工作的书。同时也希望把我们测试工作中的一些经验与读者分享,使读者了解在实际项目中,测试工作是如何进行的。当然我们的工作不是尽善尽美的,肯定会有更好的办法出现,希望读者能和我们交流,讨论任何的测试技术问题,共同提高测试的技术水平。
本书是“百度测试系列”的第一本,该系列的其他书籍将陆续面世,敬请读者关注。
本书讲什么
Windows 应用程序贴近于用户,伴随着互联网时代的到来,更是充当着通往整个互联网的入口,其本身的特性就决定了对于 Windows 应用程序的测试,需要面对更加复杂的用户软硬件环境和复杂网络环境,测试所需要关注的信息和内容更加丰富,这给Windows应用程序测试带来了巨大的挑战,同时也给Windows应用程序测试工作带来了更大的乐趣。
像传统测试领域中的自动化测试、性能测试、稳定性测试一样,在 Windows 应用程序测试范畴内,除了需要解决基本的技术问题外,还需要关注不同用户环境所带来的影响;诸如兼容性测试、产品评测等在服务器产品中关注度比较低的测试工作,在Windows应用程序测试中显得举足轻重,往往决定了一款客户端产品宏观的质量状态;对于以用户界面(UI)为交互接口的产品来说,其功能测试的设计和执行方法,更是区别于服务器产品的测试,有更大的空间和组合场景等待测试人员去探索和发现。
在敏捷测试模式逐渐被认可和应用的时代,Windows 应用程序的测试和开发工作结合得更加紧密,产品的质量不再仅依靠测试人员保证,开发人员也起了非常重要的作用。在整个研发体系中,质量保证工作也会像产品架构一样,分层次进行,测试作为一项服务对产品质量进行贡献,不受限于具体的工作职责划分:类似单元测试、可测性架构支持、性能瓶颈分析等工作开始贯穿到整个研发过程,而在此过程中对测试人员的要求会逐渐提升,往往会以专家和顾问的角色出现在产品研发过程中,主导整个产品质量保证工作。
本书所介绍的一系列 Windows 应用程序测试技术和方法都是基于敏捷研发模式框架,在实际项目中积累起来的,相对于传统测试理论的书籍更加具有实战参考价值,是项目实战中成功或失败经验的升华和结晶。
本书的读者
以下几个方面的读者可能会受益:
● 从事Windows客户端测试的同行;
● 喜欢接受测试技术挑战的朋友;
● 即将进入测试行业的院校毕业生;
● 想了解百度如何测试的测试爱好者。
本书的内容
本书是一本技术性的书籍,主要介绍技术内容,流程性的内容涉及得比较少。全书分为两个部分。上半部分为技术篇,主要介绍测试用到的相关技术,通过技术手段使测试做得更高效,测试的质量更高。下半部分为工程篇,主要介绍工程实际测试项目如何实施持续集成及通过持续集成测试做了哪些改变。
上篇:技术篇
第1章 测试环境管理
测试环境在测试中起着很重要的作用,一次测试的成功与否,测试环境的正确与否占了很大比重。然而繁多的Windows 操作系统、层出不穷的各种应用软件,使得部署、维护测试环境包含了太多的重复性劳动,以及硬件资源的严重浪费。本章详细介绍如何能够在短时间内全自动化部署一个用户所需的Windows 测试环境,如何在团队之间可视化地高效共享已有测试环境,以及如何高效地利用机器资源池。
第2章 测试数据中心
测试数据对于测试工作来说至关重要,特别是对于偏数据处理类的产品来说更是如此。测试数据中心的作用除了普遍能想到的管理各种测试数据的功能外,还需要考虑日常测试工作中的实际测试需求,特别是建立从测试数据到被测对象之间的“通信链路”,以便将大批量的测试数据导入到被测对象中。本章从测试数据中心的一般性需求入手,介绍期望的抽象平台模型及相应的实例参考,为需要进行大规模测试数据管理和测试辅助执行的客户端类产品提供方法和技术上的支持。
第3章 自动化测试
自动化测试始终是测试领域被关注的焦点,其涉及的方面很多:根据被测对象的不同,所需要的自动化支撑技术也会有所区别,本章将从常见的PC 客户端UI 自动化驱动和识别技术讲起,对于工程实践中各种技术方案的特点和应用场景进行分析,为读者打开进行自动化测试工作所需要的第一步技术积累。除此之外,也会从工程实践角度一一为读者呈现自动化测试领域中经常涉及的用例开发和组织模式、框架管理等常见环节。本章所涉及的自动化测试技术主要面向客户端产品的系统级UI 自动化,希望大家通过本章阅读开启对自动化技术和工程实践的认识和理解。
第4章 性能测试
软件的性能直接决定了用户在使用过程中的体验,而如何衡量客户端软件的性能、不同客户端软件之间的性能如何比较,则是性能测试工程师必须回答的问题。在本章的前4 节中,介绍关于客户端性能测试的指标、环境和测试的方法,以及如何进行测试场景的设计。在本章最后一节,还结合具体的项目,将本章前几节中所描述的内容拼接起来,让读者看到这些理论知识是如何在项目中应用的。
第5章 实网测试
网络带宽成本大幅降低,用户的网络应用需求与日俱增,各种依赖互联网的客户端软件日益增多。这类应用软件的测试往往需要实验室模拟用户网络环境,然而网络环境模拟的高技术门槛、硬件资源成本及用户繁多的网络环境,极大降低了实验室测试这类软件的质量和效率。本章介绍如何高效、低成本地测试网络应用软件。
第6章 评测
产品评测是测试工作的扩展和延伸,在传统测试领域中,多数测试工作的目标是发现Bug,但在评估标准上有严格的定义。对于评测来说,目标往往是测试或者评估产品的宏观质量,例如输入法的词库质量、搜索结果的排序质量等,很难用Bug 来描述产品的这类宏观指标。本章就对这一类特殊的“测试”工作进行介绍,包括评测工作所需要考虑的各个环节,如评测指标定义、评测数据、评测环境、评测对象、评测结果分析等一整套系统分析过程。
下篇:工程篇
第7章 敏捷带来的改变
当传统的开发模式已经不能满足现在对软件快速发布、快速迭代的要求时,引入敏捷方式势在必行。然而实施敏捷获得成功并取得收益的团队却寥寥无几,大多数团队缺少专业的敏捷教练,这使得他们在敏捷的道路上走了不少弯路。本章与读者分享在敏捷团队建设和项目管理方面的一些亲身经验和教训,所有信息均来自真实项目的实践活动,而非理论。读者可以了解在一个产品项目中如何做迭代规划、需求管理、计划跟踪及信息传递,具体到如何确定一个适合的迭代周期,如何写好一个用户故事,如何增加信息的透明度和一致性,并提供了一些项目管理文档模板,供读者借鉴使用。
第8章 持续集成
持续集成也是近年谈论得比较热的话题,讨论在工程实践上需要做哪些基础技术工作,才能使持续集成起到良好的作用,并在工程开发中提高效率。本章介绍持续集成的各个组成部分、各个组成部分是如何实现的、它们的技术难点,以及一些关键解决方案。
第9章 构建过程优化
部署起持续集成之后并开始按照持续集成要求运转,这时候只能得到60 分,为了能让持续集成中的各个环节发挥出完全的功效,还需要对其中很多方面做精雕细刻。本章介绍持续集成做到一定程度之后遇到的各种问题,以及这些问题的优化方法和解决方案。本章使用实例来详细介绍各种设计,对比各自的优劣,以便读者可以选择适合自己的方案。
第10章 快速发布
各种团队的软件开发过程不尽相同,测试也各有差异。测试活动的开展依赖测试人员的多少、经验,软件的类型、规模、发布周期等多种因素。通过前面的章节,读者已经学习到如何让持续集成在团队中运转起来,但要让持续集成中的各个环节发挥出完全的功效,还需要将其中很多方面做细致。本章将分享在追求“完美”测试的道路上的亲身实践经验。本章前半部分,主要介绍从主线拉出分支到迭代发布的过程中,如何提高各个环节的质量和效率;后半部分,则重点讲述如何将测试延伸到一个迭代发布之后。希望对从事或者即将从事客户端测试的读者有所启发和帮助。