08|TDD中的驱动(1):驱动的极限是什么?
徐昊
你好,我是徐昊。从今天开始,我们来讨论一下测试驱动开发中的驱动是什么意思。
在上节课,我们讨论了测试驱动中测试的性质。它们不是“单元测试”,而是不同粒度的功能测试。或者如我建议的那样,你可以叫它们“单元级别功能测试”。
那么这些单元级别功能测试将会如何驱动我们的开发呢?今天我们就来讨论一下这个问题。
如果当初我们那么做了
上节课我们讲到,TDD 中测试针对的粒度是独立的功能上下文或变化点。测试验证功能上下文或变化点符合功能需求。
从给定的参数列表中寻找对应选项,并根据选项类型读取参数;
将参数列表按照选项,分割成由选项名称和参数组成的数组;
将参数列表按照选项,分解成由选项名称和参数组成的映射。
这三种选择实际上就划分了不同的功能上下文。当时出于实现方式复杂度的考虑,我选择了第一种实现方式。即,从功能上下文的角度考虑,也就是从 API 视角出发,将全部功能当作一个上下文。那么如果我们当时选择了其他的实现方式,会如何呢?请看接下来的视频演示。
00:00 / 00:00
1.0x
- 2.0x
- 1.5x
- 1.25x
- 1.0x
- 0.75x
- 0.5x
好,到此为止,通过红 / 绿循环,我们实现了参数分割的功能。剩下的部分,其实与我们之前展示的相差不多。我稍微演示一两个测试,其他的你可以自行操作。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
TDD中的驱动(1):驱动的极限是什么?本文由徐昊老师讲述了测试驱动开发(TDD)中的驱动概念。文章首先介绍了TDD中的测试性质,强调了单元级别功能测试对开发的驱动作用。作者通过实例讲解了不同的功能上下文划分对开发的影响,以及如何通过单元级别功能测试逐步完成软件的功能。文章还探讨了TDD的极限,指出TDD无法驱动单元内的功能实现,而是更适合驱动功能在单元间的分配,因此被视为一种架构技术。此外,作者提出了思考题,引导读者从架构的角度思考红/绿/重构循环的作用。最后,文章介绍了徐昊老师发起的“TDD专栏首发·代码评点”活动,鼓励读者动手实操,多记录学习体会。整体而言,本文通过丰富的实例和深入的讨论,帮助读者深入理解TDD的驱动概念及其在软件开发中的应用。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《徐昊 · TDD 项目实战 70 讲》,新⼈⾸单¥98
《徐昊 · TDD 项目实战 70 讲》,新⼈⾸单¥98
立即购买
登录 后留言
全部留言(16)
- 最新
- 精选
- 邓志国最长碰到的挑战就是问:TDD如何驱动某个算法的实现。这篇文章给了很好的答案。
作者回复: 答案就是实现不了
2022-03-2925 - davix請問老師,我體會到的一個現實情況是實現跟設計常常是同時進行的。也就是說大多情況拿到一個需求,開始只有一個模糊的設計。對於功能模塊的劃分,各模塊對外接口具體參數等,是在實現的時候逐步明確清晰的。如果ㄧ上來對邊界就十分明確,自然很容易ㄧ個個寫成測試,再一個個實現pass就行了。但這種情況很少。您怎麼看?
作者回复: 设计可以模糊 需求不行 需求必须清楚
2022-04-093 - aoeTDD 不能做什么? - 不能窥探方法内是如何实现的,例如对于一个排序算法,只能验证结果是否符合预期,不能验证使用了哪种算法(冒泡、插入等) - 不能求解自己不会的问题,例如: - 自己没有思路的算法题 - 破解世界七大数学难题获得高额奖金
作者回复: 但是可以知道自己到底是哪不会
2022-03-303 - Sudouble红:搭建一个框架; 绿:实现了框架; 重构:改进了框架。 是一个从无到有,从有到完善的架构演进过程。2022-04-1110
- Geek_a03aa5红:这个需求很简单,怎么实现我不管 绿:不要跟老夫说设计模式、面向对象,jQuery 一把梭.jpg 重构:改掉上面产生的坏味道 在每个阶段只需要达成一个小目标,个人感觉是用来降低开发过程中的认知负担的好办法。2022-06-294
- aoe原来以为可以学好了 TDD 在 LeetCode 上大杀四方,看来我想多了! 多谢老师告知 TDD 不能做什么2022-03-2944
- 枫中的刀剑红:以代码的形式呈现功能最终的样子,以终为始的思想,通过测试迫使自己去思考功能的上下文。 绿:将想法变为现实。通过红的步骤我们可以只专注在一个小的上下文上来思考如何实现,降低认知负担。 重构: 对功能和结构再次调整,消除不合理的地方,朝更好的设计前进。2022-03-303
- 范飞扬现在不用带着测试代码到 Stack Overflow了。带着测试代码找GPT,它会帮你实现2024-01-15归属地:广东1
- Kea道生一 一生二 二生三 三生万物 tdd 可以帮助你高效且工程化地由一生二 二生三 三生万物 但是不能帮你如何实现道 本质你还得知道道是什么 而且 tdd 本身也是一种道2022-09-05归属地:广东1
- Frode1. TDD“驱动”的是架构,因而实际是一种架构技术。 2. 测试驱动开发到底驱动了什么:功能在单元(模块)间的分配。我们也讲了,测试驱动开发在什么地方会失去驱动力:单元(模块)内的实现方式 3. 如果我们要驱动单元内的功能实现,该怎么办呢?那么就需要将这个单元对应的功能上下文,分解为更小的上下文,并将功能需求在这个上下文中加以分解。 4. 如果真的不知道怎么实现?拆分功能,可以先mock出来,然后实现可以实现的,再想办法解决,例如请教他人2022-03-301
收起评论