测试的艺术:技术如何从错误中学习
测试的艺术:技术如何从错误中学习
每次你打开银行应用、发送消息或点击网站上的“立即付款”时,你都相信有人在某个地方彻底测试了每一步。在大多数情况下,这种信任是合理的。在流畅的界面和顺滑的动画背后,是一个安静而有条理的过程——一个如此重要的过程,以至于没有它,数字世界将充满崩溃、安全漏洞和令人困惑的错误信息。这个过程就是测试。
但测试不仅仅是寻找错误。它是一种哲学、一门学科,而且——信不信由你——一种创造性行为。在技术领域,测试是我们了解什么有效、什么会崩溃以及如何构建人们可以信赖的东西的方式。让我们揭开帷幕,看看当你最喜欢的应用进行“最终检查”时,真正发生了什么。
隐藏检查的世界
想象一下你正在构建一个在线商店。一位顾客点击“购买”。需要发生很多事情:
- 服务器必须确保他们已登录。
- 它会检查商品是否有库存。
- 它从库存中减去数量。
- 它计算税费和运费。
- 它从信用卡扣款。
- 它发送确认邮件。
这些步骤中的每一步都可能以多种方式失败。如果库存数据库暂时不可用怎么办?如果信用卡公司说“拒绝”怎么办?如果邮件服务器宕机怎么办?在一个测试不佳的系统中,任何一个失败都可能导致整个订单崩溃——或者更糟,向客户收取两次费用而不发送收据。
测试是在真实用户接触之前,故意以可控的方式尝试破坏每个部分的做法。这就像消防演习:你希望永远不需要它,但当出现问题时会很高兴它的存在。
根据文章,软件开发中测试的主要目的是什么?
测试的多种风味
软件测试分为多个层次,每个层次有不同的侧重点。以下是一些你可能遇到的常见类型——即使你从不编写一行代码。
什么是单元测试?
1. 单元测试
单元测试就像对一段代码进行单一检查——比如确保“添加到购物车”按钮确实将商品数量增加一。开发人员在编码时编写这些测试,并且每天运行数百次。如果单元测试失败,开发人员就可以准确知道问题所在。
2. 集成测试
单个部分正常工作后,你需要查看它们是否能协同工作。集成测试可能会检查点击“购买”是否能够正确调用支付服务、库存数据库和邮件系统——按正确的顺序,使用正确的数据。这是许多隐藏错误存在的地方:两个单独工作完美的系统在尝试相互通信时可能会崩溃。
3. 端到端测试
这是最接近真实用户体验的模拟。一个机器人浏览器或测试脚本会完成一个完整的场景:登录、搜索产品、添加到购物车、输入送货详细信息并完成购买。如果测试通过,你就可以相当确信人类用户将获得顺畅的体验。
4. 手动测试
自动化测试非常适合反复检查相同的事情,但它们无法复制人类的直觉。手动测试员是真实的人,会探索应用、点击各处、尝试奇怪的输入,并注意诸如“这个按钮很难找”或“在移动屏幕上字体太小”之类的问题。探索性测试常常能发现自动化脚本不会想到要寻找的问题。
为什么安全测试至关重要?
5. 性能和安全测试
当同时有10,000人使用时,应用会变慢吗?黑客能欺骗登录屏幕吗?这些是专门测试人员的问题,他们试图使系统过载或找到入侵方式。安全测试尤其重要:一个漏洞就可能暴露数百万用户的私人数据。
为什么测试很重要(比你想象的更重要)
你可能会想:“如果测试花费这么多时间和精力,为什么不直接发布产品然后修复错误呢?”这种方法——通常被称为“快速行动,打破常规”——对于小型副项目可能有效。但对于任何人们依赖的东西,失败的代价是巨大的。
- 经济损失:在假日促销期间崩溃的电商网站可能损失数百万收入。
- 信任丧失:即使只显示一分钟错误余额的银行应用也能摧毁客户信心。
- 安全风险:在医疗设备、自动驾驶汽车或空中交通管制软件中,错误不仅仅是麻烦;它可能威胁生命。
考虑著名的阿丽亚娜5号火箭案例,它在1996年发射后40秒爆炸,原因是惯性导航系统中的软件错误。错误是由一个简单的溢出问题引起的——数字太大,变量无法容纳。如果在新的火箭环境中对重用的软件进行适当测试,本可以抓住这个错误。那次失败的代价超过3.7亿美元。
因此,测试是对可靠性的投资。它是“基本能用”的产品与你可以信赖其金钱、健康或安全的产品之间的区别。
根据本节内容,测试失败的主要好处是什么?
测试也是学习的过程
除了捕捉错误,测试还教会我们我们的创造在真实世界中的表现。当你运行一个测试并通过时,你获得了信心。当它失败时,你获得了信息。每一次失败的测试都是一个免费的教训——一个了解你未曾考虑过的边界情况的机会。
优秀的测试人员具有好奇的心态。他们会问:“如果用户在电话号码字段输入表情符号怎么办?如果支付后立即断开网络怎么办?如果有人打开两个浏览器并试图同时购买最后一件商品怎么办?”通过系统地探索这些可能性,测试人员帮助开发人员构建更健壮的系统。
什么是'左移'测试的概念?
测试中的人性面
测试不仅仅是技术活动——也是一种文化。在最好的软件团队中,测试是每个人的责任。开发人员编写测试。设计人员审查测试结果。产品经理优先处理错误修复。甚至客户支持团队也通过报告用户遇到的情况来做出贡献。