混合开发:TDD、DDD和BDD交集的值

目录

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) | "但是" |

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

编程是通过使用以上的关键字来描述应用的功能,使非开发人员能快速便捷的了解代码的功能。

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容