Automated Tests Are the Safety Net that Saves You

The following text is a partial translation of the original English article, performed by ChatGPT (gpt-3.5-turbo) and this Jekyll plugin:

自动化测试通常被称为单元测试或集成测试,或者只是任何自动执行的测试。这就是它们与手动测试的区别。自动化测试的目的是什么?首先,它们减少了例行工作的数量:我们不需要记住如何测试一个模块,测试会记住。我们只需点击一个按钮,一套可能由数百个或数千个测试组成的测试运行,并报告错误(如果有)。节省时间很重要,但这不是唯一的,如果你问我,也不是最重要的自动化测试目的。更重要的是它们作为一个安全网的作用。

你知道什么是安全网吗?维基百科它是“一种保护人们从高处摔下后受伤的网”。你很可能在正在建造或重建的建筑物上看到它。图片中的红色部分就是安全网。

如果建筑工人意外摔倒或掉落工具,他们不会死亡,也不会伤害到地面上的任何人。这种知识是否有助于他们更有效地工作?我相信是的。我没有找到任何研究比较那些知道有一个安全网在他们下面工作的工人的生产力与那些知道一个错误很可能会让他们失去生命或让孩子在地面上玩耍的工人的生产力。不过,这样的研究结果是显而易见的,我相信。

对于我们程序员来说,修改源代码并且知道没有自动化测试是类似于在没有安全网的高处工作:一个错误可能会导致服务器停机、一个沮丧的客户、损失的金钱,甚至可能失去工作。以这种方式工作的程序员的生产力会有多高?我们需要做研究来找出答案吗?还是答案像对建筑工人那样显而易见?

为了给你足够的信心,自动化测试不仅必须被编写并提交到代码库中,而且必须在你尝试对主干进行的每一次更改之前自动执行。在增量开发代码时,你必须能够在每次本地更改后运行它们。然后,你必须知道,即使你在本地意外忘记运行它们并将你的分支发送到主干进行合并,自动化合并流水线也会抓住你。

你投入到使你的安全网更强大(即你的测试更好地覆盖你的代码)的时间和精力越多,你的工作就会越有生产力,你在引入新功能或修复错误时就会感到越安全。简单地说,你将能够更快、更好地编写代码。只因为你知道你不会破坏昨天的工作。

当你的客户向你报告一个错误时,这意味着安全网有一个漏洞。它不够紧密,这就是为什么错误会落到你客户头上的原因。在修复错误之前,你会做什么?你修复安全网。你添加更多的自动化测试,以便将来可以捕捉到这个错误。然后,你再修复错误。

我相信软件项目的安全网是其最有价值的资产。

Translated by ChatGPT gpt-3.5-turbo/42 on 2023-11-17 at 17:16

sixnines availability badge   GitHub stars