TDD 实践

TDD 的项目驱动

TDD 具体原则

1、当且仅当存在失败的自动化测试,才开始编写生产代码

2、消除重复(徐昊老师:消除坏味道)

经典的红/绿/重构(Red/Green/Refactoring)

红:编写一个失败的小测试,甚至可以是无法编译的测试;

绿:让这个测试快速通过,甚至不惜犯下任何罪恶;

重构:消除上一步中产生的所有重复(坏味道)。

TDD 工作流程

学习过程中,老师建议使用任务分解法,作为 TDD 的核心要素:

1、先构思软件的使用方式,然后把握对外的接口方向

2、大致的构思方向,划分组件以及组件之间的关系,如果没有头绪,也可以不划分

3、根据需求的功能描述拆分功能点,功能点要考虑正确路径与边界条件

4、根据组件与组件的关系,将功能划分到组件中

5、针对拆分写测试,然后进入红/绿/重构模式

TDD-2

2022-6-9日新增

  • 1、通过学习 TDD,发现多余的代码会给团队增加编译成本、跑用例的时间成本(这两项影响不大),最重要的是影响理解的成本。

  • 2、好的测试,就应该通过测试用例就能清晰的理解业务逻辑。TDD 的说法是写不出测试代码,就是不能理解整个业务需求。理解业务需求不需要通过一行一行的看代码进行理解!

  • TDD 对程序员来说是一种内功修炼,通过 TDD 会对自己的掌握的知识进行重现,比如语言特性、设计模式、重构手法以及对业务的理解。

  • TDD是一种对做事方法的极致拆分,一次只做一件事,思考业务逻辑时就不考虑实现和代码坏味道;编写业务代码时,也仅考虑能通过用例的逻辑;而重构时,也是不能改变原来的代码逻辑的。通过一个个极小粒度的操作,实现最终整体的协调。

  • 程序员需要对自己的编程的手艺进行匠艺的打磨,比如代码的鲁棒性,就是修改一个模块内部的代码后,需要修改其他的模块多不多。如果不多,证明code 的鲁棒性良好,反之如果需要修改大量的模块,则证明不好。

思考

发现自己花在 TDD 的时间上少了,所以为了保证自己的代码质量以及学习的方式,决定需要花更多的时间在 TDD 上,进行思考。

项目选用 Java 先跟着老师的代码思路走,再针对 Go 语言进行自己的项目实现,如果只是自己从老师的项目出发去模仿老师的 Java 风格去写 Go,只会像一道菜一样“串味”而变得难吃。


TDD 实践
https://chaggle.github.io/2022/04/04/go/TDD/TDD-2/
作者
chaggle
发布于
2022年4月4日
更新于
2026年3月15日
许可协议