写点什么

软件测试的新趋势

2016 年 2 月 03 日

2015 年 11 月,ThoughtWorks 发布了新一期的技术雷达。技术雷达是以独特的形式记录ThoughtWorks 技术顾问委员会对行业产生重大影响的技术趋势讨论的结果,为从CIO 到开发人员在内的各方利益相关者提供价值。这期雷达的技术趋势主要体现在:受到热捧的微服务相关技术,逐步成熟的以 Docker 为典型的容器化生态系统,备受企业和用户关注的信息安全问题。本文就从这几个新趋势来分析一下给软件测试带来了哪些影响。

自动化测试是王道

在这个快速变化发展的时代,任何一款产品想要在市场具备竞争力,必须能够快速适应和应对变化,要求产品开发过程具备快速持续的高质量交付能力。而要做到快速持续的高质量交付,自动化测试将必不可少。同时,自动化测试也不是用代码或者工具替代手工测试那么简单,有了新的特点和趋势:针对不同的产品开发技术框架有着不同的自动化技术支持,针对不同的业务模式需要不同的自动化测试方案,从而使得自动化测试有着更好的可读性、更低的实现成本、更高的运行效率和更有效的覆盖率。来自技术雷达的下列主题分别体现了自动化测试的这些特点:

  • 针对微服务的消费端驱动的契约测试(Consumer-driven contract testing),有助于解决随着服务增多带来集成测试效率低和不稳定的问题。消费端驱动的契约测试是成熟的微服务测试策略中核心的组成部分。

  • 专门用于测试和验证 RESTful 服务的工具REST-assured,它是一个 Java DSL,使得为基于 HTTP 的 RESTful 服务编写测试变得更加简单。REST-assured 支持不同类型的 REST 请求,并且可以验证请求从 API 返回的结果。它同时提供了 JSON 校验机制,用于验证返回的 JSON 数据是符合预期的。

  • 安卓系统功能测试工具Espresso,其微小的内核 API 隐藏了复杂的实现细节,并帮助我们写出更简洁、快速、可靠的测试。

  • ThoughtWorks 开源的轻量级跨平台测试自动化工具Gauge,支持用业务语言描述测试用例,支持不同的编程语言,支持所支持平台的并行执行。

  • 用于针对 UI 的自动化测试构建页面描述对象的 Ruby 库Pageify,该工具关注于更快的执行测试以及代码的可读性,并可以很好的配合 Webdriver 或是 Capybara 使用。

  • 专门用于 iOS 应用开发的开源行为驱动开发测试框架Quick,支持 Swift、Objective-C,它和用来做测试验证的 Nimble 捆绑发布。Quick 主要用于 Swift 和 Objective-C 程序行为的验证。它和 RSpec 和 Jasmine 具有相同的语法风格,基础环境很容易建立。Quick 良好的结构和类型断言使得测试异步程序更加容易。Quick 拥有现成的 Swift 和 Objective-C 规范文件模板,开发者只需简单几步,即可对应用进行快速测试。

工具很重要,设计不可少!自动化测试工具云集,但做自动化也不要冲动,需要重视以下几点:

  1. 综合考虑项目技术栈和人员能力,采用合适的框架来实现自动化;

  2. 结合测试金字塔和项目具体情况,考虑合适的测试分层,如果能够在底层测试覆盖的功能点一定不要放到上层的端到端测试来覆盖;

  3. 自动化测试用例设计需要考虑业务价值,尽量从用户真实使用的业务流程/业务场景来设计测试用例,让自动化优先覆盖到最关键的用户场景;

  4. 同等看待测试代码和开发代码,让其作为产品不可分割的一部分。

云技术、容器化和开源工具使得测试成本下降

测试环境的准备在过去是一个比较麻烦和昂贵的事情,很多组织由于没有条件准备多个测试环境,导致测试只能在有限的环境进行,从而可能遗漏一些非常重要的缺陷,测试的成本和代价很高。随着云技术的发展,多个测试环境不再需要大量昂贵的硬件设备来支持,加上以 Docker 为典范的容器技术生态系统也在逐步成长和成熟,创建和复制测试环境变得简单多了,成本大大的降低。技术雷达推荐的凤凰环境(Phoenix Environment),它使用凤凰服务器(Phoenix Server)的模式,能够以自动化的方式支持测试、开发、UAT 和灾难恢复所需的新环境准备。这一技术由上期的评估环上升到了采用环,表明它已经得到了验证和认可,是可以放心使用的技术。

另一方面是大量开源工具的出现,这些工具往往都是轻量级的、简单易用,相对于那些重量级的昂贵的测试工具更容易被人们接受。测试工作有了这些开源工具的帮助,将更加全面、真实的覆盖到要测试的平台、环境和数据,将会加快测试速度、降低测试成本;更重要的一点,有了这些工具,让测试人员能够腾出更多的时间来做测试设计和探索性测试等更有意思的事情,使得测试工作变得更加有趣。新技术雷达提到的开源工具有: MountebankPostmanBrowsersyncHammsGorievms等。

  • 在企业级应用中,对组件进行良好的测试至关重要,尤其是对于服务的分离和自动化部署这两个关系到微服务架构 是否成功的关键因素,我们更需要更合适的工具对其进行测试。Mountebank就是一个用于组件测试的轻量级测试工具,可以被用于对 HTTP、HTTPS、SMTP 和 TCP 进行模拟(Mock)和打桩(Stub)。

  • Postman是一个在 Chrome 中使用的 REST 客户端插件,通过 Postman,你可以创建请求并且分析服务器端返回的信息。这个工具在开发新的 API 或者实现对于已有 API 的客户端访问代码时非常有用。Postman 支持 OAuth1 和 OAuth2,并且对于返回的 JSON 和 XML 数据都会进行排版。通过使用 Postman,你可以查看你通过 Postman 之前发起过的请求,并且可以非常友好的编辑测试数据去测试 API 在不同请求下的返回。同时,虽然我们不鼓励录屏式的测试方法,但是 Postman 提供了一系列的拓展允许我们将它作为跑测试的工具。

  • 随着网站应用所支持设备的增多, 花在跨设备测试上的代价也在不断增大。Browsersync能够通过同步多个移动设备或桌面浏览器上的手工浏览器测试来极大的降低跨浏览器测试的代价。通过提供命令行工具以及 UI 界面,Browsersync 对 CI 构建非常友好,并且能够自动化像填写表单这样的重复任务。

  • 在软件开发领域,盲目地假设网络总是可靠,服务器总是能够快速并正确的响应导致了许多失败的案例。Hamms可以模拟一个行为损坏的 HTTP 服务器,触发一系列的失败,包括连接失败,或者响应缓慢,或者畸形的响应,从而帮助我们更优雅的测试软件在处理异常时的反应。

  • Gor可以实时捕获线上 HTTP 请求,并在测试环境中重放这些 HTTP 请求,以帮助我们使用到这些产品环境数据来持续测试我们的系统。 使用它之后可以大大提高我们在产品部署,配置修改或者基础架构变化时的信心。

  • 尽管 IE 浏览器的使用量日益萎缩,但对很多产品而言 IE 浏览器的用户群依然不可忽视,浏览器兼容性仍然需要测试。这对于喜欢使用基于 Unix 的操作系统进行开发的人来说还是件麻烦事。为了帮助解决这个难题,ievms提供了实用的脚本来自动设置不同的 Windows 虚拟机镜像来测试从 IE6 到 Microsoft Edge 的各种版本浏览器。

安全测试贯穿整个生命周期

“安全是每一个人的问题”!互联网安全漏洞频繁爆发,安全问题已经成为每个产品迫切需要关注和解决的问题,安全测试将需要贯穿于软件开发的整个生命周期。同时,给软件测试人员带来了更多的机遇和挑战,要求具备更多的安全相关知识(其中还包括更多的计算机基础知识),掌握已有的安全测试相关技术,从而在软件开发的各个阶段做好安全相关的分析和测试工作。尽管有些团队已经将安全跟整个开发实践结合起来,但培养每个人在每个阶段的安全意识还相当的重要,探索新的安全测试技术、方法还有很多空间。

技术雷达上列出的安全测试相关的技术和工具有:Bug bounties威胁建模(Threat Modelling) ZAPSleepy Puppy

  • Bug bounties是一个安全漏洞举报奖励制度,越来越多的组织开始通过 Bug bounties 鼓励记录常见的安全相关的 Bugs,帮助提高软件质量。

  • 威胁建模(Thread modeling)是一组技术,主要从防御的角度出发,帮助理解和识别潜在的威胁。当把用户故事变为“邪恶用户故事”时,这样的做法可给予团队一个可控且高效的方法使他们的系统更加安全。

  • ZED Attack Proxy (ZAP)是一个 OWASP 的项目,允许你以自动化的方式探测已有站点的安全漏洞。可以用来做定期的安全测试,或者集成到 CD 的 Pipleline 中提供一个持续的常规安全漏洞检测。使用 ZAP 这样的工具并不能替换掉对安全的仔细思考或者其他的系统测试,但是作为一个保证我们的系统更安全的工具,还是很值得添加到你的工具集里。

  • Sleepy Puppy是 Netflix 公司近期开源的一款盲打 XSS 收集框架。当攻击者试图入侵第二层系统时,这个框架可用于测试目标程序的 XSS 漏洞。XSS 是 OWASP 的 Top10 的安全威胁,Sleepy Puppy 可以用来同时为几个应用完成自动安全扫描。它可以自定义盲打方式,简化了捕获、管理和跟踪 XSS 漏洞的过程。Sleepy Puppy 还提供了 API 供 ZAP 之类的漏洞扫描工具集成,从而支持自动化安全扫描。

优化业务价值

大多数软件都是做项目的模式,在不同的档期内进行计划、实现和交付。敏捷开发极大的挑战了这种模式,通过在开发过程中各个阶段进行的分析和测试工作,持续的发现新的需求,使得需求更趋于合理化,更能体现业务价值。精益创业的技术,如观察需求的 A/B 测试,进一步削弱了这种心态。技术雷达推荐“产品优于项目(Product over project)”,认为大多数的软件开发工作应该遵循精益企业的引领,将自己定义为构建支持业务流程的产品。这样的产品并没有所谓的最终交付,更多的是一个探索如何更好的支持和优化业务流程的过程,只要业务依然有价值就会不断持续下去。

作为软件开发中的关键角色、负责软件测试的QA 人员,通过从用户角度对软件的测试,结合自身对软件产品的了解,对优化业务价值将会起到举足轻重的作用。软件测试不仅是检验软件是否满足规定的需求或弄清预期结果与实际结果之间的差别的过程,还需要有意识的对需求进行持续的验证和优化,对业务的趋势和风险进行分析。如果能在开发过程中结合使用 BDD(行为驱动开发)的思想,统一团队对需求的认识,利用团队的力量来优化业务将会达到事半功倍的效果。

传统方式下,QA 角色主要专注于保证软件产品在类产品环境下的质量。随着持续交付的出现,QA 角色逐渐转变到需要分析软件产品在产品环境下的质量。产品环境下的 QA(QA in production),就是要求 QA 角色在做好产品上线前的质量保证工作前提下,做好软件产品在产品环境下的质量分析。具体做法有:

(一)引入产品系统的监控, 制定检测条件,找出产品环境下使用的质量度量。比如,利用网站分析工具收集用户使用应用程序的数据,分析数据量需求、产品的性能趋势、用户的地域特征、用户的行为习惯和产品在同类型产品市场的占有率等。

(二)收集产品环境下最终用户的反馈,对反馈进行分类分析。这些反馈可能有:

  • 缺陷:需要进行优先级划分,确定是否需要修复;并且对这些缺陷进行根源分析,在以后的开发过程中尽量避免同类型的缺陷再次出现。

  • 抱怨:对于抱怨需要分析其背后的原因,可能正是能够帮助我们改进和优化业务价值的好机会。

  • 建议:一般用户可能难以提出高质量的建议,需要我们在收集反馈的时候下点功夫,有针对性的去收集。一旦收集到了建议,将是对业务价值优化非常有利的。

通过对产品环境下的软件质量进行分析,将有利于协助“产品优于项目”实践,帮助优化业务价值,做好企业产品的创新工作。需要注意的是,产品环境下的 QA可能会导致有些组织走的太远而忽视产品上线前的质量保证,它只对那些已经执行并有一定程度持续交付实践的组织有价值。

总结

软件测试是一项技术工作,但软件测试领域的问题不仅仅是技术问题。随着自动化程度越来越高,不断有人怀疑 QA 存在的必要性,从前面的分析可以看到,新趋势给 QA 提出了更高的要求,带来了更多的机遇和挑战,相信好的 QA 是不可能简单的被取代的。


感谢张凯峰对本文的审校,崔康对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2016 年 2 月 03 日 16:206952

评论

发布
暂无评论
  • 你真的懂测试覆盖率吗?

    测试覆盖率包括需求覆盖率和代码覆盖率,但是需求覆盖率的统计方式不再适用于目前的敏捷开发实践,所以现在的“测试覆盖率”,更多的是指代码覆盖率。

    2018 年 7 月 11 日

  • DevOps 落地成不成,关键不在持续集成?

    本文介绍现阶段持续测试是如何帮助团队成功落地并实现DevOps转型的。

  • TDD 团队中的测试人员

    实施TDD(测试驱动开发)实践的团队不再需要测试人员进行手工测试。对于测试人员来说,这种改变意味着他们以往所熟悉的工作内容逐渐消失了。同时,现代化的测试解决方案包含了更多技术性内容,因此需要专家的参与。对于测试人员来说,这是一个非常有吸引力的机会,但他们必须掌握扎实的技能。

  • 实现 ATDD 的快速指南

    协作是敏捷方法的核心价值观之一。也就是说,您要留意如果敏捷团队中的开发人员、测试人员和业务人员之间缺乏协作,会发生什么? 本文提供了在您的项目中实现验收测试驱动开发(ATDD)的快速指南,以缓解由于缺乏协作而导致的问题。

  • 你的应用就绪了吗?

    我们通常会按时间交付软件,在截止时间之前努力完成所有开发和测试工作。我们会优先完成那些自己觉得重要的部分,当应用达到确定的质量标准后,就准备上线了。但交付软件时,我们能辨别应用的就绪状态吗?

  • 自动化测试:DevOps 的阿克琉斯之踵

    没有人会否认自动化测试的价值,但是从整体来看,自动化测试的实施普遍不成体系。那么今天,我们就来聊聊如何实施自动化测试。

    2019 年 11 月 9 日

  • 自动化测试——回顾与展望

    作者在这篇文章中会和大家一起来整理一下2013年自动化测试领域一些比较值得关注的变化,也展望一下2014年可能发生的变化,希望读者可以从中可以发现一些线索,进而做相关延伸阅读。

  • DevOps 敏捷测试之道(下)

    本文介绍企业在敏捷和DevOps的逐步转型过程中,测试如何应对挑战,有的放矢进行测试,建立适合产品自身发展阶段、产品特点的敏捷测试能力。

  • 如何在 iOS 中进行面向测试驱动开发和面向行为驱动开发?

    在今天这篇文章中,我和你讨论的是,在iOS开发中,如何进行BDD和TDD。

    2019 年 5 月 16 日

  • 软件测试自动化的最新趋势

    过去几年,QA 行业的一个持续趋势是测试自动化和持续测试。这一趋势也将在 2019 年继续下去。虽然 CI/CD、DevOps 和测试框架在未来一年仍将是突出的主题,但一些新技术正在影响我们测试的内容和测试方法。

  • 产品环境下的 QA

    2015年11月ThoughtWorks发布的技术雷达提到一个新的主题——产品环境下的QA(QA in Production),2016年4月再次提到。这个主题第一次出现在技术雷达,就深深的吸引了我,当时我就给测试团队成员转发了这个内容,但同时脑子里却产生这样一系列的疑问: 产品环境下的QA可以做什么呢?有什么挑战,又有哪些好处? 它跟类产品环境的QA有何区别,是否就是类产品环境QA方法的延伸? 产品环境有运维支持团队(Ops),产品环境下的QA跟Ops所做的事情又有什么区别与联系? 带着这些疑问,结合项目上的一系列实践,于是有了本文。

  • 软件测试工程师需要掌握的非测试知识有哪些?

    软件测试工程师需要掌握非常多的非专业知识,主要包括:网站架构、容器技术、云计算技术、DevOps思维,以及前端开发技术等的核心知识以及实践。

    2018 年 7 月 20 日

  • Robot Framework 作者建议如何选择自动化测试框架

    软件自动化测试,作为手工测试的替代,越来越受到关注。Pekka Klärck,作为Robot Framework的创建者和核心开发者,按照系统级别,介绍了几种不同的自动化测试方法的区别。

  • 携程酒店 DevOps 测试实践

    本文转载自公众号携程技术(ID:ctriptech)。

  • Better Software East/DevOps East/Agile Dev East 2016 大会上的教程介绍

    2016年11月14日到18日,Better Software East、DevOps East和Agile Dev East三个大会同时在美国佛罗里达州奥兰多市举行。在会议组织上,这些会议都包括为期两天的教程介绍、两天的演讲以及一天的闭幕式Agile Summit Day。其中在最后一天里,有多名国际演讲者发表了主题演讲。InfoQ参加了大会,并报道了大会内容。

  • 测试工具如何创新

    本年度的测试工具Jolt大奖最近公布,社区专家Andrew Binstock认为测试工具多年来没有任何创新,总是把已有的概念实现并应用到新的平台上。今年也是一样,主题与移动领域和云计算领域有关。他认为目前各种测试功能的支持方面最大的问题是缺乏自动化,“自动化”是录制、回放。这意味着编写脚本来测试不是自动化,测试工具应该从界面上来支持自动化,而不是要求测试人员在后台编写脚本。

  • 持续测试的益处

    自从2006年Unruly公司成立以来,其团队就开始采用极限敏捷(XP)实践并沿用至今。这些团队在开发代码时遵从测试优先原则,并且投入了大量的精力以实现能够在真实环境运行的自动化检测。InfoQ有幸对Rachel Davies进行了采访,内容涉及以持续化方式进行测试的重要性、这种方式是如何演变的,以及它为Unruly所带来的商业优势。

  • 知其然知其所以然:聊聊 API 自动化测试框架的前世今生

    对于API测试,我们不能仅仅停留在感性认识的层面,还需要熟悉并掌握这些测试方法,完成相应的API测试工作。

    2018 年 8 月 20 日

  • 为什么要做自动化测试?什么样的项目适合做自动化测试?

    自动化测试是一把“双刃剑”,你需要明确哪些场景可以开展自动化测试,而哪些场景下的测试并不适合自动化,才能最大限度地发挥自动化测试的优势。

    2018 年 7 月 6 日

  • ThoughtWorks 技术雷达中的最新技术趋势

    Thoughtworks最近发布了新一期的技术雷达,强调了这样几个方面:基础设施即代码、无边界企业、在空白领域中运用经过验证的实践,以及轻量级分析。

发现更多内容

华为:“智能分布式接入网”打造真千兆高品质生活体验

Geek_459987

MySQL-技术专题-MySQL MVCC实现机制

李浩宇/Alex

架构师训练营第四周学习笔记

一马行千里

学习 极客大学架构师训练营

一个草根的日常杂碎(10月14日)

刘新吾

随笔杂谈 生活记录 社会百态

12张图带你彻底理解分布式事务产生的场景和解决方案!!

冰河

分布式事务 2PC 可靠消息最终一致 TCC 最大努力通知

架构师训练营第四周命题作业

一马行千里

极客大学架构师训练营 命题作业

甲方日常 31

句子

工作 随笔杂谈 日常

算法图解:如何找出栈中的最小值?

王磊

Java 数据结构 算法

华为发布“品质专线2.0&智能分布式接入”解决方案

Geek_459987

LeetCode题解:590. N叉树的后序遍历,栈,JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

使用Spring Boot创建docker image

程序那些事

Docker spring Spring Boot Spring Boot 2

LAXCUS大数据集群操作系统:一个分布式分时共享E级系统软件(二)

陈泽云

人工智能 大数据 基础设施 国产操作系统

区块链跨境支付系统开发源码,承兑系统搭建

WX13823153201

合约智能一键跟单系统开发,API合约跟单软件

135深圳3055源中瑞8032

亿级数据库毫秒级查询?看完这一篇,海量数据赋能你也行

京东智联云开发者

MySQL 数据库

为什么学习总是停在开头两页?

Nydia

Java-技术专题-纤程库Quasar

李浩宇/Alex

华为卢毅权:品质专线2.0 打造无处不在的品质联接

Geek_459987

区块链交易所开发搭建源码,数字货币交易系统

135深圳3055源中瑞8032

中年架构师,悲催的一天,全靠忍!

四猿外

Java 程序员 程序人生 架构师

MySQL-技术专题-MySQL中的锁机制

李浩宇/Alex

十一、给小白看的最后一篇Python基础教程

刘润森

Python

numexpr:你以为numpy已经够快了,其实它还可以更快

计算机与AI

Python 学习 数据分析 Numpy

一个草根的日常杂碎(10月13日)

刘新吾

随笔杂谈 生活记录 社会百态

USDT支付系统开发解决方案服务商,承兑商支付

135深圳3055源中瑞8032

LeetCode题解:589. N叉树的前序遍历,栈,JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

一个草根的日常杂碎(10月12日)

刘新吾

随笔杂谈 生活记录 社会百态

区块链钱包系统开发,多币钱包app源码搭建

135深圳3055源中瑞8032

塞上江南之旅

谋生亦谋爱

美食 旅行

一个你不得不重视的趋势,而且数据会让你很诧异

非著名程序员

个人成长 短视频 自媒体

金秋十月游记

Xuhehui

美食 旅行

InfoQ 极客传媒开发者生态共创计划线上发布会

InfoQ 极客传媒开发者生态共创计划线上发布会

软件测试的新趋势-InfoQ