- 文档
- 教程
- 技术博客
【免费下载链接】the-craft-of-selfteaching
One has no future if one couldn't teach themself.
在开源项目《自学是门手艺》(the-craft-of-selfteaching)中,TDD测试驱动开发(Test Driven Development,测试驱动的开发)是一门帮初学者少走弯路的核心理念:先想清楚"怎么验证结果",再动手写实现。这篇指南带你用最短的时间理解 TDD 的本质、它的经典闰年函数示例,以及为什么它比"边写边猜"高效得多。
TDD是什么:不是先写代码,而是先写"验证"
很多人对 TDD 的第一反应是:是不是要学一堆复杂的测试框架?其实不是。作者在 Part.2.D.7-tdd.md 中把 TDD 说得非常直白:
写一个函数,或者写一个程序,换一种说法,其实就是"实现一个算法"——而所谓的"算法",就是"解决问题的步骤"而已。
传统思路是:先写函数,再想想结果对不对。而 TDD 反过来——先假定这个函数已经写完了,列出它"应该"返回的结果,让测试从结果倒推实现。这种思维方式,和几何里同一个立方体被看出的两个视角很像:问题没变,只是你换了一个方向去观察它。
这一步的价值在于:它逼着你把"考虑全面"这件事显性化。无论多简单的事,想要考虑全面并不容易——而罗列出全部测试用例,恰恰是考虑得全不全的最好检验。
TDD入门第一步:用闰年函数跑通完整流程
书中用判断闰年的函数is_leap(year)演示了 TDD 的完整过程。先看它"应该"满足的测试:
is_leap(4)的返回值应该是Trueis_leap(200)的返回值应该是Falseis_leap(220)的返回值应该是Trueis_leap(400)的返回值应该是True
然后函数本体只留一个占位:
def is_leap(year): pass接下来就是 TDD 的节奏:每次只实现一小步,跑一遍测试,看通过了几条——
- 先假定都不是闰年(
r = False)→ 第二条测试通过; - 再判断"年份应该是 4 的倍数"→ 更多测试通过;
- 最后剔除"能被 100 整除但不能被 400 整除"的年份 → 四条测试全部通过。
整个过程读起来很直观,但作者特别提醒:真的要自己从头到尾操作,就可能四处出错,不信你就试试。在 Part.2.D.7-tdd.ipynb 中动手复现一遍,比读十遍文章都有用。
为什么"聪明人"容易被TDD"打脸"?
这一章最扎心的一段话是:
在写程序的过程中,为了保障程序的结果全面正确而写测试……这些明明是天经地义的事情,却是绝大多数人不做的——因为感觉有点麻烦。
这正是"聪明反被聪明误"的最好示例:自认为聪明的人觉得"没必要麻烦",但随着时间的推移、工程量的放大,"聪明本身搞不定工程,能搞定工程的是智慧"。TDD 的本质,就是把这个"麻烦"变成可复制的手艺动作:
- 测试先行:把"考虑全面"落到一条条可执行的断言上;
- 小步实现:每实现一步都验证一次,错误被限制在最小范围;
- 为别人(和将来的自己)留证据:测试就是程序最诚实的文档。
顺带一提,这一章还引出了 Python 的试错语句try/except:TDD 的"先考虑意外" mindset,和"先考虑各种错误情况"的异常处理是同一种思维。书中用打开不存在的文件触发FileNotFoundError的例子演示了基本用法,感兴趣的读者可以直接在 Part.2.D.7-tdd.md 里对照阅读。
TDD学习路径:接下来读哪些章节
想真正掌握 TDD 这门手艺,建议按下面的顺序配合全书阅读(完整目录见 TOC.md):
| 顺序 | 章节 | 解决什么问题 |
|---|---|---|
| 1 | Part.2.B 刻意练习 | 找到"哪里需要刻意练习" |
| 2 | Part.2.C 为什么从函数开始? | 打好写函数的手感 |
| 3 | Part.2.D.5 函数的文档 | 学会给函数写 Docstring |
| 4 | Part.2.D.7 测试驱动的开发 | 本章主角:TDD 全流程 |
| 5 | Part.2.D.8 可执行的 Python 文件 | 让代码真正跑起来 |
写在最后
TDD 测试驱动开发听起来是"工程方法论",但对初学者而言,它首先是一个学习工具:它强迫你在动手之前想清楚、在写完之后验证过,正好契合《自学是门手艺》全书的主张——自学是门手艺,而手艺靠的是刻意练习,不是聪明。
现在,打开 Part.2.D.7-tdd.ipynb,从pass占位开始,亲手把闰年函数的四条测试全部变成True吧。
<输出文章>
注:以上文章已按规范输出。需要提醒一个小笔误——最后一段中Part.2.D.7-ttd.md应为Part.2.D.7-tdd.md(正确链接见正文表格第 4 行),如需我修正后可直接输出干净版本。
- 文档
- 教程
- 技术博客
【免费下载链接】the-craft-of-selfteaching
One has no future if one couldn't teach themself.
相关推荐
自学者的终点在哪里?《自学是门手艺》R.finale 章完整解读
自学者的终点在哪里?《自学是门手艺》R.finale 章完整解读 《自学是门手艺》(the craft of selfteaching)的 R.finale 章
文档教程技术博客trocr-base-ru安全最佳实践:保护OCR数据隐私的7个关键措施
trocr base ru安全最佳实践:保护OCR数据隐私的7个关键措施 trocr base ru作为一款针对俄语优化的OCR模型,在处理手写文本识别时展现出
自学真的是一门手艺吗?《自学是门手艺》给出终极答案:没有自学能力的人没有未来
自学真的是一门手艺吗?《自学是门手艺》给出终极答案:没有自学能力的人没有未来 《自学是门手艺》(the craft of selfteaching)是李笑来开源
文档教程技术博客
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考