目录
- TDD 测试驱动开发 : Test-driven development, 即测试驱动开发
- BDD 行为驱动开发 : Behavior-driven development, 即行为驱动开发
- DDD 畛域驱动设计 : Domain-drive Design, 畛域驱动设计
测试驱动开发(TDD)是一种开发软件的过程,其中在编写代码之前先编写测试。一旦实现,开发人员将致力编写足够的代码以通过测试,而后开始重构。
域驱动设计(DDD)是一种将实现与一直倒退的模型分割在一起的开发方法。将我的项目的重点放在外围畛域(常识畛域),背地的逻辑上,并迫使技术和非技术方面之间进行合作以改良模型。
行为驱动开发(BDD)是对 TDD 和 DDD 的改良,旨在通过放大沟通差距,增进对客户的理解并实现继续沟通来简化开发。简而言之,BDD 是将业务需要与代码联合在一起的一种形式,使您可能从业务 / 最终用户的角度理解零碎的行为。
Hybrid Practice 混合实际
TDD
Test-driven development, 即测试驱动开发。一种开发过程中利用办法。其思维为先依据需要形象接口,先编写测试用例,而后在开始编写开发代码。TDD 的本意就是通过测试来推动整个开发的进行。
TDD 说白了就是先写一小段性能的测试代码,测试失败后再写实现代码,测试胜利后接着迭代下一个性能。
TDD 的长处:
- 进步性能的可测性
- 测试比拟灵便
- 测试用例覆盖率比拟高
毛病:
- 因为是单元测试代码验证,非技术人员看不懂代码,比拟难验证性能是否贴合需要
- 先写单元测试代码,测试用例须要常常调整,减少了开发人员的工作量和升高了开发效率
BDD
Behavior-driven development, 即行为驱动开发。其目标是激励软件我的项目中的开发者、QA 和非技术人员或商业参与者之间的合作。是从用户的需要登程,强调零碎行为。通过用自然语言书写非程序员可读的测试用例扩大了测试驱动开发方法, 应用混合了畛域中对立的语言的母语语言来形容他们的代码的目标, 让开发者得以把精力集中在代码应该怎么写,而不是技术细节上,而且也最大水平的缩小了将代码编写者的技术语言与商业客户、用户、利益相关者、我的项目管理者等的畛域语言之间来回翻译的代价.
目前支流的 BDD 测试框架为 Cucumber,反对多种编程语言。
cucumber 反对的关键字:
feature | "性能" |
background | "背景" |
scenario | "场景", "剧本" |
scenario outline | "场景纲要", "剧本纲要" |
examples | "例子" |
given | "*", "如果", "假如", "假设" |
when | "*", "当" |
then | "*", "那么" |
and | "*", "而且", "并且", "同时" |
but | "*", "然而" |
given (code) | "如果", "假如", "假设" |
when (code) | "当" |
then (code) | "那么" |
and (code) | "而且", "并且", "同时" |
but (code) | "然而" |
编程是通过应用以上的关键字来形容利用的性能,使非开发人员能疾速便捷的理解代码的性能。
DDD
Domain-drive Design, 畛域驱动设计。其目标是以一种领域专家、设计人员、开发人员都能了解的通用语言作为互相交换的工具,在交换的过程中发现畛域概念,而后将这些概念设计成一个畛域模型,再有该模型驱动软件设计和开发。
畛域模型
- 畛域模型是是对具备某个边界的畛域的一个形象,反映了畛域内用户需要的实质
- 畛域模型只反映业务,和技术无关
- 畛域模型能够反映畛域中的实体和过程
- 畛域模型确保业务逻辑都在一个模型中,有助于进步利用的维护性和可重用性
- 畛域模型能够让开发人员绝对平滑地将业务知识转换为软件架构
- 畛域模型贯通软件剖析、设计,以及开发的整个过程
- 建设正确的畛域模型须要领域专家、设计、开发人员踊跃沟通共同努力,是大家对畛域内的业务不断深入,从而一直细化和欠缺畛域模型
- 畛域模型的表达方式有多种
- 畛域模型是整个软件的外围,设计足够精良且合乎业务需要的畛域模型可能更疾速的响应需要变动
畛域驱动设计的分成架构
- 用户界面 / 体现层
- 应用层
- 畛域层 – 表白业务概念,业务信息和业务规定
- 基础设施层
业务对象的职责和策略:
- 实体(Entities):具备惟一 ID,可能被长久化,具备业务逻辑,对应业务对象
- 值对象(Value objects):不具备惟一 ID,由对象的属性形容,个别为内存中的长期对象,能够用来传递参数或对实体进行补充形容。
- 工厂(Factories):次要用来创立实体,目前架构实际中个别采纳 IOC 容器来实现工厂的性能
- 仓库(Repositories):用来治理实体的汇合,封装长久化框架
- 服务(Services):为上层建筑提供可操作的接口,负责对畛域对象进行调度和封装,同时能够对外提供各种模式的服务
DDD 对构建企业级利用开发平台和大型外围业务零碎的作用是相当大的,无论是在产品的稳定性、扩展性、可维护性、生命周期等方面都有良好的体现
参考
The Value at the Intersection of TDD, DDD, and BDD
Hybrid Development: The Value at the Intersection of TDD, DDD, and BDD
BDD vs TDD vs ATDD : Key Differences
Differences between TDD, ATDD and BDD