现在,人们经常谈论敏捷开发。
什么是敏捷开发?
敏捷开发 是一种响应快速变化的需求的软件开发能力。它们的具体名称、概念、过程和术语各不相同。与“非敏捷”相比,它们强调程序员团队和业务专家之间的密切协作、面对面的交流(被认为比书面文档更有效),并经常交付新的软件版本、小型和 自组织 的小型团队和有价值的功能编写,以及适应不断变化的需求的团队组织方法,更加关注人在软件开发中的作用。
但是,TDD 敏捷开发方法有几个类似的版本,例如 TDD:BDD、DDD 和 ATDD。在详细介绍 TDD 之前,我先简单介绍一下这些方法:
TDD:测试驱动开发
测试驱动开发 (TDD)是一种软件开发过程,它依赖于在软件完全开发之前将软件需求转化为测试用例,并通过对所有测试用例重复测试软件来跟踪所有软件开发。这与先开发软件然后创建测试用例相反。一些流行的模型很好地支持 TDD,例如 MVC 和 MVP。
BDD:行为驱动开发(Behavior Driven Development)
行为驱动开发 (BDD) 也是一种敏捷软件开发过程。它鼓励开发人员、质量保证测试人员和客户代表在软件项目中进行协作。它鼓励团队使用对话和具体示例来形成对应用程序应该如何工作的共同理解。它来自测试驱动开发(TDD)。
ATDD:验收测试驱动开发
为了通过单元测试用例促进功能代码的实现,团队需要定义预期的质量标准和验收规则,通过清晰一致的验收测试计划(包括一系列测试情景)。对于开发人员来说,它强调如何实现系统以及如何对其进行测试。
DDD:域驱动设计
DDD指的是领域驱动设计,即领域驱动开发。DDD其实就是建立在这个基础上的,因为它专注于服务层的设计,专注于业务的实现,将分析和设计结合起来,不再停留在分裂的状态,为了正确全面的实现客户需求,构建业务模型可扩展性。
TDD实施计划
通过测试推动整个开发,但测试驱动开发不仅仅是一项简单的测试工作,而是一个对需求分析、设计、质量控制进行量化的过程。
发展原则
先写测试代码,再写函数代码。
- 根据需求文档编写测试代码,不实现功能;
- 不想一口就变胖。测试大型功能块时,应先将其拆分成较小的功能块进行测试;
- 记住不要写代码来完成功能,使用最简单的代码来实现功能;
- 如果需求可以测试,就写测试代码,不能测试或者觉得不需要测试的就放弃;
- 在更改/添加任何功能代码之前,首先要考虑是否要更改/添加测试用例;
- 功能/测试代码、结构不合理、重复代码等,测试通过后及时重构。
TDD开发过程
- 分析并确定目标测试场景;
- 添加单元测试,验证测试场景的输入输出;
- 运行测试,得到失败的测试结果;
- 编写最简单的函数代码通过测试;
- 再次运行测试,看到测试通过;
- 进行代码重构,包括功能代码和单元测试代码;
- 重复以上步骤,直到开发完成。
TDD 的好处
- 减轻开发者的负担。通过一个清晰的流程,让我们一次只关注一个点,思考的负担就更少了。
- 防护网。覆盖完整的单元测试为产品代码提供了保护网,便于满足需求变更或改进代码设计。因此,如果您的项目需求是稳定的,一次完成,并且没有后续更改,那么 TDD 的好处就更少了。
- 提前明确要求。先写测试可以帮助我们提前思考需求,明确需求细节,而不是写到一半就发现不清楚的需求。
- 快速反馈。很多人说,当TDD的时候,我的代码量增加了,所以开发效率降低了。但是,如果你没有单元测试,你必须手动测试它们,你会花费大量时间准备数据、启动应用程序、修改界面等等,而且反馈很慢。准确地说,快速反馈是单元测试的一个好处。