关于测试的几句话 – 作者:Thorsten Ball

首先,我的凭据。 我一生中编写的所有代码中有一半以上是测试代码。 我的名字附在 数百页面 的TDD。 在我作为软件开发人员的第一次实习中,我在第一周结对编程时编写了测试并进行了 TDD。 我编写过单元测试、集成测试、探索测试、阻止问题再次出现的测试、留言测试、使用测试框架和 BDD 的测试以及根本没有框架的测试,使用 Ruby、JavaScript、C、Go、Rust 进行测试,计划,重击。 喝了两杯之后,我愿意说我比许多人更了解测试。 现在——不喝酒——我愿意说我喜欢测试,并且编写测试给我带来了很多快乐。

但我不能再说我没有怀疑了。 坚持主题:今天我对测试比十年前更加清醒。 最近几个月来,质疑声越来越大。

太多不稳定的测试。 在做了一个我知道是正确的但测试没有的微小更改后,花费了太多时间让测试通过。 太多的集成测试让人们等待 20、30、40 分钟才能合并他们的更改,几个月后才发现他们从未测试过任何东西。 我已经修复了太多次错误并且 知道 它被修复了,因为我手动彻底测试了它,并且 100% 确信我知道代码是如何工作的,并且这种情况不会再次发生,但随后花了几个小时——比我修复错误所花费的时间长 10 倍——编写测试只是为了证明我一直以来所知道的,即错误已修复。

这并不是说我曾经是测试的大写信徒。 我从来不相信测试覆盖率作为一种衡量标准,也从来没有真正关心有人是先写测试还是最后写测试(尽管我认为很少有人认真尝试过 TDD),我认为大多数关于功能测试、集成测试和 Whathaveyou 测试的讨论都是这是一个很大的误解,那些说永远不应该在测试中访问数据库的人应该说实话,而且可能还没有编写足够的测试。

尽管如此,我始终认为测试是好的,而未经测试的代码是坏的。 每当我合并一些没有经过测试的东西时,我都会感到内疚,即使在内心深处我知道测试可能不值得。 我认为测试是质量的标志,测试得越好,产品的质量就越高。

进入 幽灵般的泽德

两者都是我使用过和破解过的最高质量的软件。

两者的测试都比我预期的要少。

当然,两者都有测试。 Ghostty对其核心进行了广泛的测试:终端状态、字体渲染、转义和控制序列的解析器等等。 Zed 还对其基础数据结构(绳索、SumTree、编辑器等)进行了大量测试,并对大功能进行了测试,并且 非常智能、非常酷的异步代码属性测试

但这两个代码库都没有测试,例如需要很长时间才能运行的测试。 没有通过点击 UI 和屏幕截图进行比较并命中网络的测试。 Zed 的完整测试套件需要 136 秒才能在 CI 中运行 1052 个测试。 Ghostty 需要 38 秒,包括编译。 很多测试,但比我想象的要少。

在这两个代码库中,我在没有任何测试的情况下合并了 PR,并且经常看到其他人这样做。 世界并没有终结,没有人流下任何眼泪,这些产品仍然是我用过的最好的产品,代码库包含一些我读过的最优雅的代码。

所以现在我写这篇文章,感觉就像是在坦白说我开始认为软件质量和测试之间可能没有相关性。 也许测试只是一个症状。 导致质量的其他因素的症状。

也许关于测试的最明智的事情曾经说过,也许关于测试你需要知道的唯一一件事 – 忘记测试金字塔,模拟与存根的争论,依赖注入器,以及覆盖率数字 – 是肯特贝克说 16 年前在 Stack Exchange 上的一个回答

我获得报酬的是有效的代码,而不是测试,所以我的理念是尽可能少地进行测试以达到给定的置信水平 […]。 如果我通常不会犯某种错误(例如在构造函数中设置错误的变量),我不会对其进行测试。

也许这就是你所需要的。 那和那些在乎的人。

Leave a Reply

Your email address will not be published. Required fields are marked *

近期新闻​

编辑精选​