Thinking in TDD

作者: Siwei_LU | 来源:发表于2019-12-15 23:47 被阅读0次

来 ThoughtWorks 之前,我是个很自信的人。

我在一家初创公司过着朝九晚五的生活,薪水体面,很少加班。那家公司的开发人员很少,完全没有自动化流程,像是刀耕火种的原始作坊。每当新版本发布,所有人都忙于测试、集成、部署、上线的流程。

我一度以为软件开发就是这样,觉得自己可以静待公司上市、股票套现、财务自由、人生巅峰。直到我偶然看到一个名词 —— TDD。

网上不乏吹嘘 TDD 的文章。但对我而言,其价值在于启发了我对软件开发工程化的思考。无知如何求知?

我是带着问题来的。但当我真正接触到 TDD 的时候,又觉得它有些不可理喻。

按照 TDD 的理论,假设我们想写一个类,那我们应该先写测试用例。显然,在没有任何功能代码的情况下,第一个测试用例只能测构造函数能不能生成我们期望的实例。

但这毫无意义。只要按照语法标准定义,按照函数声明传参,不可能生成不了我们期望的实例。这个测试用例的唯一作用,就是在重构的时候,让我们多改一处代码。

想像一下如果每个类我们都写这样的测试会怎么样。

随着我对 TDD 的了解愈深,我对测试粒度的不解也愈深。什么时候我们应该写测试,什么时候应该测试先行,要如何把握测试与开发的平衡

StackOverflow 上有个关于测试粒度的讨论(How deep are your unit tests?),最高赞的回答是

老板为我的代码而不是测试付报酬。所以,我对此的价值观是 —— 测试越少越好,少到你对你的代码质量达到了某种自信(我觉得这种的自信标准应该要高于业内的标准。当然,这种自信也可能是种自大)。如果我的编码生涯中不会犯这种典型的错误(如:在构造函数中设了个错误的值),那我就不会测试它。我倾向于去对那些有意义的错误做测试,所以,我对一些比较复杂的条件逻辑会异常的小心。当在一个团队中,我会非常小心地测试那些会让团队容易出错的代码。

意外的是,这个回答是由 TDD 的创造者之一 Kent Beck 给出的。这个回答似乎一定程度上解答了我的困惑。但当我跟同事交流时,他给出的答案却是

你不知道团队里的人会不会犯那些你以为不会犯的错误,你也不知道后续维护代码的人水平如何,所以覆盖率还是越高越好。

社区的讨论从未结束,这个问题不会有答案,我的思考也远未停止。

相关文章

  • Thinking in TDD

    来 ThoughtWorks 之前,我是个很自信的人。 我在一家初创公司过着朝九晚五的生活,薪水体面,很少加班。那...

  • 深度解读 - TDD(测试驱动开发)

    本文结构: 什么是 TDD 为什么要 TDD 怎么 TDD FAQ 学习路径 延伸阅读 什么是 TDD TDD 有...

  • TDD和BDD

    TDD(Test-Driven Development)——测试驱动开发 1.为什么使用TDD: 1)TDD根据客...

  • 初识TDD

    什么是TDD 本文所说的 TDD 指狭义上的 TDD,也就是「单元测试驱动开发」。 TDD 是敏捷开发中的一项核心...

  • 为什么TDD很难在项目上推动?

    经常在TDD训练营中有学员提这个问题:学了TDD,在项目上也没法落地,为什么TDD很难在项目上推动? TDD本身就...

  • 轻松TDD之旅

    TDD简介 TDD是什么 TDD一般是Test Driven Development(测试驱动开发)的缩写,它以测...

  • 认识 TDD

    什么是TDD? TDD 有广义和狭义之分,常说的是狭义的 TDD,也就是 UTDD(Unit Test Drive...

  • 测试驱动开发(TDD)总结——原理篇

    标签 | TDD Java 测试驱动开发(TDD)总结——原理篇

  • Robolectric

    开始单元测试之前还是要先了解TDD 中文版:TDD 已死?让我们再聊聊 TDD 英文版:Introduction ...

  • 理解TDD

    什么是TDD? 简单的说,TDD = 测试先行(TFD, Test First Development) + 重构...

网友评论

    本文标题:Thinking in TDD

    本文链接:https://www.haomeiwen.com/subject/quxrnctx.html