京东测试之道,这些你早该知道!

随着VUCA(易变性、不确定性、复杂性、模糊性)时代的到来与互联网的高速发展,质量保障人员面临着前所未有的挑战。

测试岗位的职责越来越细化,测试人员的工作边界也越来越模糊,研发、测试和运维角色都在推动 DevOps 和 TestOps 的发展。

在和测试同行交流的过程中 , 我们发现很多人非常焦虑,找不清发展的方向,尤其是工作四五年之后一直还在做系统测试的人,就更为焦虑。

2017 年年末,作者所在的京东质量团队在进行年终总结时欣喜地发现,自团队从测试到测试开发转型这一年来,整体测试水平得到了大幅度提升 , 测试人员在研发团队中的影响力也进一步扩大。

从系统测试工程师逐渐转型升级为测试开发工程师,转型过程中的艰辛不言而喻,在转型中除了技能的提高之外,更多的是获得了一种自信

cbe907c008866e6f0211fb18bd821323

扫码购书哦

本书不仅展示京东质量团队从测试到测试开发的心路历程,更是整个过程中从思想准备到实践努力再到成功推进的思考和总结。

本书适合有一定工作经验的测试人员阅读,对从测试转型测试开发的人员具有指导意义。本书同样适合测试经理、测试总监和测试架构师阅读。书中的例子和故事均为团队转型中遇到的真实案例。我们历经各种辛酸才能走出一条路,希望本书能给读者一些启发和帮助。

软件测试

首先要明确一个概念,“质量”是整个团队的责任而不是仅仅靠团队测试人员就能够明显改善的。测试的目的是什么试不是要证明系统或者软件没有问题,恰恰相反,而是要证明其存在问题。

通过测试可以发现缺陷,但不能保证软件或者系统的缺陷全部被找到。在有限的时间和资源条件下,想要进行完全的测试,找出软件或者系统所有的缺陷,使之达到完美,是不可能的。

此外,测试也是有成本的,越到测试后期,,为发现缺陷所付出的代价就会越大,因此要根据测试错误的概率及软件的可靠性要求, 确定停止测试的最佳时间,不能无限地测试下去。除此之外,所有的测试都应追溯到用户需求,这是因为软件或者系统的最终目的是满足用户需求。

1.1.1 什么是软件测试

1983 年,Bill Hetzel  在《软件测试完全指南》一书中指出:“测试是以评价一个程序或者系统属性为目标的任何一种活动, 测试是对软件质量的度量。”Bill Hetzel 的定义至今仍被引用。

1991 年,软件产品质量评价国际标准 ISO 9126 定义的“软件质量”是:软件满足规定或潜在用户需求特性的总和。

1999 年,软件产品评价国际标准ISO 14598 对“软件质量”的定义是: 软件特性的总和,软件满足规定或潜在用户需求的能力。

2001 年,软件产品质量国际标准ISO 9126 定义的“软件质量”包括内部质量、外部质量和使用质量 3 个部分, 也就是说,“软件满足规定或潜在用户需求的能力”要根据软件在内部、外部和使用中的表现来衡量。

《软件评测师教程》(柳纯录主编,清华大学出版社)这本软件评测师考试辅导书对软件测试和质量保证做了详细的区分和描述:测试工程师的一项重要任务是提高软件质量,但不等于说测试工程师就是软件质量保证人员,因为测试只是质量保证工作中的一个环节。

测试工程师并不生产质量,质量的生产者还是开发工程师。质量保证和软件测试是软件质量工程中两个不同层面的工作。

质量保证:质量保证的主要工作是通过预防、检查与改进来保证软件质量。

QA 基于“全面质量管理”和“过程改进”原理开展质量保证工作。虽然在 QA 的活动中也有一些测试活动,但其所关注的是软件质量的检查与测量。QA 的工作是对软件生命周期的管理,以及验证软件是否满足规定质量和用户需求的过程,因此主要着眼于软件开发活动中的过程、步骤和产物,而不是对软件进行剖析以找出问题或评估。

虽然测试与开发过程紧密相关,但软件测试关心的不是过程的活动,重点要对过程的产物及开发出的软件进行剖析。测试人员要“执行”软件,对过程的产物— 开发文档和源代码进行走查,运行软件,以找出问题,提升质量。

测试人员必须假设软件存在潜在的问题,测试中所进行的操作是为了找出更多的问题,而不仅仅是为了验证每一件事是正确的。对测试中发现的问题进行分析、追踪与回归测试也是软件测试的重要工作,因此软件测试是保证软件质量的一个重要环节。

在 20 世纪 90 年代,随着测试工具的盛行,测试工程师逐渐意识到通过强化工具来解决问题的重要性,工具思维在测试工程师的心里已经变成了思考问题的重要方式,但是这里的工具思维是指使用工具的思维,还没有出现创造工具的思维。

软件测试是一项旨在保障软件质量的服务,软件测试只能证明一个软件存在缺陷,却不能证明一个软件没有缺陷。

随着生命周期成熟度的提升,以及持续集成乃至开发运维的变迁,软件测试不仅旨在保证软件的质量,保证软件质量、提高交付频率变成了相辅相成的目标。保证软件的质量是基础目的,提高交付频率是根本目的。

软件测试是为了寻找软件的缺陷和错误,提高软件的质量和交付频率,因此所有软件测试都应该可以溯源到用户需求,无论是用户明确的显性需求,还是一些系统安全、系统兼容、性能等的隐性需求。

1.1.2 业务测试

如今,人们通过网络可以方便地购买各种各样的物品,除了实物之外,还有各种虚拟物品,如飞机票、火车票和电影票等。与此同时,人们还可以很方便通过网络缴纳生活中所需要的各种费用,如手机充值,缴纳电费和水费等。

从物品的查找,到用户支付成功,最后到用户收到物品(或者充值面值的筛选, 充值成功),这一系列流程都属于电子商务的一个具体业务,那么如何进行业务测试呢者所在团队主要从事电商网站的虚拟业务的功能测试,下面就笔者所在团队的工作内容展开详细介绍。

业务测试的侧重点在业务流程上,在基本功能点都已合格的基础上,准备并组合多种测试数据,驱动或辅助在各种约束条件下的业务流程测试,确定最终输出的结果是否符合预期。

业务测试多数要结合实际业务逻辑,黑盒、白盒、灰盒这些测试方法都可以用来辅助测试。业务测试并不能单单满足于功能实现,更要站在真实用户使用的角度提出问题、给出建议,从而优化程序。

如何开展业务测试呢试前置在行业内越来越多地被提及,在功能测试中, 测试也应做到前置,不能等到系统全部提测了再介入测试。

1.需求测试

越早发现缺陷,修复缺陷的成本就越低,那么缺陷最早能在什么时候被发现呢毫无疑问,在需求最早提出的时候。当一个需求被提出时,测试人员不能认为提出的需求是完全正确、没有问题的,需要对需求设计的正确性、合理性及实施性进行测试,尽早发现需求中的问题并跟进解决。

在需求阶段发现问题的修复成本很低,也是在源头保证质量的有效手段。需求测试如图 1-1 所示。

e3455f6abf2ee30f6d80fb1e93c36565

图 1-2 设计测试图

3.过程测试

过程测试是功能测试的重点,也是集中发现缺陷的阶段。在系统测试开始之前, 测试人员需要完成测试数据的准备,以及测试计划、测试用例的设计,并经过项目组成员评审通过。评审过程有两个目的:一是弥补测试设计中遗漏的地方,二是项目组成员达成共识,认可测试设计以避免后期不必要的麻烦。

在过程测试的实施过程中,笔者所在团队采用了分层测试、外部解耦、流程仿真等手段保证系统质量,如图 1-3 所示。

4124bc1ac35dd4638c66b7cec7d6502b

图 1-4分层测试

数据层测试:数据层测试首先对数据库中的原始数据及聚合数据的准确性进行验证,如精度、数量、存储有无丢失等,在保证这一层质量后进入下一层测试。

API 层测试:首先需要强调,API 层测试也是功能测试的一部分。通过接口调用验证服务器返回的数据是否准确,服务器端可能会将数据进行运算并返回。通过 API 层验证保证数据传输的准确性,保证接口层通过测试后进入下一层测试。

UI  层测试:通过覆盖系统所有逻辑路径保证数据展示层的正确。

(2)外部解耦

外部依赖有时是阻碍测试进度的一个主要原因,但是一个系统的运行往往离不开外部系统的依赖,如网络环境、消息依赖和数据依赖等。

测试过程中如何降低系统间的耦合度是高效进行测试的关键。

作者所在部门通过 MQ(消息队列)消息自动发送组件模拟外部依赖消息,可以解决消息依赖问题,降低耦合度。

该工具适用于笔者所在部门的整个业务,如利用该工具模拟机票业务出退票消息, 成功摆脱消息依赖,使测试效率及准确性大大提升。

(3)流程仿真

在系统测试过程中,往往有些极端情景或流程很难模拟,或者由于测试环境、数据量不足等原因导致无法进行模拟的情况。然而,这些情景或流程有时又非常重要, 这就造成测试覆盖不全的情况发生。

笔者所在部门从穿线测试理论得到灵感,对流程主信息进行标记追踪,根据不同情况将流程引导至设定的极端情况中,覆盖极端情况,验证系统处理能力,很好地解决了这一难题。

4.用户体验

在保证系统逻辑功能正确的基础上,还要对用户体验进行测试。由于电商网站的特点,用户体验非常重要,因此笔者所在公司对用户体验非常重视。

好的使用体验不仅可以留住用户,而且能够提升购物转换率,为公司带来实际的效益。在实际项目中,用户体验可以从以下几方面考虑。

(1)应用性

应用性要考虑是否符合用户的实际应用场景,这就要求针对受众用户群体,考虑他们的年龄、学历、技能和职业等因素,要具备通用性。

(2)易用性

易用性要检查是否容易理解、是否容易学习、是否容易操作。例如,用词一定要简单和易理解,不能专业性太强,降低用户的理解难度;操作要简洁,不要过于烦琐, 减少用户的抵触情绪,最好做到不需要用户过多思考就可以直接操作。

(3)少选择

给用户的选择要尽量少,即界面的菜单、按钮、选择项越少越好,减少用户的困惑。除此之外,还要在流程、规范上保证系统质量。

例如,测试固有流程规范保证每个环节结果真实,有据可依;异常流程紧急处理规范使工作高效进行;自动化代码编写、执行规范使代码自动化、易维护、易运行;功能测试执行规范且严格执行, 做到对线上环境零影响,使项目合规率达到 100%。

5.界面测试

界面是电商网站与用户交互最直接的层面。

界面的好坏决定了用户对网站的第一印象。设计良好的界面能够引导用户自己完成相应的操作,起到向导的作用。界面如同人的面孔,具有吸引用户的直接优势。

设计合理的界面能给用户带来轻松愉悦的感受和成功的感觉。

相反,设计失败的界面让用户有挫败感,再实用强大的功能都可能在用户的畏惧与放弃中“付诸东流”。

既然界面的好坏如此重要,那么在测试过程中界面测试就变得不可或缺。在具体的工作中,界面测试应该关注哪些点呢/b>

界面测试如图 1-5 所示。

c607c70f4c78231e8f9a72cdece880f2

图 1-6职位细分趋势

软件工程师是从事软件开发相关工作人员的统称。它是一个广义的概念,包括软件设计人员、软件架构人员、软件工程管理人员、程序员等一系列岗位,工作内容都与软件开发生产相关。软件工程师的技术要求是比较全面的,除了基础的编程语言、数据库技术等,还有诸如 JavaScript、AJAX、Hibernate、Spring 等前沿技术。

运维工程师负责维护并确保整个服务的高可用性,同时通过不断优化系统架构、提升部署效率、优化资源利用率、提高整体的 ROI(Return On Investment)。运维工程师面对的最大挑战之一是大规模集群的管理问题,既要管理好几十万台服务器上的服务,又要保证服务的高可用性。

质量保障(QA)工程师不仅要理解产品的功能要求,还负责对其进行测试,检 查软件有没有缺陷,测试软件是否满足稳定性、安全性和易操作性要求,以及写出相应的测试规范和测试用例。

简而言之,质量保障工程师在一家软件企业中担当的是“质量管理”角色,他负责及时发现软件问题并及时督促更正,确保产品的正常运作。

随着细分领域的不断发展,出现了同时承担开发和测试工作的角色—测试开发工程师,同时承担开发和运维交叉工作的角色—开发运维工程师,同时承担测试和运维工作的角色—测试运维工程师。由于 3 个角色交叉的工作在现在的大型项目中不太容易出现,因此,如果有这部分工作,那么只需要一个“超人”一样的角色来完成。

分层自动化测试这个概念最近曝光度比较高。传统的自动化测试更关注产品 UI 层的自动化测试,而分层自动化测试倡导产品的不同层次(阶段)都需要自动化测试, 如图 1-7 所示。/p>

f6dfd06f7f4f3d77020766b88bdcf71a

 1-8成长路线

测试开发的主要工作内容是完成和维护自动化测试相关的工作。自动化测试就是通过使用或者开发测试工具、测试框架、测试系统和测试平台,按照测试工程业务测试的流程、计划及预期对被测系统进行测试的过程。

自动化测试是软件测试的一个重要组成部分,自动化测试和业务测试既不能相互完全替代,也不能完全相互分离。正确、合理地利用自动化测试手段,结合业务测试流程和执行,能够提高测试效率和测试覆盖率,从而保证软件的质量,缩短开发周期,提高交付频率,节省工期和人力成本。

自动化测试涉及测试流程、测试体系、测试规范、测试方案、自动化的执行测试、自动化的测试环境治理等方面,既有技术的问题,又不仅仅有技术问题。自动化测试需要长期投入,涉及专门团队建立、维护,以及发展自动化的流程、体系等内容。

自动化测试的优点如下。

(1)模拟人工测试流程,减少重复、机械的测试工作,让机器执行固有流程, 提高可靠性。

(2)提高测试的精准度,提高测试执行范围,针对海量参数进行测试,机器的执行效率会更高。

(3)更好地利用测试资源,将复杂、烦琐的测试流程交由机器执行,可以让测试人员有更多的精力去关注质量保证方面的问题。

(4)具有可重复性和测试一致性。

(5)提高测试用例的复用性。

另外,自动化测试不是测试效率提升的关键,它也存在不可避免的劣势和局限性。在如下场景中自动化测试并不适用。

(1)永远不会再重复的测试流程。由于维护一套自动化测试脚本或者流程需要投入很大的精力和成本,因此仅仅测试一次永远不会再次出现的测试流程并不适合采用自动化测试。

(2)项目工期非常短的需求。由于准备一个新流程的测试脚本的时间会远远大于业务测试执行时间,因此在工期并不充分的情况下,采用业务测试手段保障测试质量更直接、更迅速。
(3)UI 的易用性等测试并不适合自动化测试,因为 UI 设计的美化、交互是否符合人的固有习惯目前是机器无法评价的,还是需要业务测试人员直接参与。

(4)实际软硬件结合场景。例如,需要无人机配送的测试,并不适合自动完成全部流程。

(5)任何技术都有局限性,上面并没有完全覆盖自动化测试不适用的所有场景。测试开发工程师是一个交叉工作的角色。

与开发工程师相比,测试开发工程师除了要具备写代码的能力,还需要掌握操作系统、数据库、网络、软件测试等相关领域的知识;与业务测试工程师相比,测试开发工程师拥有编写测试脚本、设计测试框架、搭建测试平台、维护测试环境等技能,但是可能没有业务测试工程师那种专业的业务知识背景。

测试开发工作,本质就是为了保证测试能够正确且顺利进行而做的工作。测试开发要服务于业务测试,测试开发不是脱离业务而单独存在的。在软件系统生命周期过程中,业务测试工程师和测试开发工程师是并存的,并不会彼此替代。虚拟平台质量管理组也是由于工作需要,才逐渐地走上了转型这条路。那么,你为转型做好准备了吗

cbe907c008866e6f0211fb18bd821323

b3864560ba36207deace40230a9b7bf9

按二维码,可以关注我们哟

每天与你分享IT好文。

在“异步图书”后台回复“关注”,即可免费获得2000门在线视频课程

异步图书福利送不停

邀请10名好友关注10天直接获取异步图书一本(点击文字获取活动详情哦)

点击阅读原文,购买京东质量团队转型实践

阅读原文

文章知识点与官方知识档案匹配,可进一步学习相关知识云原生入门技能树首页概览8578 人正在系统学习中 相关资源:倒计时软件.exe_倒计时电脑软件-管理软件工具类资源-CSDN文库

来源:weixin_34090643

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2018年9月27日
下一篇 2018年9月27日

相关推荐