软件测试人员的挑战与机遇
本文转自【林子的空间】
“我们公司的测试好多都转业务或开发了,还有的转管理了,测试做不长久...”
“现在好多公司已经不招测试人员了,感觉测试没有什么前途...”
“ThoughtWorks技术雷达上都是开发相关的内容,测试相关的内容越来越少...”
软件测试总是被看做没有技术含量、没有前途的工作,很多做软件测试的朋友也比较迷茫,表示发展受限。在这个技术飞速发展的时代,各行各业都在实行数字化转型,各种高新技术似乎离测试人员越来越遥远...
那么,测试人员真的是前途渺茫吗?本文将根据ThoughtWorks最新发布的第20期技术雷达来分析当前流行的技术给软件测试人员带来的影响是什么,有哪些机遇与挑战。
技术雷达上的内容涵盖有技术、平台、工具和语言四个维度,我观察到其中跟测试人员关系比较紧密的主要有以下几个方面:
1. 支持快速、持续交付的基础设施与DevOps实践
质量和速度是最关键需求,为了适应各行各业对速度的要求,配套的支持快速、持续交付的基础设施与DevOps实践是成功之必备。技术雷达上与之相关的条目有很多,比如:Terraform生态系统和四个关键指标等。
- Terraform生态系统
Terraform是一种安全有效地构建、更改和版本化基础架构的工具,可以管理现有和流行的服务提供商以及定制的内部解决方案,正在迅速成为通过声明式定义来创建和管理云基础设施的首选工具。本期雷达Terraform相关的内容重点包括Terratest(用于测试基础设施代码),以及GoCD的新提供商(可以使用Terraform配置GoCD)。
基础设施不仅是Ops或者开发人员需要关注的领域,作为测试人员,同样需要加强这项知识的掌握:
- 了解了基础设施知识,结合已有的测试sense,测试人员可以和开发或Ops一起测试基础设施;
- 了解基础设施特点,可以指导测试的设计,在测试的时候更有针对性的关注比较脆弱的节点、环节,规避风险,增强系统的反脆弱性;
- 利用基础设施知识,可以指导测试环境的搭建和维护、自动化测试数据的准备和管理等。
- 四个关键指标
埃森哲发布的DevOps报告指出组织绩效跟软件交付性能关系紧密,而衡量组织绩效的四个关键指标分别是前置时间、部署频率、平均修复时间(MTTR)和变化失败率。本期技术雷达采纳了这项技术。
作为测试人员,我们需要了解每个指标的真正含义,并且思考我们测试策略是否需要做某些调整来提供对应的指标值。比如说为了提高部署频率,可能不需要那么高的E2E自动化测试覆盖率,而是达到覆盖效果和执行效率最佳平衡的一个状态即可。
2. 支持业务灵活扩展的微服务架构
引入微服务令我们受益匪浅,使用微服务,团队可以扩展那些独立部署和维护的服务的交付,从而方便业务的灵活扩展。微服务架构正在逐渐被越来越多的企业采用。我们看到技术雷达上应对微服务的相关条目有服务网格、混沌工程、API测试框架Karate等。
- 服务网格(Service Mesh)
服务网格是一种安全、快速、可靠的运行微服务生态系统的方式。这种方式为轻松地大规模采纳微服务奠定了基础。它提供了检测、保障、跟踪、监控和故障处理功能。它提供的这些跨功能能力无需共享API网关等资产或将很多依赖库纳入到每个服务中。
- 混沌工程(Chaos Engineering)
混沌工程是对系统进行试验的一门学科,旨在建立对系统抵抗生产环境中不确定条件的能力的信心。在去年,我们看到混沌工程从一个备受关注的 、想法,转变成公认的主流方法,来改善并保证分布式系统的弹性。主要用于以下几类故障时增强系统的弹性:基础设施故障、网络故障和应用程序失败,对应的工具有Gremlin和Chaos Toolkit等。
- Karate
Karate是一款API测试框架,其特色在于,直接使用Gherkin来编写测试,无需依赖常用编程语言来实现测试行为。Karate是一个领域特定语言,用来描述基于HTTP的API测试。虽然该方法很有趣,可以为简单的测试创建非常易读的规范,但用于匹配和验证负载的专用语言可能会变得语法晦涩、难以理解。从长远来看,使用此风格编写的复杂测试是否将可读且可维护,仍有待观察。
微服务带来灵活性的同时,也带来很多的复杂性和不确定因素,尤其是对质量保障带来了挑战,因此微服务系统的测试也备受关注。作为测试人员,只有了解了微服务架构与服务网格的特点及其对测试的影响、混沌工程对质量保障的帮助、API测试的框架选择与测试优化等,才能更好的做好微服务系统的测试。
3. 多样化数据形态的支持
图片来自网络随着数据源的增加、数据规模的扩大、数据种类越来越多,相应的数据形态也呈现出多样性,包括NoSQL、时间序列、像CockRoachDB和Spanner这样提供全局一致性的SQL存储,以及提供聚合日志文件查询功能的事件流。不再是关系型数据库解决一切存储的时代了,要考虑真实需求,采用合适的策略和工具。
数据形态的变化,必然对测试也提出不同的要求。作为测试人员,需要了解不同的数据规模、不同的存储形态、不同的数据类型分别该如何验证、测试该如何设计、测试数据该如何准备,还有数据安全、数据匿名化、数据分析等数据相关技术对测试的支持等。比如,对于大量数据处理的项目,测试人员需要了解数据处理的技术与处理逻辑,分别从功能层面验证处理逻辑的正确性,以及从非功能方面考虑大量数据处理的性能、数据处理的安全规约等。
4. 网络安全始终是重中之重
网络给我们生活带来便利性的同时,其安全性也是备受关注。2018年欧盟颁布了GDPR法令,使得众多企业不得不紧急调整系统功能做好个人身份信息的保护工作。网络安全始终是质量保障的重中之重,绝对不容忽视。本期技术雷达推荐的安全相关条目有密码即服务、容器安全扫描、密钥销毁技术等。
- 密码即服务(Secrets as a service)
在构建和运维软件的价值流中,密码凭据在多个场合都需要使用:构建流水线需要使用密码来与容器注册中心等安全基础设施进行交互,应用程序需要使用API密钥作为密码凭据来获得业务功能访问权限,而服务间通信则需要以证书和密钥作为密码凭据来保护其安全,这些密码凭据不建议通过源代码的方式管理,而是采用密码即服务的技术来存储和访问。利用这种技术,可以使用Vault或AWS Key Management Service(KMS)等工具来读写HTTPS端点上的密码凭据,同时实现精细的访问控制。
- 密钥销毁技术(Crypto shredding)
密钥销毁是指主动覆盖或删除用于保护敏感数据的加密密钥,以保护敏感数据不被读取。对于审计应用程序或区块链这样不应该或不能删除历史记录的系统来说,密钥销毁技术对于隐私保护和GDPR合规非常有用。
- 容器安全扫描(Container security scanning)
围绕Docker的容器革命显著减少了应用在跨环境迁移时的阻力,并推动持续交付和持续部署的采纳。但尤其是后者,对于传统的投产控制带来了相当大的漏洞。容器安全扫描技术是对该威胁载体的必要响应。构建流水线中的工具,会自动检查流水线中的容器是否存在已知漏洞。
作为测试人员,对于上面的安全相关技术可能不需要掌握的很深,但是需要了解有这样的一些技术,以及对应的使用场景。这样,才能对于系统整体的安全质量有更好的把握。此外,测试人员需要了解相应的安全测试技术,需要关注业务方面的安全需求,了解不同领域的安全规范和要求,从需求阶段做好威胁建模开始,跟团队一起在软件开发生命周期做到安全内建(Build Security in)。
5. 自动化测试与线上质量的关注
要快速交付,必然离不开自动化测试,而要做好自动化测试,更是离不开相应工具的支持。本期技术雷达上列出的Cypress、TestCafe和Puppeteer被誉为后Selenium时代的Web UI测试的三驾马车,值得关注。这三个工具不同于WebDriver时代的自动化测试工具,具有更加轻量级、更加稳定、速度更快的优点。
随着技术架构的演进和业务领域的发展,软件系统生态越来越复杂。过于重视预生产环境的测试,不仅不能很好的保证生产环境的质量,而且影响交付速度。因此,我们要把质量关注点拓宽到生产环境,做到测试右移。本期技术雷达列出的相关工具有:日志管理工具Humio,Honeycomb,以及前面提到的混沌工程相关条目等。
- Humio
在日志管理领域,Humio是一款相对较新的工具。该工具完全从零开始构建,通过基于定制设计的时序数据库的内置查询语言,在日志提取和查询方面性能非常快。从提取、可视化和报警提醒的角度来看,该工具能够与几乎所有工具相集成。
- Honeycomb
Honeycomb是一个可观测性工具,它从生产环境中提取出丰富的数据,并通过动态采样使其可管理。开发人员可以记录大量丰富的事件,并在之后决定如何划分和关联它们,这对于大型分布式系统的问题诊断很有帮助。
作为测试人员,自动化测试成为了必备技能,需要关注自动化测试工具的发展,了解新工具的特点与适应场景,更好的让自动化测试工作发挥最大的价值。另外,测试右移的思想也越来越被大家接受,需要测试人员更多的了解基础设施相关技术、线上监控技术等,跟Ops紧密的合作,做好QA in production。同时,利用生产环境的数据,为预生产环境的测试设计和数据准备等提供帮助,构建反脆弱的软件系统。
6. 新兴领域不容忽视
图片来自网络最火热的新兴领域当属AI,这也是未来的发展方向。本期技术雷达上列出的有机器学习和神经网络训练等内容,比如:机器学习持续交付模型、NLP的迁移学习和fastai等。
另一个热门新技术是区块链,技术雷达上区块链相关技术条目有智能合约、超越以太坊的EVM和企业版以太坊Quorum等。
技术雷达上还提到一个新的内容,那就是随着社会对科技的依赖程度日益增长,建议软件开发团队在制定决策时必须考虑道德问题,思考自己所构建的软件会在未来产生什么影响。相应的工具有技术塔罗牌和道德风险手册。
作为测试人员,这些都是大家可以关注并深入了解的方向。新兴领域必然会对测试有不同的要求,比如:关于AI的测试需要考虑两个方面,一个是对于AI产品的测试,另一个是把AI技术运用于测试中,比如自动化测试的智能化、生产环境数据的智能分析等。另外,对于区块链,需要考虑它对测试带来什么挑战、有什么样不同的测试方法来支持;对于道德风险的把控,我们软件测试人员又该注意些什么?能够提供哪些支持呢?
写在最后
前面列的这几项,除了自动化测试工具以外,其他的内容通常被认为跟测试人员没多大关系。其实,软件测试已经不再是那个简单的通过模拟用户行为点击去验证功能是否满足的时代了,测试人员的眼光要放更开阔一些,考虑更多的质量相关因素。对于前面总结的这些项目,我认为不是跟测试人员没有关系,而是给测试人员带来了新的挑战,提出了新的要求。同时,机遇跟挑战并存,这些挑战同样也给测试人员带来了很多新的发展机会。
那么,在众多机会面前,测试人员该如何把握呢?推荐大家可以根据T型能力模型去提升自己的能力。
图片来自网络T的横表示能力广度,T的竖表示能力深度。前面提到的方方面面都属于广度,包括不同技术和不同业务领域的扩展,而深度就是对于其中一个领域进行深入的学习研究,发展对应的测试技能。
广大的测试朋友们可以结合自己的兴趣特点,找到最适合自己的那个领域,深入发展。了解足够的相关知识,通过实践将知识转换为经验,然后总结归纳、不断锻炼,以获得利用经验解决问题的能力,拥有一技之长。
同时,要拓宽视野,了解更多领域的知识,做到广度和深度协调发展。