2018-10-12 16:35:31 -04:00
|
|
|
|
---
|
|
|
|
|
title: Behavior Driven Development
|
|
|
|
|
localeTitle: 行为驱动的发展
|
|
|
|
|
---
|
|
|
|
|
## 行为驱动的发展
|
|
|
|
|
|
|
|
|
|
行为驱动开发(BDD)是一个从中诞生的软件开发过程 。 行为驱动开发将TDD的一般技术和原则与域驱动设计和面向对象分析与设计的思想相结合,为软件开发和管理团队提供共享工具和共享流程,以协作进行软件开发。 它是一种软件开发方法,其中通过描述其行为应如何出现在外部观察者中来指定和设计应用程序。
|
|
|
|
|
|
|
|
|
|
虽然BDD主要是关于如何通过商业利益和技术洞察来管理软件开发的想法,但BDD的做法确实假设使用专门的软件工具来支持开发过程。
|
|
|
|
|
|
|
|
|
|
虽然这些工具通常专门用于BDD项目,但它们可以被视为支持测试驱动开发的工具的专用形式。这些工具用于为无处不在的语言添加自动化,这是BDD的核心主题。
|
|
|
|
|
|
|
|
|
|
BDD专注于:
|
|
|
|
|
|
|
|
|
|
* 从哪里开始
|
|
|
|
|
* 测试什么和不测试什么
|
|
|
|
|
* 一次性测试多少钱
|
|
|
|
|
* 怎么称呼测试
|
|
|
|
|
* 如何理解测试失败的原因
|
|
|
|
|
|
2019-01-04 01:50:14 +08:00
|
|
|
|
BDD的核心是重新思考这些问题自然产生的单元测试和验收测试方法。 例如,BDD建议单元测试名称是以条件动词开头的整个句子(例如英语中的“should”),并且应按业务价值的顺序编写。 验收测试应该使用用户故事的标准敏捷框架编写:“作为一个*角色*,我想要*功能*,以便*获益* ”。 接受标准应根据方案编写并作为类实现:给定*初始上下文* ,何时*发生事件* ,然后*确保一些结果* 。
|
2018-10-12 16:35:31 -04:00
|
|
|
|
|
|
|
|
|
例
|
|
|
|
|
```
|
2019-01-04 01:50:14 +08:00
|
|
|
|
故事:退货库存
|
2018-10-12 16:35:31 -04:00
|
|
|
|
|
2019-01-04 01:50:14 +08:00
|
|
|
|
身为商店的经营者,
|
|
|
|
|
为了及时追踪库存,
|
|
|
|
|
我希望商品在被退换后回到库存
|
2018-10-12 16:35:31 -04:00
|
|
|
|
|
2019-01-04 01:50:14 +08:00
|
|
|
|
情況 1: 退货商品必须回到库存
|
|
|
|
|
假设一位顾客从我这里购买了一件黑色外套,
|
|
|
|
|
而库存仍有三件黑色外套;
|
|
|
|
|
当他退货退款后,
|
|
|
|
|
我的库存中应有四件黑色外套
|
2018-10-12 16:35:31 -04:00
|
|
|
|
|
2019-01-04 01:50:14 +08:00
|
|
|
|
情況 2: 退换商品必须回到库存
|
|
|
|
|
假设顾客从我这里购买了一件蓝色衣物
|
|
|
|
|
而我库存有两件蓝色衣物和三件黑色衣物
|
|
|
|
|
当他退还蓝色而改买黑色衣物之后
|
|
|
|
|
我的库存中应该分别有三件蓝色衣物和两件黑色衣物
|
2018-10-12 16:35:31 -04:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
除此之外还有一些好处:
|
|
|
|
|
|
|
|
|
|
1. 所有开发工作都可以直接追溯到业务目标。
|
|
|
|
|
2. 软件开发满足用户需求。满意的用户=良好的业务。
|
|
|
|
|
3. 高效的优先级 - 首先提供关键业务功能。
|
|
|
|
|
4. 各方对项目有共同的理解,可以参与沟通。
|
|
|
|
|
5. 共享语言可确保每个人(技术与否)都能全面了解项目的进展。
|
|
|
|
|
6. 产生的软件设计与现有产品相匹配,并支持即将到来的业
|
|
|
|
|
7. 改进质量代码,降低维护成本,降低项目风险。
|
|
|
|
|
|
|
|
|
|
## 更多信息
|
|
|
|
|
|
|
|
|
|
* Wiki上的[BDD](https://en.wikipedia.org/wiki/Behavior-driven_development)
|
|
|
|
|
* 众所周知的行为驱动开发(BDD)框架是[Cucumber](https://cucumber.io/) 。 Cucumber支持许多编程语言,可以与许多框架集成;例如, [Ruby on Rails](http://rubyonrails.org/) , [Spring Framework](http://spring.io/)和[Selenium](http://www.seleniumhq.org/)
|
2019-01-04 01:50:14 +08:00
|
|
|
|
* https://inviqa.com/blog/bdd-guide
|