TDD 实践
TDD 的项目驱动
TDD 具体原则
1、当且仅当存在失败的自动化测试,才开始编写生产代码
2、消除重复(徐昊老师:消除坏味道)
经典的红/绿/重构(Red/Green/Refactoring)
红:编写一个失败的小测试,甚至可以是无法编译的测试;
绿:让这个测试快速通过,甚至不惜犯下任何罪恶;
重构:消除上一步中产生的所有重复(坏味道)。
TDD 工作流程
学习过程中,老师建议使用任务分解法,作为 TDD 的核心要素:
1、先构思软件的使用方式,然后把握对外的接口方向
2、大致的构思方向,划分组件以及组件之间的关系,如果没有头绪,也可以不划分
3、根据需求的功能描述拆分功能点,功能点要考虑正确路径与边界条件
4、根据组件与组件的关系,将功能划分到组件中
5、针对拆分写测试,然后进入红/绿/重构模式

2022-6-9日新增
1、通过学习 TDD,发现多余的代码会给团队增加编译成本、跑用例的时间成本(这两项影响不大),最重要的是影响理解的成本。
2、好的测试,就应该通过测试用例就能清晰的理解业务逻辑。TDD 的说法是写不出测试代码,就是不能理解整个业务需求。理解业务需求不需要通过一行一行的看代码进行理解!
TDD 对程序员来说是一种内功修炼,通过 TDD 会对自己的掌握的知识进行重现,比如语言特性、设计模式、重构手法以及对业务的理解。
TDD是一种对做事方法的极致拆分,一次只做一件事,思考业务逻辑时就不考虑实现和代码坏味道;编写业务代码时,也仅考虑能通过用例的逻辑;而重构时,也是不能改变原来的代码逻辑的。通过一个个极小粒度的操作,实现最终整体的协调。
程序员需要对自己的编程的手艺进行匠艺的打磨,比如代码的鲁棒性,就是修改一个模块内部的代码后,需要修改其他的模块多不多。如果不多,证明code 的鲁棒性良好,反之如果需要修改大量的模块,则证明不好。
思考
发现自己花在 TDD 的时间上少了,所以为了保证自己的代码质量以及学习的方式,决定需要花更多的时间在 TDD 上,进行思考。
项目选用 Java 先跟着老师的代码思路走,再针对 Go 语言进行自己的项目实现,如果只是自己从老师的项目出发去模仿老师的 Java 风格去写 Go,只会像一道菜一样“串味”而变得难吃。