实现TDD测试驱动开发

发布于:2022-11-28 ⋅ 阅读:(797) ⋅ 点赞:(0)

在这里插入图片描述

为什么要用 TDD?

TDD 可以让软件开发更快更好。
随着时间的推移,采用 TDD 方式开发新功能会越来越快,修改现有代码的成本可控。相反,传统开发模式开发新功能会越来越慢,修改代码的成本会指数增长,项目会失控。


为什么呢?在《重构》中,大师马丁·福勒(Martin Fowler)提出了设计耐久性假说,好的设计会提高编程速度。

在这里插入图片描述
我把这种现象称为“设计耐久性假说”:通过投入精力改善内部设计,我们增加了软件的耐久性,从而可以更长时间地保持开发的快速。我还无法科学地证明这个理论,所以我说它是一个“假说”。但我的经验,以及我在职业生涯中认识的上百名优秀程序员的经验,都支持这个假说。

马丁·福勒(Martin Fowler). 重构:改善既有代码的设计(第2版)(异步图书)【世界软件开发大师MartinFowler的不朽经典!生动阐述重构原理和具体做法!普通程序员进阶到编程高手的修炼秘笈和代码整洁之道 !】 (Chinese Edition) (p. 161). Kindle 版本.

  • 什么是好的设计?
    • 高内聚,低耦合。可维护,可扩展,可测试。
  • 什么是差的代码?

    缺少测试的代码就是很差的代码。不管它编写得有多好;也不管它的面向对象以及封装做得有多好。—《修改代码的艺术》

采用 TDD 方式开发的系统,因为天生就有良好的可测试性,自然就带来了良好的设计,高内聚,低耦合。所以,使用 TDD 进行开发,会有更快的开发速度,更好的交付质量,多快好省。

为什么不用 TDD?

这篇 文章 介绍了大家不喜欢 TDD 的真正原因:“太难了,我不会”。

You don’t like TDD because is hard.

当然,在不同的场景下,项目追求的目标也不同。
在项目初期,产品功能相对较少,代码量不大,开发团队规模也不大。采用 TDD 需要更多的时间和精力。直接开发相对更快,能更早地看到结果。就像造个自行车,当造好轮子后就可以拉出来遛遛,修改一下轮子,可以快速低成本的跑起来测试。

随着项目的迭代,产品复杂度增加,团队规模扩大,如果没有 TDD,就会遇到开发效率降低,维护成本增高的情况。比如造飞机,如果换个轮子就需要把整个飞机开动起来测试一下,效率太低,开发速度慢如蜗牛,成本高得无法承受。

怎样实现 TDD ?

当你遇到开发效率降低,系统难扩展,难维护时,恭喜你,说明你的系统代码量达到了一定规模,复杂度超越了 90% 的项目,是时候进行重构了。

在这个知识基本免费的时代,想要学习 TDD 有各种各样的途径,阅读图书,学习付费专栏,看视频听讲座,浏览博客等等,都可以获取知识。有了理论之后,还需要与实践结合,通过不断迭代,实现 TDD。

面对现有的遗留系统,学习《修改代码的艺术》、《重构》,修改一行代码也可以增加单元测试。通过有单元测试保驾护航的重构,逐步改善现有代码的设计。

开发新功能时,学习《测试驱动开发》,实现 TDD。

延伸阅读

这个时候,可能会抱怨现有代码的架构太烂,感叹项目早期没有把架构设计好。下次设计系统时,要改进,纵向要划分好领域模块,横向要处理好不同的层次。学习洋葱架构,不同的领域是不同的洋葱,层次架构是洋葱不同的分层。推荐阅读《架构整洁之道》《领域驱动设计》《实现领域驱动设计》。

例子

那么,有没有参考例子呢?
这个Github地址是采用 TDD 方式,使用 swift 做的一些 leetcode 题解,可以参考,相互交流学习。
Todo: 开发一些复杂的 TDD 例子。

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到