写点什么

行为驱动的开发框架——NBehave

2007 年 7 月 17 日

作为测试驱动开发“里外翻新”的方法——行为驱动开发,它强调根据业务行为展开测试,而且测试要在功能实现之前,业务行为测试驱动开发工作。柏林的同行最近发布了 NBehave ,虽然框架很简单,但为实施.NET 敏捷开发提供了一个新的方法参考。

BDD( Behaviour Driven Developement )最重要的基础概念是业务化的“Story”,缘于一个很显而易见的原因——“软件开发是要服务于业务需要的”,但实际项目中往往因为各种外部原因打扰我们对这个问题的关注,项目开发的很多时间被“浪费”在怎样完成令项目经理满意的各种报表上,或者像有点“走火入魔”趋势的测试驱动一样,每天忙于为每个类建立 Test Class,并且为每个方法、属性建立 Test Method。但实际上业务目标往往是粗颗粒度的,BDD 一个很重要的目标就是直接达成“需求到实现”的过渡,而并非“需求——概要设计——详细设计——实现”这个中规中矩的过程。在项目规模不是很大、“Story”不是很复杂的情况下,借助各种快速开发工具(Visual Studio.NET/Eclipse),BDD 可以作为敏捷开发的一个很好的方法选择。

NBehave 有几个关键词:Scenario、Story、World,它们强调了在何种应用情境下,根据业务应用的特点,会有怎样的产出,就是“输入 -> 输出”。在其 ATM 的示例中很好地演示了这个过程:

  1. 定义了一个应用领域“账户管理”。
  2. 该领域会有一个事件——用户提取现金。
  3. 这里有个前提(Given),用户的账户信息信息可以从信用卡中获取。
  4. 然后发生了一个业务行为——用户提取现金(响应就会触发对应的事件)。
  5. 这是会出现两种情形(Scenarios)——超支和没有超支良种情况。
  6. 最后产生了一个业务结果,账号里的余额情况。

这个过程看上去很直接,而且基本上就是一个完整的需求点的映射,但没有提及任何类方法,更没有提到抽象后对象间的继承关系,完全就是业务化的,考虑范围也仅仅在一个非常集中的业务领域之内。使用后最大的感觉借用广告一句广告词就是“Just do it”,开发工作就是把上面的那个过程用代码填空,最后通过测试验证。

但是开发一个项目而言,除了业务部分外,还有很大的技术框架部分,NBehave 虽好,不过用它完成 DAAB 那样的技术框架就成问题了。从某种程度上看,NBehave 不强调抽象,它考虑的就是“Then and there”怎么做。所以,如果是技术层面的开发,请尽量集成现有框架;业务层面尤其是最外层的业务功能开发,不妨考虑一下 BDD;联系它们两者的中间部分,就用领域实体来完成,至于领域实体用 XSD 方式还是 ORM 方式,视情况和个人喜好而定。

2007 年 7 月 17 日 22:331160
用户头像

发布了 61 篇内容, 共 48533 次阅读, 收获喜欢 0 次。

关注

评论

发布
暂无评论
发现更多内容

架构师训练营 - 命题作业 第 12周

铁血杰克

极客大学

拥抱K8S系列-02-服务器部署应用和docker部署应用区别(nginx篇)

张无忌

nginx Docker 运维

【API进阶之路】破圈,用一个API代替10人内容团队

华为云开发者社区

内容 编辑 API 华为云 文本摘要

高效程序员的45个习惯:敏捷开发修炼之道(7)

石云升

敏捷开发 晨会

CPU中的程序是怎么运行起来的(预告篇)

良知犹存

cpu

LR.JAVA平台商业可视化大屏(BI)设计演示

力软.net/java开发平台

软件开发 BI 数据可视化 Java 分布式

数字货币交易所系统搭建源码|交易所开发公司

WX13823153201

数字货币交易所系统搭建

Mybatis进阶之基础CRUD

不才陈某

mybatis springboot

Docker 网络模式详解及容器间网络通信

哈喽沃德先生

Docker 容器 微服务 容器技术 容器化

分析HiveQL 生成的MapReduce执行程序

任小龙

usdt承兑支付系统开发|usdt跑分系统搭建

WX13823153201

USDT承兑支付系统开发

ArCall远比你想象的要强大的多

anyRTC开发者

WebRTC 在线教育 直播 RTC 安卓

手机没网了,却还能支付,这是什么原理?

楼下小黑哥

支付宝 微信支付 支付

java安全编码指南之:Mutability可变性

程序那些事

Java java安全编码 编码指南 可变性

面经手册 · 第9篇《队列是什么?什么是双端队列、延迟对列、阻塞队列,全是知识盲区!》

小傅哥

数据结构 小傅哥 队列 ArrayDeque

JDK8 Unsafe.java 源码

Darren

源码 并发 CAS 代码注释 unsafe

一条龙!CI / CD 、打造小团队前端工程化服务

久违

Vue 前端 jenkins React 前端工程化

Java中强、软、弱、虚四种引用详解

奈学教育

Java

拥抱K8S系列-01-CentOS7安装docker

张无忌

Docker centos 运维

Java创建对象的方法有哪些?

古月木易

Java

Java创建对象的方法有哪些?

奈学教育

Java

区块链钱包开发方案|多币种钱包搭建app

WX13823153201

区块链钱包开发

2019年我最喜欢的三款数码产品。

徐说科技

手机 苹果

vivo商城前端架构升级-总览篇

vivo互联网技术

node.js Vue 前端 架构设计

JVM中unsafe.cpp源码

Darren

c++ 源码 JVM unsafe

实战案例丨使用云连接CC和数据复制服务DRS实现跨区域RDS迁移和数据同步

华为云开发者社区

迁移 灾备 数据复制 云连接 数据同步

Java中强、软、弱、虚四种引用详解

古月木易

Java

usdt支付跑分系统开发|区块链跨境入金系统搭建

WX13823153201

架构设计复杂度来源

escray

学习 从零开始学架构 架构师预科班

【运维探讨】RPA落地实践,提升IT运维工作效能!

嘉为蓝鲸

RPA 运维自动化 标准化 系统运维 流程

为什么阿里巴巴的程序员成长速度这么快,看完他们的内部资料我明白了

Java迁哥

Java 阿里巴巴 程序员 成长 笔记

InfoQ 极客传媒开发者生态共创计划线上发布会

InfoQ 极客传媒开发者生态共创计划线上发布会

行为驱动的开发框架——NBehave-InfoQ