测试低下论或现代测试行业所遇到的问题
前几天看到一篇blog讨论现代测试行业中存在的一些问题,我愿称之为测试行业的劝学篇。有些观点还是非常中肯的,翻译了一下,希望对大家有所帮助,下面是正文。
在这篇博文中,我想强调我在测试行业看到的问题,以及我们都可以如何解决它。(你可能有不同的经历–所以让我们在评论中分享吧!)。这是我在2022年初在阿布扎比MoT会议上发表的演讲的文字版。
10年来行业发生了什么变化
在过去的十年里,我们见证了技术的大幅提升–无人驾驶汽车、人工智能、AR / VR、区块链、无人机和机器人。许多测试和测试自动化从桌面转移到网络和移动设备上。
从瀑布模型,许多企业走向了敏捷和Scrum。
从编写自动化测试的大型和昂贵的工具,我们已经转移到小型,灵活,最重要的是 - 免费的库和工具。现在我们有智能报告系统和Docker容器中的测试。现在在云端并行运行成千上万的测试用例并其实不那么昂贵。
但与此同时,许多事情和声明仍然没有改变。
以下是一些在测试人员中不断肆虐的无尽话题
“手工测试已死!” “让我们把一切都自动化吧! 通过UI–这才是最好的!”*。 “SDET是测试工程师进化的高峰! 我想成为像谷歌一样的人!” “我在开发领域找不到工作,所以我将做一年左右的测试,然后再尝试转行。” “测试人员的工资都在底部!” “测试工程是一份低技能专业人士的工作!”
但为什么行业中会出现这样的情况?问题会不会是别的原因呢?我看到了哪些问题?
现代测试的问题
我将把问题分为两个大组。
对技术的追求
- 寻找银弹。一些工程师为一个项目(和一个背景)创建了一个成功的框架,然后开始把它拉到所有其他的项目中作为一个 “完美的解决方案”。这不是可重用性,它只是将一把锤子怼所有的钉子和螺栓。
- 面向框架的自动化。在一些项目中,工程师们急于编写完美的框架,而忘记了测试本身。结果是,我们有3-6个月的开发时间没有测试!。但是对于客户来说,没有测试是自动化应用不充分的的直接指标。
- 专注于流水线通过的崇拜者。在这种情况下,已经成功地将测试纳入CICD管道的测试工程师开始迷恋于使测试一直保持绿色。这种痴迷往往导致忽略甚至删除不稳定的测试(这导致忽略了被忽略的测试背后的问题)。
- 简历驱动的开发。许多测试人员只考虑工作和项目,作为在简历中获得一个花哨的新行的方式。没有任何关于深化技能和用测试和自动化解决业务问题的内容。
- 只专注于短期目标。许多工程师只喜欢快速的解决方案。这种对自动化测试的态度是很普遍的。工程师们很快就写出了 “东西”,而没有考虑到可维护性,就跑去做新项目了。
技能和知识水平不足
知识的缺乏可以有多种形式。
技术知识
在面试中,资深候选人往往能迅速回答任何关于测试的问题。他们可以为你画一个 “测试金字塔或任何你想要的数字”,告诉你世界上所有的测试设计技术,并写出完美的测试报告。但是,当你问及基本技术方面的问题(如HTTP或网络如何工作),候选人很快就会失去信心。
你可以告诉我,不是每个项目都需要特定的知识。这倒是真的。但测试工程师应该知道(或至少知道)基本的技术知识。理想情况下,比谷歌搜索中的第一个链接更深入一点。
90%的现代系统以这种或那种方式与网络一起工作,发送消息或请求,并使用数据库或分布式存储。多层的抽象可以覆盖它–但总的来说–它的工作原理都是类似的。
编程和架构
一些测试工程师仍然认为,学习编程是复杂和不必要的。让程序员来写代码吧!
另一部分是那些已经学会了一点代码,但只集中精力于UI测试的人。这些测试之外的世界似乎并不存在。
在测试工程师中,关于系统结构和它们如何工作的知识是一种稀缺的技能。所有这些都被认为是有经验的 “大胡子 “架构师的工作,或者只有有十几年经验的高级开发人员才能做。
但是,如果不知道系统的内部和相互之间是如何工作的,就很容易错过很多关键的错误。另一方面,缺乏技术知识将使我们很难在测试报告中描述这些问题。
我并不是说,如果不了解系统的组成部分,就不可能指出系统糟糕的不可测试性。结果是,我们继续编写脆弱的XPath定位器,因为没有人给元素添加ID。
对业务和产品的了解
当然,这一切都取决于项目的情况。有一些项目,测试团队就像在工厂生产线上工作一样:开始构建,测试,然后传递给下一个环节(不问任何问题)。
测试工程师明显缺乏产品知识。很少有工程师与用户或客户支持一起工作。但是那些人可以提供关于应用中最危险的部分的有用信息,或者对可用性系统进行反馈。
甚至更少的测试和自动化工程师思考他们的工作如何影响业务。那些自动化测试是否为公司节省了资金?或者比人工测试更快地提供问题反馈?
工程师的个人发展
关于个人发展,有两个重要的工程师群体存在。
“我为什么要学习编程(任何其他技能)?那会使我成为一个不太熟练的测试工程师!” “据说我想学习,但我在等待一年后的反馈。我的经理或测试负责人会来告诉我需要学习什么。” 但这里有最关键的一点。只有你对个人的技能、知识和职业生涯的发展负责!你的经理只(或其他任何一个人)对你的工作负责。
你的经理(或互联网上的任何其他人)将无法为你创建一个技能地图。只有你知道自己的优势和劣势。只有你知道(或猜测)你在知识方面有哪些差距。只有你能了解如何获得这些知识并达到一个新的水平(并获得梦想的提升)。
你的上级只能调整你的计划并指出公司的资源投入情况:比如说参加会议或其他发展的预算。
不确定性的恶性循环
那么,一个普通的测试工程师日常的灵魂拷问是什么呢?
“我不会写代码–我不是一个开发者.” “我有什么资格和架构师讨论系统组件的架构或可测试性?” “DevOps团队已经关闭了流水线中不稳定的测试–好吧,他们更知道应该怎样做.” “经理一直问我:你到底在测试什么?为什么是那个?还有那个?” “企业只是想削减成本,干掉整个部门的不必要的测试人员….” “我怎么知道我们的用户有什么问题?”
结果,大多数测试工程师陷入了一个不确定的无限循环。
- 测试人员不能正确地向团队、其他工程师、管理层和企业证明他们的存在意义。在这种情况下,测试人员很难在团队内部建立信任和信心。
- 测试工程师的积极性越来越低。转向软件开发或管理的想法却随之增长。
- 许多有经验的高级工程师离开了测试行业。成功的测试人员的案例越来越少。测试工程师影响产品和流程并进行技术改进的案例–用手指都能数出来。会议上的成就和故事归结为 “嗯,我们得到了这个框架或这个测试管理的工具–现在一切都很美好”。缺少能够编写新库和工具的人。没有人去测试复杂且科学的软件。没有人做测试领域的研究。
- 业界继续认为,测试人员是 “只按按钮,几乎什么都不做 “的人。年轻的测试工程师也看到了同样的情况,因此他们的积极性和向上的动力更低。
如何改变这种状况
- 为你的职业发展准备一个计划。掌握什么技能,学习什么,以及如何在工作中使用这些技能。如果你能在公司获得知识和技能–那就很好! 如果不能–寻找另一个项目或公司。总有一个选择–它就在你的手中。
- 学习编程。我不是在谈论高级开发人员水平的技能。但是写脚本的能力可以从部署或配置中去除很多单调的工作。阅读和理解别人的代码,可以更好地了解系统的总体工作原理,以及哪些情况还没有被涉及到。
- 加深你对应用程序和系统架构的了解。从你现在正在测试的系统开始,分解它。拆解架构图。思考一个单独的组件如何和在哪里 “挂掉 “以及系统将如何反应。和架构师们聊一聊吧。
- 如果你正在编写脚本或自动化测试,总是问自己:谁将使用我的代码,他们如何使用我的代码(测试)?它写得够清楚吗?是否有详细的报告?一个新的工程师会有多容易理解这些代码?
- 了解用户如何使用你的被测系统。你的产品商业模式是什么?哪些是风险最大的部分?这些信息将帮助你测试对用户至关重要的部分,并为企业节省资金。