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/35 on 2023-09-06 at 19:31