BDD是从TDD发展过来的,也属于DDD中一种描述业务的无处不在的统一语言,它的描述格式是:

As a [Role]

I want [Feature]

so that [benefit]

用中文的意思来理解,我认为是:作为某个角色,我需要某些功能或权利,这样能得到相应利益。 正如职责驱动开发中奖职责责任作为分析突破口一样,这里好像是从这个方面作为切入点分析的。

这样一种描述方式能够帮助我们从用户故事中不断寻找到那种传递业务价值核心的信息。因为大部分我们的客户总是这样问:嗯,我希望有这样的功能....你看这样做可以吗?( . . . I want [some feature] so that [I just do, ok?].)

从以上用户故事中,我们能发现如果软件能够正确实施用户这些行为,我们可以将它们作为系统的测试方式和验收标准。

那么如何能保证软件正确实施用户这些需求行为呢?对于简单容易明白的,我们能一下子能知道掌握,但是复杂一点的怎么办?我们可以使用一种模板来套用截取。

这个模板是:

Given some initial context (the givens),

When an event occurs,

then ensure some outcomes.

给出某个场景,但事件发生时,将有什么结果发生。

我们以取款机ATM来举例这个模板的使用,假设用户故事是这样:

As a customer,

I want to withdraw cash from an ATM,

so that I don’t have to wait in line at the bank.

作为一个客户,我想从ATM机中提取现金,这样(好处结果是),我不用在银行排队等候。

那么我们是如何知道我们已经成功传递了这个用户故事呢?对于这个故事的理解我们需要考虑几种场景情况:该客户账户可能是一个信用卡账户,有可能存在余款不够需要透支,而透支有存在透支额的问题,取款多少或多于或少于透支额等等多个可能情况。

我们使用given-when-then模板变成如下:

+Scenario场景 1: Account is in credit+ 账户是信用卡

Given the account is in credit 给出账户是信用卡

And the card is valid 并且卡是有效的

And the dispenser contains cash 并且ATM机有现金

When the customer requests cash 当客户请求取出现金时

Then ensure the account is debited 那么确保账户余额被扣除

And ensure cash is dispensed 并且确保现金被吐出

And ensure the card is returned 并且确保信用卡能退还。

+Scenario场景 2: Account is overdrawn past the overdraft limit+

账户已经透支。

Given the account is overdrawn 给出账户已经透支场景

And the card is valid 并且这个卡是有效的

When the customer requests cash 但客户请求取出现金时

Then ensure a rejection message is displayed 那么确保拒绝信息显示

And ensure cash is not dispensed 并且确保现金不会吐出

And ensure the card is returned 并且确保信用卡能退还。

对于上面两种不同场景,我们发现相同的点:事件 给出given 结果。

也就是说,given-when-then模板能够充分表达这几种不同场景发生的情况。

bdd行为驱动开发 java_行为驱动开发(BDD)如何与领域驱动设计(DDD)结合?相关推荐

  1. ios开发和安卓开发java_细说ios开发和Android开发有什么区别?谁更有优势?

    ios开发和安卓开发的市场分析: 首先iOS系统是应用在iPhone.iPad等高端设备上的,iOS市场占有的份额虽然不高,但是用户的消费能力比较强,生态圈较好有利于开发者直接获利.Android向大 ...

  2. 初探领域驱动设计(1)为复杂业务而生

    概述 领域驱动设计也就是3D(Domain-Driven Design)已经有了10年的历史,我相信很多人或多或少都听说过这个名词,但是有多少人真正懂得如何去运用它,或者把它运用好呢?于是有人说,DD ...

  3. 领域驱动设计,让程序员心中有码(七)

    领域驱动设计- 让程序员心中有码(七) -设计原则和设计模式,互联网开发者们共同的追求 前言 多年来,笔者一直从事传统软件企业的软件开发和项目管理工作.笔者发现在众多的传统软件企业中,评判优秀开发者的 ...

  4. 领域驱动设计,让程序员心中有码(五)

    1      从搬砖谈领域对象 有一个古老的故事,大概是这样的.作者问三个建筑工地上的工人他们在干什么?有一个没精打采的说,我在挖洞!而另一一个人却说,我在盖一座房子.还有一个人说,我在建立一座巨大的 ...

  5. 解读《领域驱动设计 软件核心复杂性应对之道》(一)

    最近学习了两遍<领域驱动设计 软件核心复杂性应对之道>.这本书是2000年出头由一个老外写的.然后经过了国人翻译. 2000年出头,技术架构还没有现在这么多好用的工具,也没有云原生的概念. ...

  6. 走向卓越,领域驱动设计的思维方式

    作者:程序之心丁仪 来源:https://chengxuzhixin.com/blog/post/ling_yu_qu_dong_she_ji_de_si_wei_fang_shi.html 软件系统 ...

  7. 领域驱动模型设计(二)

    目录 领域事件 领域.子域.核心域.通用域和支撑域 限界上下文 划分限界上下文 数据流转 上下文映射图 上下文集成 上一篇粗略地介绍了为什么需要使用领域驱动模型设计?下面我们将一一讲解下领域驱动设计中 ...

  8. ABP学习实践(十六)--领域驱动设计(DDD)回顾

    ABP框架并没有实现领域驱动设计(DDD)的所有思想,但是并不妨碍用领域驱动的思想去理解ABP库框架. 1.领域驱动设计(DDD)与微服务(MicroService)的关系? 领域驱动设计(DDD)是 ...

  9. 领域驱动设计在前端中的应用

    (文章末尾有抽奖送书活动) 垃圾桶现象 在开始本篇文章前,我给读者们分享一个很考验人性的有趣现象,在公司洗手间的洗漱台旁边,放置了一个垃圾桶,每次我洗完手,用纸巾擦干手后,将其扔进垃圾桶,但是偶尔扔不 ...

  10. 领域驱动实践总结(基本理论总结与分析V+架构分析与代码设计+具体应用设计分析)

    目录 领域驱动实践总结一:基本理论总结与分析 一.领域驱动设计两大设计:战略设计和战术设计 (一)战略设计 1.出发角度与目标 2.实现方式:事件风暴与模型确立(用例分析.场景分析和用户旅程分析) 3 ...

最新文章

  1. 怎么做 慢充 话费_警惕!冒充亲友骗充话费卷土重来
  2. 有时觉得自己拥有很多,有时又觉得一无所有
  3. 【Android 逆向】x86 汇编 ( push / pop 入栈 / 出栈 指令 | ret / retn 函数调用返回指令 | set 设置目标值指令 )
  4. python多进程关闭socket_用Python制作一个多进程UDP服务器,一个进程监听一个p
  5. SQL server 2000安装时提示我”以前的某个程序安装已在安装计算机上创建挂起的文件操作....”...
  6. windows为什么把linux打败了,快二十年了,人们为什么还是没有抛弃 Windows 转向 Linux?...
  7. Educational Codeforces Round 18
  8. js-array自增长方式
  9. 最经典沙盒游戏《我的世界》部分开源:微软出手,称人人可用
  10. Linux下安装Mysql详解
  11. MYSQL BENCHMARK()函数
  12. 设计一个一元多项式加法器_【每日上机】一元多项式求导
  13. 遗传算法python实例_Python遗传算法框架使用实例(一)使用Geatpy实现句子匹配
  14. 实对称矩阵特征值按大小排序
  15. 什么是dB?为什么要用dB?dB家族成员有哪些?
  16. uniCloud学习笔记---uniId
  17. C++学习(四八二)zlib的inflate
  18. 《海边的卡夫卡》阅读琐记
  19. 及时止损,及时止损,及时止损
  20. CUDA内存管理一文理清|参加CUDA线上训练营

热门文章

  1. .NET 将数据输出到WORD、EXCEL、TXT、HTM
  2. 批量(导入导出)迁移AD中的用户信息和密码到新环境中,同时保持用户在MOSS中的权限【addusers,ldifde,copypwd,UserInfo,tp_SystemID】...
  3. android+发邮件,Android发送邮件的方法实例详解
  4. html 屏蔽蓝色电话,html – 在Chrome扩展程序中停用文字字段蓝色突出显示?
  5. 2.11 总结-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授
  6. 3.3 神经网络的输出-深度学习-Stanford吴恩达教授
  7. 关于stm32 hal 库 iic 一直是 busy 问题
  8. 2、C语言面试笔试---运算符和表达式
  9. 【笔记】Hexo+Github博客网站搭建,初试环境搭建及Matery主题配置感受
  10. 从JavaScript函数重名看其初始化方式