几十年来,测试软件是人们做的最后一件事。开发人员构建了它,完成后,他们将结果扔给了测试团队,测试团队试图在发布前找出问题。这是一个有开始和结束的阶段,安排在时间表的最后,通常是在最后期限紧迫时第一个被压缩的阶段。
这种模式已经死了,而且死的原因很简单:它在软件持续交付的世界中不起作用。当您每年启动一次时,您可以有两个月的测试阶段。当你每周启动几次时,它就不起作用了。测试周期需要自我重塑,而这种重塑是最近软件工程中最重要的转变之一。
本文通过真实案例和具体情况探讨了测试周期的趋势,这些具体情况显示了早期持续测试的人和仍然为后期测试付出代价的人之间的差异。这里的观众是那些已经了解测试并希望了解实践进展的人。
中心趋势:测试不再是一个阶段
根本性的变化是观念上的。测试不再是过程中的一个阶段,而是一个持续的活动,从开发的开始到结束都存在。您不再“构建后”进行测试,而是在构建时进行测试。
这个想法在一些传统中被称为“将测试向左移动”,即在周期的早期,但这个概念比行话更重要。越早发现问题,解决问题的成本就越低。当开发人员对代码还记忆犹新时发现错误需要花费几分钟的时间。几周后在生产中发现的相同错误会导致调查、紧急修复、返工,有时甚至会失去客户信任。
因此,现代测试周期不再是最后一个测试步骤的直线,而是一个不断进行验证、分层、一直到生产的流程。
真实案例:最后才测试的团队
考虑尚未实现周期现代化的组织中的常见场景。一个团队需要花费数周的时间来开发,积累功能而无需持续验证。在最后阶段,他把一切都交出来进行测试。质量团队在最后期限的压力下遇到了大量问题,其中一些是结构性的,当时很难纠正。
接下来发生的事情是可以预见的,而且代价高昂。要么发布被推迟,让每个人都感到沮丧,要么是已知的错误被推迟,产生债务和返工。由于这些问题是在远离问题根源的地方发现的,因此找出每个问题的原因就变成了对几周前代码的考古挖掘。
这种模式在无数公共和私营部门的项目中重复出现:系统超出计划和预算运行并不是因为缺乏技术能力,而是因为质量被留到了最后,而此时修复已经很昂贵了。延迟测试并不能节省时间,而是将成本转移到最糟糕的时间。
真实案例:每次更改都进行测试的跑步机
在另一个极端,考虑一个采用[自动化测试0持续集成的团队。每次有人更改代码时,自动传送带都会在接受更改之前运行一系列检查。如果出现问题,作者会在几分钟内知道,而上下文仍然存在。
其文化影响是深远的。对弄乱代码的恐惧减少了,因为安全网始终处于开启状态。交付变得更小、更频繁,因为每一次交付都会立即得到验证。而且,逃逸到生产中的问题急剧减少,因为大多数问题都在途中被阻止了。跑步机并不能取代人类的判断,但它消除了疲惫的人类会错过的那种重复性错误。
支持这种情况的趋势是以自动化作为测试周期的基础。当每天有很多更改时,您无法手动测试每个更改。对于大公司来说,自动化并不是奢侈品。这使得在不破坏一切的情况下快速交付成为可能。
测试周期中的AI趋势
最近,人工智能已经进入测试周期,对此需要清醒地看待。人工智能已经帮助从代码生成测试用例,识别覆盖较差的区域,并在运行所有内容都太慢时优先运行哪些测试。
这些都是真实的收获,但它们并不是魔法。从代码生成测试的人工智能面临着测试代码做什么而不是应该做什么的风险,而这种区别正是测试的核心。自动生成的测试可能会给人一种错误的覆盖感,以严格的外观验证错误行为。人工智能加速了测试的机械工作;它并不能取代思考什么是重要的检查。
成熟的方法是在深思熟虑的周期内使用人工智能作为加速器,而不是作为停止考虑质量的借口。该工具增强了那些已经知道如何测试的人的能力;它不会创造这种能力。
批判性反思:自动化并不等同于质量
随着团队的成熟,存在着一种危险的混乱:认为[自动化测试覆盖率1]就是质量的同义词。它不是。您可以通过测试错误的事物、验证琐碎的细节来获得高覆盖率,同时关键流程无需真正检查即可通过。
质量不是覆盖率数字;而是覆盖率。这是对软件在重要情况下完成其应做的事情的合理信心。对关键路径进行一些深思熟虑的测试比数百个只是为了夸大指标而存在的肤浅测试更有价值。当团队开始追逐百分比而不是风险时,该指标就变得戏剧化了。
还有文化挑战,这是最困难的。测试周期的现代化不仅仅是购买工具,而是改变人们的工作方式。它要求开发人员将质量视为自己的责任,而不是另一个团队的问题。它需要领导层在期限紧迫的情况下争取时间以保证质量,而不是首先牺牲时间。测试技术是比较容易的部分;说服组织将质量视为不容谈判的事情才是真正的工作。
还剩下什么
测试周期在最后不再是一个阶段,而是成为整个开发过程中的一个连续流程。那些尽早了解这项测试的人,可以将重复性工作自动化,并在问题还很便宜的时候发现问题。那些不理解的人继续付出一个又一个项目的代价,即迟发现本来可以早看到的东西的代价。
这些趋势,提前测试,以自动化为基础,清醒地使用人工智能,都指向同一个方向:质量是一路建立的,而不是最后检查的。需要提醒的是,没有任何工具可以取代人类对于真正需要检查的内容的决策。
如果您的组织仍然将测试视为截止日期前的最后一步,那么在下一个项目到来之前可能值得重新考虑周期。博客上还有其他有关质量、自动化和软件工程的文本,可以更深入地研究这些案例。
另请阅读
- [软件测试周期:趋势和领导者快速指南2
- [自动化测试:为什么未经测试的代码是债务3
- [数字质量保证:重要工具快速指南4
- [软件性能:关于质量的真实案例教学5
- [手动软件测试:在不成为瓶颈的情况下进行扩展的路线图6
- [软件测试周期:趋势与清单7
