实现快速可靠的自动化测试
在软件开发过程中,开发和质量保证(QA)团队日常使用类生产环境,并且对于每个被接受的特性,都能成功地将代码集成并运行在类生产环境中,所有更改也会纳入版本控制。然而,如果仅在所有开发完成后,由单独的QA部门在一个独立的测试阶段来发现和修复错误,很可能会得到不理想的结果。而且,如果一年只进行几次测试,开发者在引入导致错误的更改数月后才会得知自己的错误。到那时,因果关系可能已经模糊,解决问题就像“灭火”和“考古”一样困难,更糟糕的是,从错误中学习并将其融入未来工作的能力会显著降低。
持续学习:更好的可观测性并不意味着减少测试
随着分布式系统变得普遍,许多组织都在其生产系统的更好可观测性方面进行了正确的投资。这导致一些人认为,更好的可观测性意味着在部署软件之前无需过多关注验证。这是一种误解,即使有出色的监控工具和技术,生产中的事故仍然代价高昂且难以调试。分布式系统非常复杂,因此在部署之前对单个服务的正确性进行测试就显得更加重要。
自动化测试还解决了另一个重大且令人不安的问题。Gary Gruver指出:“如果没有自动化测试,我们编写的代码越多,测试代码所需的时间和金钱就越多,在大多数情况下,这对任何技术组织来说都是一种完全不可扩展的商业模式。”
Google Web Server的故事(2005年)
如今,Google无疑体现了一种重视大规模自动化测试的文化,但并非一直如此。2005年,当Mike Bland加入该组织时,部署到Google.com常常极其困难,尤其是对于Google Web Server(GWS)团队来说。
GWS团队在2005年左右陷入了困境,很难对处理Google主页和许多其他