我们已经看到了太多的TDD例子, 无非是一些计算器,Stack,保龄球游戏, 拍卖物品等等。 它们都太简单了,只能拿来吸引眼球,展示一些基本的TDD概念。
每个人都很容易理解TDD的基本步骤:
- 编写一个失败的测试
- 开发足够的代码让测试通过
- 重构
但是为什么我们不能把它们应用到自己的实际开发工作中去? 为什么我们想利用TDD进行新需求开发的时候还是手足无措,不知道如何下手?
敏捷实践中的TDD只是告诉了我们形式
,没有告诉我们内容
, 更重要的是对于不同类型的应用程序 它没有告诉我们如何开始
!
首先需要澄清一个问题,TDD只是针对单元测试吗?我想答案是否定的。 因为当我们接到需求的时候,还没有任何代码存在,我们没有办法直接跳到Class Level去写测试,只能先针对某些场景,功能,行为编写一些测试, 试图从客户的角度来观察,使用系统。 这样的测试当然不是单元测试, 我们可以称之为场景或验收测试。
可能有人问了,需求太大怎么办?难道你的测试的粒度很粗吗?那样还有什么意义?
答案是对需求进行“垂直”的"切片", 让每一片都足够小,但是有足够完整, 例如对Web application ,每个切片都应该包括UI Layer, Business Logic Layer, Database Layer. 把需求进行有效的”切片“是敏捷开发中一个关键的技能, 开发人员必须要学会把一个需求切成一个个可以循序渐进开发的小片, 每个切片都是自己的一个ToDo的 List.
OK, 现在验收测试有了,接下来呢? 怎么让它pass ?
当然是写代码了:-) 注意: 开始的时候一些Class 并没有单元测试保证
,它们可能非常的直接,非常的简单 我们脑海中可能一下子就会浮现出来, 但是对于另外一些类,你可能只清楚它的接口, 不清楚怎么样去完成具体的功能, 我们熟悉的Class Level级的TDD 需要进场了!
需要注意的是尽可能用简单的代码来完成功能, 让验收测试通过。 在对别的“切片”进行开发的时候,那些简单的,直接的Class可能会变得复杂,僵化,有了Bad Smell, 重构再所难免, Class Level的TDD 仍然会大展身手。
总结一下:
(1) 不是所有的东西都是TDD出来的
(2) TDD至少会被用到两个测试级别上:验收测试和单元测试 , 两者相辅相成,共同作用,完成一个”需求切片“开发的TDD 循环。
分享到:
相关推荐
文件名中的“测试驱动开发TDD培训讲义.ppt”、“TDD_测试驱动开发.ppt”和“测试驱动开发—1.1_测试驱动开发简介.ppt”很可能包含了关于TDD的详细讲解,涵盖了TDD的概念、原则、实践技巧以及如何在实际项目中应用...
标题中的“TDD测试驱动开发文档详细”表明这是一个关于TDD的详细资料集合,可能涵盖了TDD的理论基础、实践步骤、工具使用等方面。描述中提到的“java TDD测试开发流程”,意味着这些文档专注于Java语言的TDD实践,...
以下是关于TDD的三个关键修炼: 1. **理解测试金字塔**:测试金字塔是一个指导原则,它建议我们构建一个多层次的测试结构,其中单元测试占大部分,集成测试较少,而端到端测试最少。这种层次化的方法有助于快速反馈...
书中还分享了许多关于TDD的实践心得和经验总结: - **培养良好的编码习惯**:如遵循命名规范、保持代码简洁等,这些习惯有助于提高代码质量。 - **加强团队合作**:鼓励团队成员之间的交流和合作,共同解决问题,...
在概述部分,文档首先对主要内容进行了简要介绍,强调了其主要目标是为操作人员提供关于TDD-LTE网络机房的全面指导。接着,文档对LTE网络的基本架构进行了简要讲解,包括其核心组件、工作原理和与其他通信技术的区别...
综上所述,《UMTS-TDD手册》不仅为读者提供了关于NS2中UMTS-TDD系统仿真的全面指南,而且还深入探讨了该领域的关键技术挑战和解决方案。无论是对于正在从事相关研究的学生还是工程师来说,都是一份非常有价值的参考...
### 使用PHPUnit进行TDD驱动开发 #### 一、引言 测试驱动开发(TDD, Test-Driven Development)是一种软件开发方法论,它要求在编写实际功能代码之前先编写测试用例。通过这种方式,可以确保代码的质量,并且有助...
标题中的“关于测试和TDD”指的是Test-Driven Development(测试驱动开发)这一软件开发实践。测试驱动开发是一种敏捷开发方法论,强调在编写实际功能代码之前先编写测试用例。这种方式有助于确保软件质量,降低错误...
单元测试与TDD实践 **一、单元测试之测试目的** 单元测试,作为软件开发过程中的重要环节,其核心目标在于确保代码的质量、可维护性和可扩展性。它通过独立测试软件中的最小可测试单元,如函数或方法,来验证其...
《Test Driven: Practical TDD and Acceptance TDD for Java Developers》是一本专注于Java开发者进行测试驱动开发(TDD)和验收测试驱动开发(Acceptance TDD)的专业书籍。这本书以PDF英文版的形式提供,旨在帮助...
"GSM TDD 噪声分析" GSM TDD 噪声是一种常见的干扰现象,发生在 GSM 通信系统中的射频部分。这种噪声的产生是由于天线辐射出的射频能量和 PA 突发工作时带动电源的干扰。为了减少这种噪声的影响,我们可以采用一些...
java笔试题算法TDD俄罗斯方块教程 在本教程中,您将使用 (TDD) 实现俄罗斯方块游戏。 已经提供了大约 30 个最初的测试,因此您只需要编写代码即可通过它们。 使用这些预先编写的测试用例的目的是为了习惯 TDD 周期,...
【Laravel开发-TDD(测试驱动开发)】 在软件开发领域,TDD(Test-Driven Development,测试驱动开发)是一种编程实践,它强调先编写测试用例,再编写实现功能的代码。Laravel,作为一款流行的PHP框架,高度支持TDD...
**Ruby-TDD实战:Test Driven Development in Action** 在软件开发领域,Test-Driven Development(TDD)是一种编程实践,它强调先编写测试用例,然后编写满足这些测试的最小功能代码。Ruby作为一种动态、灵活的...
### 嵌入式TDD:测试驱动开发在嵌入式C中的应用 #### 引言 测试驱动开发(Test-Driven Development,简称TDD)是一种软件开发方法论,其核心理念是在编写实际代码之前先编写测试用例。这种方法不仅有助于确保代码...
总的来说,"ObeyTheTestingGoat"不仅仅是一本关于Python、TDD和Git的教程,更是一个引导开发者提升技能、理解良好编程习惯的实战指南。通过这本书的学习,读者将能够更加自信地运用这些工具和方法,创造出更可靠、更...
在提供的资源中,"TDD1.ppt"很可能是关于TDD的PowerPoint演示文稿,可能包含了TDD的概念、原则、步骤以及其在Java环境中的应用实例。通过查看这个PPT,读者可以深入理解TDD的工作原理和实际操作技巧。 "develp.zip...