TDD 伤害了软件架构吗?

TDD (Test-driven development)

简评:个人认同 Uncle Bob 能损害软件架构的只能是开发者的说法,但也认为对于绝大多数开发者而言,更多的测试其实意味着更多的 bug。

TDD (Test-driven development) 即测试驱动开发,要求开发者在编写某个功能的代码之前先编写测试代码,然后只编写使测试通过的功能代码,通过测试来推动整个开发的进行。这有助于编写简洁可用和高质量的代码,并加速开发过程。

但对于 TDD 的争论一直没有停止,而最近在 twitter 上关于 TDD 是否有损软件架构的争论再起。这里著名的 Robert C. Martin (Uncle Bob Martin) 写了一篇博文发表自己的观点,也推荐大家看看 Rails 之父 DHH 相反观点的一篇文章,然后自己加以判断。

对于 TDD 一个常见的观点就是「当你有了越来越多的测试时,也就意味着越来越难以改动业务代码。因为改动会造成很多的测试失败而需要修正,所以测试会让业务代码变得死板,难以改动」。

对此 Uncle Bob 展示了一幅图:


对于哪一边更好相信不用多说,右边的设计明显更加合理。

右半边的图用到了经典的 OCP (Open-Closed Principle) 和 DIP (Dependency Inversion Principle) 原则。与用户直接联系的是 API,而服务端负责实现 API,因此用户基本不会直接察觉到服务端的变动。

文中,Uncle Bob 提示大家将上图中的 USER 替换成 TEST 再思考。测试和业务代码一样也需要好好设计,而大多数人只是简单的写出一一对应的测试代码,那当然会难以改动,产生各种各样的问题。Uncle Bob 认为设计模式等改善代码结构的原则同样可以用于测试代码中,并且应该将测试代码和业务代码放在同样重要的地位。

就结论来说,Uncle Bob 认为 TDD 本身并不会伤害软件架构,是开发者不会用。也就是如果你不能好好组织设计你的测试代码,意味着你写的业务代码也好不到哪儿去。是你自己而不是 TDD 损害了你的软件结构。

扩展阅读:

欢迎关注

  • 知乎专栏「极光日报」,每天为 Makers 导读三篇优质英文文章。
  • 网易云电台「极光日报**」,上下班路上为你读报。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,118评论 25 709
  • 文章来自:http://blog.csdn.net/mj813/article/details/52451355 ...
    好大一只鹏阅读 9,226评论 2 126
  • 1.测试与软件模型 软件开发生命周期模型指的是软件开发全过程、活动和任务的结构性框架。软件项目的开发包括:需求、设...
    Mr希灵阅读 22,050评论 7 278
  • 来河内有一周的时间了,终于结束了这边的工作,今天早上起床又见到了阳光,终于结束了这几天阴天下雨的天气。 下楼吃完早...
    快速生长阅读 260评论 0 2
  • 先说超级记忆力训练法,有方法有训练内容,值得一读,可我恰恰属于书尾说的,一怕麻烦二怕费时间,当然,最主要的,自己还...
    胜似春阅读 183评论 0 0