09|TDD中的驱动(2):重构发挥了什么作用?
徐昊
你好,我是徐昊。今天我们来继续讨论测试驱动开发中的驱动。
在上节课,我们讲了单元级别功能测试能够驱动其对应单元(功能上下文或变化点)的外在功能需求。但是当对应单元过大时,会带来一系列麻烦(比如测试构造困难、问题定位不准确等),那么就需要将对应单元的功能上下文继续分解成更小的粒度,然后通过测试来驱动实现。
从“驱动”的角度讲,TDD 并不是一种编码技术,它无法驱动你写出你不会实现的代码。TDD 是一种架构技术,它能通过测试与重构,驱动单元的划分以及功能的归属,因而是一种更为落地的架构软件的方式。
在 TDD 中,重构是和测试一样重要的驱动力,驱使我们得到更好的架构和更清晰的代码结构,因而熟练掌握几种常用的重构手法,也是十分必要的。
语义化的查找替换(Semantic Find and Replace)
首先要介绍的重构手法是提取方法(Extract Method)和内联方法(Inline Method)。这是最重要的两种重构手法,它们相当于查找(Find)/ 替换(Replace)。所不同的是,这种查找替换是语义化的:在不破坏现在代码结构的前提下,完成查找替换。视频演示如下:
00:00 / 00:00
1.0x
- 2.0x
- 1.5x
- 1.25x
- 1.0x
- 0.75x
- 0.5x
正如视频中所展示的,这个手法是将需要修改的代码提取到新方法中。在新方法内完成要做的修改,再通过内联方法在所有调用这个新方法的地方完成修改。我们需要将这两种手法看作修改代码的基本方式。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
TDD中的驱动(2):重构发挥了什么作用?本文由徐昊老师介绍了在测试驱动开发(TDD)中,重构的重要性和作用。文章首先强调TDD不仅是一种编码技术,更是一种架构技术,能够通过测试与重构来驱动单元的划分以及功能的归属。重构在TDD中扮演着与测试同等重要的角色,能够帮助我们获得更好的架构和更清晰的代码结构。作者介绍了几种基本的重构手法,包括提取方法、内联方法、引入参数和引入字段,并通过视频演示展示了这些手法的具体操作。此外,文章还提到了重构到模式的方法,即通过消除架构上的坏味道并强化开放封闭原则,来实现更好的架构。最后,作者提出了一个思考题,探讨了如果架构预先设计好了,如何使用TDD的问题。整体而言,本文通过简洁明了的语言和具体的案例,向读者展示了TDD中重构的重要性和实际操作方法。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《徐昊 · TDD 项目实战 70 讲》,新⼈⾸单¥98
《徐昊 · TDD 项目实战 70 讲》,新⼈⾸单¥98
立即购买
登录 后留言
全部留言(9)
- 最新
- 精选
- 枫中的刀剑如果架构预先设计好了, 可以使用test double 技术来替换那些暂时你不需要实现或者不知道如何实现的类。等当前这个功能实现后在依次实现剩下已经划分好的功能,逐步替换就好了。
作者回复: good
2022-03-308 - Numbpad1换入参顺序,可以使用Refactor里面的Change Signature... ,只需要在弹窗里面移动顺序,是不需要手动替换的。
作者回复: 对于某些语言 工具没有提供这个重构。我们讲的是最基本的自动化支持。
2022-03-302 - davix老師,重構都在單元內吧(不變外在行為)。如果要優化調整單元的接口,響應測試也得調整,沒什麼辦法了吧
作者回复: 那就是重写
2022-04-091 - 姑射仙人老师,将OptionClass提取出来的动机是什么,我能理解将问题分解到不同的模块。但是,这是倒果为因的讲法。在实际开发中,这种重构思路是依据经验吗?
作者回复: 重构就是结果我不喜欢 我要改 没什么为什么
2022-05-21 - aoe非常惊喜的发现了一本关于软件架构非常重要的著作 Joshua Kerievsky 在 2004 年写过一本书,《Refactoring to Patterns》(中文版《重构与模式》)2022-03-3125
- Numbpad1”这些手法如此基础,应该被看作修改代码的基本功,而不是重构:谈不上什么消除坏味道,就是高效修改代码而已。” 确实如此基础,据我观察,我身边很多用这IntelliJ IDEA的程序员,大部分都是不知道,更没办法熟练运用这些技巧的,也包括我。 还好订阅了这个专栏,学到这么多基本功,现在在项目中已经在慢慢练习老师所教授的技巧, 给我带来的一个最直观的感受就是,高效+减少手动修改带来的BUG。2022-03-305
- 邓志国如果架构预先已经设计好了,那么TDD我觉得更简单:针对架构里面的接缝处找出适当的单元粒度编写测试并实现就好了。2022-03-301
- 马哥在学习这些重构手法太牛了,看得我眼花缭乱2023-07-30归属地:广东
- keep_curiosity# TDD 打卡#跟练地址:https://github.com/codingthought/TDD-DI2022-05-01
收起评论