
袁金松 刘煌 刘玉龙
本书由中兴通讯资深专家执笔,融合多年的一线项目经验,全面讲解TDD的基础理论、实践操作、工程化推广路径与未来发展方向。内容覆盖广泛、体系完整,既是开发者个人成长的实用工具书,也是团队与企业推进TDD落地的权威参考。 本书主要内容如下: 认知篇(第1~2章):详细介绍TDD的历史背景、核心原则和要点,以及本质,并且通过第一性原理探讨 TDD 的真正价值和作用,帮助读者建立全面的TDD认知。 实践篇(第3~9章):围绕TDD的实施流程和方法展开,从正确的操作步骤、用例拆分与Todolist设计,到黑盒/白盒测试、测试分层、测试数据管理及测试替身技术(如Fake和Mock),提供了丰富的实践经验和应对策略。同时,本篇以“DD 送货”项目为案例,展示了TDD在微服务架构下的实践全景图。 工程化篇(第10~11章):探讨如何推动TDD在大型组织中的规模化落地,包括TDD规模化落地的价值、难点和方案,提出了一系列最佳实践和成熟度评估方法,帮助企业实现TDD的长期稳定运作。 拓展篇(第12~13章):聚焦于大模型对软件开发的深远影响,分析大模型如何改变软件工程范式,以及程序员如何拥抱AI技术。本篇还探讨了大模型辅助TDD开发的“双轮驱动”模式,并详细介绍了相关的Prompt技巧、模板及AutoTDD工具的技术架构和实践应用。
前面的知识扫盲,方法,概念还是推荐看,后面就感觉是在凑字数了。 《TDD全视角:认知、实践、工程化与AI融合》 袁金松 刘煌 刘玉龙 32个笔记 Chapter 2 第2章 TDD的价值 ◆ 是有限的,只有通过团队协作,才能实现高效、高质量的工作成果。 [插图] 图2-1 研发效能分析 TDD在研发效能的软件工程能力和人员能力两个方面都能发挥不小的作用,下面将详细描述。 2.2 TDD提升软件工程能力 2.2.1 TDD让编程更专业 TDD是如何让我们的编程过程更加专业的呢? 首先,TDD可以做到价值交付。因为TDD强调测试先行,开发的起点是Todolist,而Todolist可以看作需求分析和方案设计之后的功能描述。一切开发活动都围绕实现Todolist展开,确保了价值导向。 ◆ 意图导向编程的一个显著优势是对用户体验和需求的重视。这种以客户价值为导向的方法,确保了软件解决方案能够更准确地符合用户的实际使用场景和需求。TDD是一种实践意图导向编程的有效方法。它通过先编写测试用例来定义应用程序所期望的行为,再编写代码来通过这些测试。 ◆ [插图] 图2-2 缺陷修复的成本变化趋势 因此,为了获得更合理的资源投入产出比,应该在需求阶段和开发阶段初期尽早地发现缺陷,从而减少修复成本和返工,这正是测试左移的价值所在。 测试左移之所以重要,是因为我们要在缺陷引入的最初阶段发现问题,将其“扼杀在摇篮里”,而不是任由它像雪球一样越滚越大。这里需要注意,测试左移要求测试活动尽早介入,这不单是把测试人员进行左移。因此,团队里的每个成员都需要具备测试左移的思想,从一开始就绷紧质量这根弦,确保每个人的工件质量。 ◆ 测试左移要求测试活动尽早介入,这不单是把测试人员进行左移。因此,团队里的每个成员都需要具备测试左移的思想,从一开始就绷紧质量这根弦,确保每个人的工件质量。 ◆ 如果将这一思想延伸到ATDD(验收测试驱动开发),则可以实现全流程的端到端测试驱动,确保从需求到实现的每个环节都受到测试的严格约束。ATDD与TDD的关系如图2-3所示。 [插图] 图2-3 ATDD与TDD的关系 在软件开发过程中,TDD与测试左移的关系如图2-4所示。 [插图] 图2-4 TDD与测试左移的关系 为了确保开发出符合用户需求的高质量产品,从需求分析到测试验收的每个环节都至关重要。 ◆ 在日常开发中,发现问题、定位问题、修复问题虽然不是最根本的复杂性工作,但确实占据了开发者的大量时间,甚至可能消耗一半以上的有效工作时间。 ◆ ❑知识工作不被直观看到:知识工作者的产出是知识,而非直接可见的工作成果。知识只有在被消费时才有价值。例如,业务分析只有在被理解和应用时才有意义 ◆ 。这可能源于对测试编写技能的不自信或对时间成本的考量。由于对测试编写不甚熟悉,不少程序员倾向于逃避这项工作。 ◆ 如果程序员在开发阶段就编写完善的测试,测试人员就能从重复的基础测试中解放出来,专注于更高价值的测试任务,如探索性测试。 ◆ TDD通过提供一个共同的、基于测试的沟通框架,促进团队成员间的协作,确保软件开发过程中的每个人都紧密对齐于共同目标——交付满足用户需求且质量可靠的软件产品。 ◆ 2026/09/21发表想法 其实有了大模型后,tdd反而很容易实践,加入tdd的skill就行了。 原文:对于新员工而言,直接学习并使用TDD有助于提高研发效能,因为他们从无到有地构建自己的开发习惯。而对于有经验的老员工,他们已经形成了一套适合自己的高效开发模式,向TDD迁移可能会在短期内降低效能,具体效果取决于现有开发模式与TDD的契合程度。 ◆ 对于新员工而言,直接学习并使用TDD有助于提高研发效能,因为他们从无到有地构建自己的开发习惯。而对于有经验的老员工,他们已经形成了一套适合自己的高效开发模式,向TDD迁移可能会在短期内降低效能,具体效果取决于现有开发模式与TDD的契合程度。 ◆ 3.提升研发效能的路径 尽管TDD是业界认可的开发方法,许多人从中受益,但也存在质疑。我们应避免同温层效应和幸存者偏差,用辩证的眼光看待和实践TDD。TDD的价值不仅在于其方法本身,还在于它能推动各种优秀技术实践的落地,并通过实践探索高效研发的方法。 提升研发效能的关键路径包括: ①掌握TDD:深入学习并掌握TDD,避免浅尝辄止。 [插图] 图2-9 TDD与研发效能的关系 ◆ ❑持续学习新技术,不断提升能力。 ❑高度自动化和标准化。 ❑注重代码的可读性、可维护性和扩展性。 简单来说,工程师文化体现为对代码、测试用例、方案设计等方面的交付质量和细节的高度重视。 2.TDD如何助力打造工程师文化 从长远来看,TDD不仅是一种开发方法,还是培养工程师文化的有效手段。TDD与工程师文化的关系如图2-10所示。 [插图] 图2-10 TDD与工程师文化的关系 TDD作为一种具有杠杆作用的核心技术实践,可以推动其他多种技术实践的落地,如清洁代码(Clean Code)、重构、简单设计、结对编程、代码评审、测试设计等。 ◆ 简单来说,工程师文化体现为对代码、测试用例、方案设计等方面的交付质量和细节的高度重视 实践篇 ◆ 结合项目实践经验,推进TDD时应遵循以下四条建议:①在编写生产代码之前,必须先编写测试代码(这里的测试是指那些因缺少生产代码而注定失败的测试)。②仅编写刚好能解决当前测试失败问题的生产代码,切勿过度开发或添加不必要的功能,以免引入新的、未被测试覆盖的问题。③仅编写刚好能解决当前测试失败问题的生产代码,避免额外实现。④当测试通过后,如发现代码存在“坏味道”,应立即重构,并确保重构后测试仍然通过。 工程化篇 ◆ 2026/09/21发表想法 大模型出来后,这些都不是难点了。 原文:10.2.1 个人层面的实践难点 ◆ 10.2.1 个人层面的实践难点 拓展篇 ◆ 大模型工具的引入并非单纯为了减轻工作负担,而是调整工作重点,使程序员能够摆脱重复性任务,专注于更具创造性和战略性的工作。 ◆ 尽管大模型在处理重复性高、机械性的任务方面表现出色,但它无法替代程序员的思考和决策能力。程序员仍需掌握“辅助驾驶的方向盘”,在利用大模型工具的同时,确保代码质量和项目方向的正确性。大模型能够帮助程序员聚焦于高价值任务,提升专业能力,但这一切的前提是程序员自身具备足够强的专业素养和创新思维。 ◆ 在这场技术革命中,程序员需要不断学习和适应,才能在新环境中茁壮成长。 ◆ 与大模型共生并不意味着完全依赖大模型,而是要找到人与大模型之间协同的平衡点 ◆ ❑提出问题:能够准确地向大模型提问。❑解释回答:能够理解和解释大模型的回答。❑指导生成:能够指导大模型生成高质量的代码。此外,掌握基础的数据科学和机器学习概念,将有助于程序员更好地理解大模型的工作原理,并充分利用其能力来解决问题。 ◆ 因此,在学习新技术时,应把重点放在对原理的理解上。 Chapter 13 第13章 大模型辅助TDD开发 ◆ 随着few-shot提示技术的引入,我们可以显著提高结果的可复制性。通过向ChatGPT提供具体的示例,我们可以引导它按照我们提供的样本进行思考,从而更容易获得一致的结果。这种方法使得在特定情境下复用Prompt成为可能,进一步提高了交流的效率和准确性 ◆ ①上下文(背景 ◆ ②角色定位(你是谁 ◆ ③任务描述(做什么) ◆ 。④执行步骤(怎么做) ◆ ⑤限制条件(不要做 ◆ ⑥输出格式: ◆ Prompt=背景+你是谁+做什么+怎么做+不要做+输出格式
开什么玩笑。 TDD就因为工程理解难,因此用结果反推的黑盒法。 AI正是解析工程,正好是正向推。 这文章就是搞笑的,基本逻辑都不懂。