BDD 与DSL 入门

正文:

  Behavior Driven Development行为驱动开发是一种敏捷软件开发的技术,它鼓励软件项目中的开发者、QA和非技术人员或商业参与者之间的协作。
在了解Behavior Driven Development之前,先介绍Test-Driven Development(TDD)测试驱动开发,它是一种测试先于编写代码的思想用于指导软件开发。测试驱动开发是敏捷开发中的一项核心实践和技术,也是一种设计方法论。TDD的原理是在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么产品代码。

TDD方法的一些特点:

  • 有利于更加专注软件设计;
  • 清晰地了解软件的需求;
  • 很好的诠释了代码即文档。

 之前一直对于测试都是一个笼统的认知,觉得测试仅仅是一种验证,类似于部分企业中一些比较省事的测试方法,通常在代码写好之后再实施测试工作,用于验证developer的代码是否符合需求。稍微了解TDD、BDD之后才发现,测试不仅仅是一种对于代码的验证,找出几个bug或者一些诸如压力测试、负载测试,更是一种约束,一种规范,是与项目需求息息相关,还需要沟通协调客户、开发人员以及QA,从而帮助更加高效的完成软件设计开发工作。

从图中可以发现,最下面的是单元测试白盒测试),主要用于测试开发人员编写的代码是否正确,这部分工作都是开发人员自己来做的。通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。再往上,就是BDD灰盒测试、黑盒测试),主要用于测试代码是否符合客户的需求,这里的BDD更加侧重于代码的功能逻辑

  从左边的范畴也可以看出,测试的范围也是逐层扩大,从单元测试的类到BDD里面的服务、控制器等,再到最上层的模拟实际操作场景的Selenium(Selenium也是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7、8、9)、Mozilla Firefox、Mozilla Suite等。)对于包括UI界面的测试。之前自己有做过这样的编码测试工作,通过写代码,可以打开IE、FF等浏览器,模拟用户点击、填写数据等操作,从而完成一整套的流程测试。整个测试从小到大,从函数、方法、类到功能模块乃至系统有着一系列严谨的体系。

 

再说BDD

  BDD是一种敏捷软件开发的技术。它对TDD的理念进行了扩展,在TDD中侧重点偏向开发,通过测试用例来规范约束开发者编写出质量更高、bug更少的代码。而BDD更加侧重设计,其要求在设计测试用例的时候对系统进行定义,倡导使用通用的语言将系统的行为描述出来,将系统设计和测试用例结合起来,从而以此为驱动进行开发工作。

  BDD的通用语言是一种近乎自然语言的描述软件的形式。传统的开发模式中,客户很难从技术层面理解问题,开发人员很难从业务需求考虑问题,基于这种通用语言形式可以尽可能的避免客户和开发者在沟通上的障碍,实现客户和开发者同时定义系统的需求。避免了因为理解需求不充分而带来的不必必要的工作量。

  BDD描述的行为就像一个个的故事(Story),系统业务专家、开发者、测试人员一起合作,分析软件的需求,然后将这些需求写成一个个的故事。开发者负责填充这些故事的内容,测试者负责检验这些故事的结果。通常,会使用一个故事的模板来对故事进行描述。

 

总结:

1. 客户不关心测试

  • 客户只关心软件是否满足需求.
  • Test 是验证行为(Verification).
    • 只有当软件存在后才能进行test.
  • BDD关注的是specification.
    • BDD 是Design 行为.
    • 由预期的behaviour 驱动, 并逐步地构建功能块.
  • 从Test 到 BDD:
    • 由**test-centric** 视角转变为**specification-centric** 视角.

2. 客户不希望编写specification

  • 客户不必编写自身问题的解决方案.
  • 认知差异(cognitive diversity)
    • 异类的(heterogeneous) 人员在一起工作.
    • 我们可以帮助客户完成specification.
    • 客户需要提供需要解决的问题的信息, 并提供具体事例来指导开发流程.

3. DSL: Domain Specific Language.

  • 在组内促进了重要问题的沟通(BA,QA,DEV).
  • 特征
    • 语言特征(language nature)
      • 具备连贯的表达能力.
    • 受限的表达力(limited expressiveness)
      • 只支持特定领域所需特征的最小集.
    • 专注于特定领域(domain focus)
      • 只有在一个明确的小领域下,才有意义.
  • 分类
    • 外部DSL.
      • 通常使用自定义语法(或XML等), 宿主应用会采用文本解析技术, 对外部DSL 脚本进行解析.
        • 例如: 正则表达式, SQL, Awk.
    • 内部DSL.
      • 通用语言的特定用法, 其脚本是具有特定风格的合法的程序.
      • 与外部DSL 的区别: 内部DSL 使用可执行的语言编写,然后在该语言中解析.
        • 例如: Lisp,Rails.
    • 语言工作台.
      • 专用的IDE, 用以定义和构建DSL.
  • 抽象: 将DSL看做一种处理抽象的方式.
    • 建立抽象的方式是程序库或框架. 通过命令/查询式API调用来操作框架.
      • DSL是程序的前端, 提供了不同于命令/查询式API风格的操作方式.
      • 程序库成为DSL的”语义模型”.
      • 通常以DSL加程序库的方式出现.
  • API和DSL的核心区别为: DSL 具有语言性.
  • DSL的问题
    • 语言噪音. 学习DSL 应该比学习底层模型的代价小.
    • 构建成本. 可维护性是重要的考量.
    • 语言集中营. 分离关注点来让DSL有清晰的受限范围; 自行构造应从外部获得的东西.
    • DSL是”不断演化,尚未完结”的事物.
      • 遇到不符合抽象的事物,应该修改抽象,让其更容易的接纳新事物.


作者:沪上最强亚巴顿
链接:http://www.jianshu.com/p/37946199ee02
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

转载于:https://www.cnblogs.com/hughes5135/p/7266142.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/487879.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CICC科普栏目|颠覆认知!看完这些图,你的世界观还好吗?

本文系网易新闻网易号“各有态度”特色内容部分资料来源于网络转自:超级数学建模接下来,仔细看下面的图与文字你会非常震撼……每天,地球上都有这么多的人在飞来飞去,就像下图中一样。▼图中圈圈里头的人口,比其他地区…

RISC-V会彻底改变计算吗?

来源:内容由半导体行业观察(ID:icbank)编译自「ACM」,谢谢。微处理器的开放指令集有望重塑计算,并引入新的、更强大的功能。现代计算机依靠许多元件来提供高速和高性能,但是很少有比一台精简的指…

干货|六维力和力矩传感器的技术与应用

来源:机器人大讲堂六维力和力矩传感器是一种提供三轴力和三轴力矩反馈的设备,并广泛应用在机器人控制、力学实验和科研等不同的场景中。不同于其他常见的测力仪器,六维力和力矩传感器可以测量完整的六自由度环境力数据,从而使其适…

Spark笔记——技术点汇总

Spark笔记——技术点汇总 目录 概况 手工搭建集群 引言 安装Scala 配置文件 启动与测试 应用部署 部署架构 应用程序部署 核心原理 RDD概念 RDD核心组成 RDD依赖关系 DAG图 RDD故障恢复机制 Standalone模式的Spark架构 YARN模式的Spark架构 应用程序资源构建…

人工智能正在推动芯片的复兴

来源丨Forbes作者丨Rob Toews编译丨科技行者半导体是数字时代的一项基础技术。美国硅谷的名字正是源自于此。过去半个世纪以来,计算技术的革命改变着社会的方方面面,而半导体技术正是这场革命的核心。自英特尔1971年推出全球第一个微处理器以来&#xff…

MEMS为何独领风骚?看完这篇秒懂!

显微镜下的MEMS结构(注意图片上的刻度,是微米哦)文章来源:硬件十万个为什么卡西欧早年就以电机马达、继电器等机电产品闻名。如今的卡西欧本身就是MEMS的制造商之一,用MEMS的思路解决传统机械手表遇到的问题是卡西欧的…

如何把我的Java程序变成exe文件?

JAVA是一种“跨平台”的语言,拥有“一次编写,处处运行”的特点,让它成为当今IT行业,必不可少的一门编程语言。每一个软件开发完成之后,应该大家都需要打包程序并发送给客户,常见的方式:java程序…

福布斯:混合现实未来的八大应用场景

来源:AR工业应用近日,福布斯发布了一篇关于混合现实未来的八个值得关注的领域和应用场景。文中提到:随着时间的推移,技术永远在不断进展,而未来技术中很可能是AR和VR的结合形式。有报告显示:2024年&#xf…

演化树,靠不住?挑战物种出现与灭绝速率的估算方法

来源:Nature自然科研原文作者:Mark Pagel以演化树形式绘制的图表能够显示物种之间的系统发育关系,这类图表被广泛用于估算新物种出现以及现存物种灭绝的速率,但一项新的研究对这种方法提出了质疑。科学家经常试图对生物的过去是什…

2020五大技术趋势一览!超自动化、人类增强技术、无人驾驶发展、机器视觉崛起、区块链实用化...

文章原载于 RichardLiu自动驾驶技术的发展近年来,自动驾驶技术一直在发展,特斯拉、英特尔等大公司在这一领域取得了长足的进展。虽然我们还没有达到L4级或L5级自动驾驶汽车的水平,但我们已经很接近了。为了解释每个级别的含义,下…

Facebook 开源聊天机器人Blender,经94 亿个参数强化训练,更具“人情味”

来源:AI前线作者 | Kyle Wiggers编译 | Sambodhi策划 & 编辑 | 刘燕不久前,Facebook 开源了号称是全球最强大的聊天机器人 Blender,它标志着 Facebook 在 AI 领域的新进展:新的聊天机器人不仅解决了此前聊天机器人的固有缺点&…

微服务go还是java,Java微服务 vs Go微服务,究竟谁更强!?

前言Java微服务能像Go微服务一样快吗?这是我最近一直在思索地一个问题。去年8月份的the Oracle Groundbreakers Tour 2020 LATAM大会上,Mark Nelson和Peter Nagy就对此做过一系列基础的的测试用以比较。接下来就给大家介绍下。在程序员圈子里&#xff0c…

Defi安全-Mono攻击事件分析--etherscan+phalcon

MonoX攻击事件相关信息 在Ethereum和Polygon网络都发生了,攻击手段相同,以Ethereum为例进行分析: 攻击者地址:MonoX Finance Exploiter | Address 0xecbe385f78041895c311070f344b55bfaa953258 | Etherscan 攻击合约&#xff1a…

特斯拉自动驾驶靠自研芯片,国产智能汽车怎么办?

文章来源:量子位从这个月开始,特斯拉终于跌破30万,进入补贴行列,与国产汽车展开正面竞争。在国产汽车和特斯拉之间该如何选择,除了续航里程外,最重要的可能就是智能驾驶系统了。智能驾驶系统该怎么比较&…

【星·企业】竞逐卫星互联网“新基建”,「九天微星」完成2.7亿元B 轮融资

图为九天微星一箭七星“瓢虫系列”主星示意图来源:中科创星据了解,「九天微星」将用此轮融资在河北唐山和四川宜宾分别建设互联网卫星平台、载荷自动化产线,同时强化宽带通信系统研发能力,加速地面终端产品投产。九天微星卫星工厂…

3D原子映射有助于研究生命的起源

Chi Ma/Royal Ontario Museum来源:IEEE电气电子工程师一种相对较新的研究原子的技术可能会对地球上生命的起源提供更多的线索。科学家利用三维原子图(特别是原子探针层析成像)发现,太阳系中最古老的分子流体本可以支持氨基酸的发展…

混合现实未来的八大应用场景

来源:诚迈科技近日,福布斯发布了一篇关于混合现实未来的八个值得关注的领域和应用场景。文中提到:随着时间的推移,技术永远在不断进展,而未来技术中很可能是AR和VR的结合形式。有报告显示:2024年&#xff0…

4个重要的量子理论实验综述

文章原载于:大数据01 量子理论量子理论是一个容易让人迷惑的理论,因此,如果我们想准确地了解其概况,就需要非常谨慎。与大多数自牛顿著作和其他17世纪晚期科学家著作问世以来出现的物理学成果一样,量子理论是一个以数学…

前沿|《细胞》:绕过眼睛植入幻觉,科学家成功在盲人脑海中呈现指定图像!...

该文章内容转载自学术头条对于全球 5000 多万盲人来说,重见光明是一个遥不可及的梦想。而为了与盲人朋友进行交互,我们发明了盲文,用各种凸起的字符集合来表达各种意思。但这种通过手指触摸来识别的方式太过低效。随着脑科学研究的深入&#…

mysql error1045 yes,MySQLERROR1045(28000)错误的解决办法

错误现象:ERROR 1045 (28000): Access denied for userODBClocalhost(using password: NO)ERROR 1045 (28000): Access denied for userODBClocalhost(using password: YES)windows下,以上两个错误的解决方法,本人亲测有效,现分享…