说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

基于Python的行为驱动开发实战

HTML文档下载 WORD文档下载 PDF文档下载
行为驱动开发(Behavior-Driven Development,BDD)是一种卓越的开发模式,可使整个团队保持专注,保持自信,保持活力,并使潜在错误降到最低。

【编者按】行为驱动开发(Behavior-Driven Development,BDD)是一种卓越的开发模式。能帮助开发者养成日清日结的好习惯,从而避免甚至杜绝“最后一分钟”的情况出现,因此对提高代码质量是大有裨益的。其与Gherkin语法相结合的测试结构及设计形式,使得对团队的全部成员包括非技术人员都具有极好的易读性。

所有代码都必须进行测试,这意味着上线时把系统瑕疵降到最低甚至为零。这需要与完整的测试套件相配,从整体把控软件行为,使得检测与维护都能有序进行。这就是BDD的魅力所在,难道不心动吗?

什么是BDD?

BDD的概念和理论源自TDD(测试驱动开发),类似于TDD的理论要点是在编码前先写好测试。不同点是除了使用单元测试进行细粒度化测试,还使用接受测试(acceptance tests)贯穿程序始末。接下来我们会结合Lettuce测试框架进行讲解。


BDD过程可简单概括为:

  • 编写一个缺陷接受测试
  • 编写一个缺陷单元测试
  • 使单元测试通过
  • 重构
  • 使接受测试通过

在每个功能里,如有需要重复上述步骤。

敏捷开发中的BDD

在敏捷开发中,BDD更是如鱼得水。

如果项目的新功能和新需求每隔一、两个星期就发生变更,那么该团队需要配合进行快节奏的测试和编码工作。Python中的接受和单元测试可以帮助实现该目标。

接受测试为人熟知的是使用了一个英文格式的“特性”描述文件,内容是含有的测试以及个别测试。这样做的好处是使整个项目团队都参与其中,除了开发者,还有管理者与商业分析者等不参与实际测试过程的非技术成员。

特性文件的编写遵循全员可读的规则,使技术和非技术成员都能清楚理解与接收。如果只包含单元测试,那么有可能会导致需求分析不全面或不能达成共识。接受测试的最大优点是适用性强,不论项目规模大小都能运用自如。

Gherkin语法

通常会使用Gherkin来编写接受测试,Gherkin来自Cucumber框架,由Ruby语言所编写。Gherkin语法十分简单,在Lettuce Python中主要使用以下8点来进行特性和测试的定义:

  • Given假设
  • When时间
  • Then下一步
  • And与
  • Feature特性:
  • Background背景:
  • Scenario Outline场合大纲:

安装

使用Python常用的pip install语句就可完成Lettuce包的安装:

$ pip install lettuce
$ lettuce /path/to/example.feature用于运行测试。可以每次只运行一个测试文件,或者是提交目录名来运行目录下的所有文件。

为了使测试的编写和使用更加容易,我们建议把nosetests也安装好:

$ pip install nose

特性文件

特性文件由英语写成,内容是测试所覆盖的程序范围。此外还包括测试的创建任务。换言之,你除了需要编写测试,还得规范自己就程序的方方面面编写出良好的文档。这样做的好处是使自己对代码上下都心中有数,明确下一步做什么。随着项目规模的扩大,文档的重要性会逐步显现;例如重新回顾某个功能或对某个调用API进行回溯等等。

接下来会结合TDD中的一个实例创建一个特性文件。该实例是一个由Python写成的简易计算器,同时会演示接受测试的基本写法。目录构成的建议是建立两个文件夹,一个是app,用于放置代码文件如calculator.py;另一个是tests,用于放置特性文件夹。
【聚焦API】教你如何选择最适合的NLP API服务商? 直接改应用!Flipboard开源iOS应用内调试工具FLEX 专访腾讯游戏运营总经理崔晓春:云时代游戏运营的变革与创新 嵌入式专家Bruce Douglass经验谈 门票销售过半 从2014微信开发者大会购票者特征说起 当来自金星的Devs碰上火星的Ops——共话应用扩展 移动平台市场占有率:Android首次赶超iOS 豌豆荚范怀宇 I/O大会总结:Android无处不在 轻博客始祖Tumblr:哈希以支撑2.3万Blog请求/秒 《近匠》FIR.im:简单易用的内测分发工具 传苹果公司将于9月9日召开新一代iPhone发布会 近百家微信开发商参与征集评选活动 TOP10正浮出水面 Java程序猿,手游引擎怎么选? MDCC 2014优秀移动团队免费展位火热申请中 【微信讲师面对面】你在企业服务号开发中遇到的坑和难点 五个解决方案让MongoDB拥有RDBMS的鲁棒性事务 浅谈Apache Spark的6个发光点 安卓 “假ID” 签名漏洞,竟然骗过了支付宝和360 从Social到Big Data,移动App蚂蜂窝转型推新品 《近匠》nice曹大鹏,从男装导购到潮人社区的心路历程 DevOps扼杀的不是开发者,而是开发生产力! 利用Docker构建开发环境 Netflix公布Cassandra新性能:基于AWS的百万次写入每秒 一周消息树:谷歌Android遭遇“颠覆”危机 微软发布新应用Snipp3t,iOS平台首发且无Windows Phone版 TOP10优秀微信开发商随后揭晓 2014微信开发者大会开幕在即 8月12日:PC鼻祖IBM 5150迎来33周年 平板创作3D展现:蒙特利尔大学发明Hyve-3D设计系统 Quick Charge技术解析:关于手机快速充电的那些事儿 性能分析十八招,你用哪一招? 流程在企业内的作用及成熟度 怎样让IIS服务器(2000 server)和域服务器的用同样的验证。 很多windows forms下面的程序都实现了XP或是VS.NET风格的菜单了,Web界面上能实现吗? 两周了,我就是不能给分!!请速解决 我要学flash啊~~,帮帮我啊~~~,那里有免费的flash下载,一定要告诉我啊!!!!!别忘了SN号啊!!!!!!不帮不行啊~~~~`,一定要帮帮我啊!! 保存COOKIE,定义了期限,然后期限内关闭IE,COOKIE仍然存在吗? 很多windows forms下面的程序都实现了XP或是VS.NET风格的菜单了,Web界面上能实现吗 如何打开dat为扩展名的数据库文件? 哪儿有IBM的visual Warehouse Manager? ~~~~~~~~~~~~帮你的程序制作奇形怪状的窗体,显现自己的风格~~~~~~~~~~~ emetrix 的软件注册号是怎样提交的?我想自己邮寄给用户好像不行的哦 烦恼的小问题 ★★★DCOM服务器的CallBack的技术怎样实现?★★★ 大虾们,救救我,十万火急!!!!!!!关于Delphi中FTP的问题 realaudio控件的问题!请高手指教 如何用table组件中canmodify属性 现在什么地方下mp3比较好 条形码阅读问题 有关鼠标单击和双击的问题,详情请进~~~~~~~~(看在偶出了一百分的份上,:-D) 很多windows forms下面的程序都实现了XP或是VS.NET风格的菜单了,Web界面上怎么实现 在实际项目中用InterBase数据库可行吗? 有关打印问题????????? win2000找98奇慢无比 template class的连接问题。请赐教 求拓扑排序的所有可能序列?50分求教 java程序员? 请问有没有介绍五子棋算法的好网站?我要做一个和机器下的程序!大家帮忙 请问在编程中的例程,行程和过程的定义是什么?以及他们的区别。 该怎么使用 action() 与 mouseDrag()?请看我的程序问题在哪? DELPHI6.0中的最小化事件是什么 marry____不只怎么办了 (★如何初始化控件CMSFexGrid★) 各位兄弟,不知哪里可以查到所有常量的值? 怎么把帽号赋给一个变量?thank 为什么WinXP激活后就不能重装? 困惑--判断颜色是否相同??? (急急急)寻找:win2000/xp/nt/9x 的可安装文件开发包(IFS Kit),送大分 如何在DB2(V5.2)下面实现表的ID自动增加功能? 帖子结不了,在送300分~~~~~~~~~~ 请问oracle那些版本以上叫8i,常用的是哪个版本,有WINDOWS下使用的吗? 我看过的TOOLBAR 都是横着的,可是我现在想做一个竖立这的TOOLBAR 我该怎么做啊!我翻遍了 CODEGURU 可是没有一个这样的例子! 谁有什么好例子 多谢了!! error C2065: 'end1' : undeclared identifier 我怎么用CreateDialog 建立一个对话框呢! 谁有代码!!多谢!CreateDialog(hInst,LPCTSTR"ID_",hWnd,DlgProc); 送小分:怎样在一个对话框程序中产生一个HWND视窗? 在Windows 2000 Professional 下可以装VS.net吗? 关于文件上传问题 关于微软自己的控件下载问题!! 关于打包的问题 急求答案--请教高手:有关IIS与TOMCAT...... 请问有哪为知道,weblogic提供petstore例子,什么地方有详细说明?? 怎么样利用CHtmlViw将参数用POST的方式提交给WEB服务器 不明白.. 请问遇到连接错误该如何解决? 作文 我心中的友谊开头 给我2篇作文吧!快!什么题目都可以! 感恩生命作文800字 同学与同学之间的友情作文开头? 上有短文,做2,3题 初一,我收获了友谊为题的作文,500字左右 我是90后征文,1000字以内, 2篇关于军训作文的题目. 关于回忆同学之间的友谊的作文 征文:我是90后—特区精神伴我成长~800-1000字 短文的1、2题 初一关于友谊的作文 初中交通安全征文,800字或1000字 怎样写好感恩的作文做问来的哦 有小故事就行了啊 小学同学之间友谊的作文 花与树有那些区别? 感恩的作文如何写好? 悟春.请把对春天的感受用一句话说出来.1:2:春天代表什么?3:春天象征着? 古诗阅读心得300字左右 花与树的完美 如何习作我要的是如何写做 怎样写好感恩作文 以难题为话题的作文如题 花与树的完美全文林清玄的 如何写好一篇感恩作文以“感恩父母,感恩家人”为话题作文,600字以上.希望有例文. 以障碍为话题的作文急用啊…… 雅思口语part2的范文Describe an occasion when a piece of equipment at home broke down or stopped working还有一次迟到的事件.其他话题的范文越多越好哈,我可以参考,thanks 运用走一步,再走一步写一句话,最好能写出你读过课文后的感受 以感恩为话题的作文 读《追求美好理想的心声》有何感受?孙玉石写的 珍爱生命,感恩生活的作文 ,求. 以感谢为话题的作文用描写形式来写, 谁能提供我雅思口语part2的范文 做人从感恩起步作文 作文:以“面对生活中的困难”为话题记叙文,800字, 书籍推荐(自己看过感觉很好的)最好是那么自己看过,自己觉得很好的,最好说下简介.类型 《童年》论文1000字 急 以“困难”为话题的作文200字至300字 求雅思口语 PART2范文 两篇 200字左右 1、describe a trip that didn't go as well as you planned(不如意的旅游)you should say:(1)where you were traveling to (2)what happed(3)how your travel plans were changed(4)and exp 童年趣事作文1000字好的再加5分 以“感恩”为话题的作文2009.10.10——2009.10.12. 求雅思口语PART2的高分范文或者模板~马上要考试了 自己练了下PART2 的内容 发现很难说到2分钟 所以求些范文或者模板 关于童年趣事的作文1000字至少要400字! 急急急急~~跪求一作文~~ 我骄傲,我是90后~~500字左右同上二天之内啊 雅思口语part2范文总共是两篇1.描述一个你住过的酒店从 where it is what it was like why you like it?这3方面2.描述你的家乡(最好是写上海的)咳咳,以前从来没接触过part2 老师说让我自己先练习= = 完全 新成就 新感受 作文篇 以感激为话题的作文 仿照下面这节诗的形式,表达你对“友情”或“理想”的感悟时间时间是夹卷着冰雪的风暴,会染白我们青春的额头;时间是一道湍急的江流,会淹没我们生命的行舟. 以 为题目的作文 谢 我急需一篇500百字左右{我是90后}的作文 仿写一首古诗,表达你对“友情”或“理想”的感悟时间时间是夹卷着冰雪的风暴,会染白我们青春的额头;时间是一道湍急的江流,会淹没我们生命的行舟. 《--的故事》为题目的作文400字 我是90后作文800字以我来写 作文:《我的童年》 或《 爸妈的童年》 微笑的故事为题目的作文 我是90后作文400字不要top864这种的!不像是小学生写的,超过400字! 作文:我和爸妈比童年我卜会写锕,哪个高手能让咱参考丅 以读书为题目的作文.写自己的一次读书经历为材料. 关于友谊的作文开头是关于《今年夏天》的、开头是关于友谊的. 作文:爸爸妈妈的童年 感恩生命的作文用第二人称
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn