理论上,几乎每个团队都同意自动化测试很重要。实际上,几乎每个团队都会找到借口将他们搁置一边。 “我们现在没有时间。” “这个项目很简单。” “我们手动测试。”这些短语以令人印象深刻的规律性出现在一切开始崩溃的时刻之前。
自动化测试是言语与实践之间距离巨大的学科之一。这种距离是有成本的,不是一次全部支付,而是在产品的整个生命周期中分期付款。
本文讲述了为什么测试不再是可选的,以及当团队认真对待它们时,真正会发生什么变化。这不是教程。这是一个论证,是一个已经看到了双方有测试和没有测试会发生什么的人的论证。
什么是自动化测试?
自动化测试是自动检查您的软件是否执行其预期功能的程序。测试套件无需人点击并手动检查每个更改,而是在几秒钟内执行此检查,并根据需要多次执行此检查。
但将测试简化为“检查其是否有效”却没有抓住重点。自动化测试首先是一个安全网。它们捕获有关系统应如何行为的知识,并在更改破坏该行为时发出警报。
这个网络彻底改变了团队与代码本身的关系。没有它,每一次改变都是一场赌博。有了它,每一个变化都是一个可验证的假设。
为什么这变得不可协商
软件一直在增长和变化。添加了功能,修复了错误,重新组织了代码。这些变化中的每一个都有可能破坏以前有效的东西。
在小型系统中,您可以手动测试所有内容。在逐月增长的真实系统中,这是不可能的。没有人可以点击每次更改的所有流程。尝试的结果是疲劳、缓慢和无论如何都会逃脱的错误。
自动化测试是解决这一规模问题的答案。它们允许软件在验证不成为人类瓶颈的情况下成长。这就是为什么它们不再是成熟团队的改进,而是成为构建持久事物的基本条件。
论文:测试是关于勇气,而不是错误
这是我的立场,它可能会让你感到惊讶。自动化测试的最大价值是不发现错误。它给了改变代码的勇气。
想想没有测试的团队。系统敏感部分的每一次变化都伴随着恐惧。 “这会破坏其他东西吗?”这种恐惧使人瘫痪。它导致团队避免改进,让糟糕的代码保持原样,而不是出于纯粹的恐惧而改变有效的代码。产品因正当的怯懦而腐烂。
现在想想测试良好的团队。同样的改变也伴随着信心。如果出现问题,测试会立即让您知道。团队可以毫无畏惧地重构、改进、发展。这种自由是测试的真正礼物。他们不仅保护现有的东西,还让团队能够自由地构建未来的东西。
测试类型以及何时使用每种测试
并非每个测试都是相同的,了解差异可以防止浪费精力。
单元测试检查小的、孤立的代码片段。它们快速、便宜,应该成为基础。他们捕获特定错误并提供几乎即时的反馈。
集成测试检查不同部分是否可以很好地协同工作。他们速度较慢,但他们发现了团结者看不到的问题,即存在于连接处的故障。
端到端测试从头到尾模拟真实世界的使用情况。它们是最慢、最脆弱的,但是最接近用户体验。在最关键的流程中应谨慎使用它们。
智慧在于平衡:在底部进行大量快速测试,在顶部进行少量慢速测试。颠倒这个比例是一个典型的错误,它会产生缓慢且不稳定的套件,而团队学会了忽略这些套件。
一个适用的例子
想象一个计算公共项目社会福利的系统。这些规则很复杂,并且会根据立法而变化。计算错误可能意味着公民收到的金额或多或少是错误的。
如果没有测试,每一次规则的改变都是巨大的风险。没有人确信改变一项规则不会破坏另一项规则。团队被恐惧所绑架,错误最终波及到了公民。
通过涵盖计算规则的自动化测试,可以在几秒钟内根据数十个已知场景检查每个更改。如果更改破坏了案例,团队会在发布之前知道。可靠性不再取决于某人的记忆,而是由系统保证。在影响人们生活的事情上,这种差异不是技术上的,而是道德上的。
使努力无效的陷阱
第一个陷阱是通过数字而不是价值进行测试。以覆盖率为目标的团队最终会编写无用的测试来夸大指标。不良测试的高覆盖率是虚假的安全性。
第二个是缓慢且不稳定的套件。当测试花费太长时间或随机失败时,团队就会失去对它们的信任并开始忽略它们。跳过测试并不能保护任何人。套件本身的维护是持续进行的工作。
第三是将测试视为一项单独的任务,稍后完成。当测试成为开发的一部分时,测试效果最好,而不是当它们成为一个总是留到最后并且永远不会发生的附加步骤时。
未经测试的代码是债务累加利息
最终,选择不是测试或不测试。介于现在支付和以后支付(含利息)之间。未经测试的代码是一种技术债务,它会默默地增长,直到在最糟糕的时间收到发票为止。
投资于测试的团队不是更慢,而是更勇敢。他们的行动充满信心,就像有安全网保护的人一样。这种信任,乘以数月甚至数年的开发,就是进化产品与生锈产品的区别。
测试并不是不信任您的代码。这是尊重那些维护未来的人的未来,包括你自己。
如果您的团队交付的软件害怕改变现有的软件,那么问题可能不是缺乏人才,而是缺乏网络。值得一谈。我还有其他关于软件质量、最佳实践和工程的博客文章,深入探讨了如何建立这种信任。
另请阅读
- [软件测试周期:趋势和领导者快速指南0
- [自动化测试架构:需要速度的团队的快速指南1
- [自动化测试架构:从头开始搭建的基本步骤2
- 【软件测试周期:早测试者(和晚测试者)的趋势和真实案例3
- [非功能测试:除了功能之外,还定义系统是否良好4
- [软件性能:开始优化的基本步骤5