应用办公生活信息教育商业
投稿投诉
商业财经
汽车智能
教育国际
房产环球
信息数码
热点科技
生活手机
晨报新闻
办公软件
科学动态
应用生物
体育时事

敏捷开发开发实践测试驱动开发(TDD)

  测试驱动开发(TestDrivenDevelopment,简称TDD)是敏捷开发中的一项核心实践和技术,也是一种设计方法论。TDD的原理是在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么产品代码。TDD的基本思路就是通过测试来推动整个开发的进行,但测试驱动开发并不只是单纯的测试工作,而是把需求分析,设计,质量控制量化的过程。TDD首先考虑使用需求(对象、功能、过程、接口等),主要是编写测试用例框架对功能的过程和接口进行设计,而测试框架可以持续进行验证。本主要介绍TDD的基础和实践案例,以及很多团队无法使用TDD方式开发的一些思考。
  敏捷开发开发实践:测试驱动开发(TDD)
  什么是测试驱动开发(TDD)
  如何进行TDD?
  什么是ATDD?和TDD是什么关系?
  TDD实践案例
  第一个需求:计算两个int类型的加法功能
  第二个需求:如果两个int类型相加越界,则抛出异常而不是错误值
  进一步理解
  TDD核心思想是什么?
  为什么很多团队无法执行TDD?
  有些场景并不适合TDD方式
  TDD对团队本身有一定的要求
  TDD是否已死?
  AMDD:通过敏捷模型拓展TDD?
  迭代0:设想(Envisioning)
  迭代建模(Iterationmodeling)
  模型风暴(Modelstorming)
  测试驱动开发(TDD)
  回顾(Reviews)
  TDD研究文献推荐?
  参考文章一、如何进行TDD?
  在做TDD时,一个周期(红绿重构)如下:写一个测试(红)让测试通过(绿)优化设计(重构)
  然后重复这个周期。什么是ATDD?和TDD是什么关系?
  通常我们指的TDD是狭义的测试驱动开发,它是基于单元测试驱动开发,即UTDD(UnitTestDrivenDevelopment单元测试驱动开发)。由于单元测试的编写是由开发者来进行的,所以UTDD侧重从开发者测试的角度驱动开发。
  由于软件开发生命周期中角色并不仅仅是开发测试者,还需要考虑业务用户(在敏捷中角色是ProductOwner),所以我们将测试驱动放宽到PO的角色(满足PO可接受的测试驱动开发),这便是ATDD(AcceptanceTestDrivenDevelopment验收测试驱动开发),所以ATDD侧重从业务角度进行测试驱动开发。
  本质上ATDD还是基于TDD的基础上进行的,并且可以表述如下的4D模型
  Discuss:各个角色一起参与,保障对需求用例(UserStory)有一致的理解;避免开发完之后不满足客户需求的情况。Distill:需求的提取和拆分,也就是将需求分解成开发人员和测试人员都能理解,切认可的最小单元。为了需求的理解一致,引入了一套满足Gherkins语法的需求描述语言(Gherkin是一种语法,使用Given,when,then等关键来描述一个UserStory),通过这种满足Gherkins语法的GWT语句需求描述语言,可以让需求理解上更加一致。Develop:通过单元测试驱动开发,即上面周期(红绿重构)的循环。开发根据GWT需求描述语言进行开发设计,测试根据GWT需求描述语言来写验收测试用例。Demo:验证阶段,团队成员向产品负责人和客户演示完成的功能,验证的时候直接执行GWT需求,从而验证需求是否被实现。二、TDD实践案例
  通过一个实践案例向你展示如何进行单元测试驱动开发。pdai
  以写一个计算器应用为例,看如何用TDD思路去实现。准备开发环境,这里使用IDEA开发,目录结构如下
  第一个需求:计算两个int类型的加法功能
  写第一个测试用例(此时Calculator类是没有的)
  通过IDEA工具自动创建Calculator类
  创建类
  自动创建方法
  创建后的类和方法,完善该方法
  进行单元测试
  第二个需求:如果两个int类型相加越界,则抛出异常而不是错误值
  添加测试用例,包含对抛出异常的检查;跑单元测试,出现错误;
  重构原有add方法
  重新跑单元测试,通过
  进一步理解
  我们通过几个问题进一步理解TDD。TDD核心思想是什么?
  从开发的角度谈谈TDD的核心思想,可以总结为如下几个要点。测试先行
  更加关注测试的重要性,所以在开发功能代码之前,先编写单元测试用例代码。迭代开发
  敏捷的本质其实就是迭代,极限编程(XP)实践中的重要一环。迭代是期望逐步交付,减少一次性交付带来的弊端。持续重构
  每一次迭代,通常涉及到冗余,有冗余就需要重构,重构是满足当前的代码符合代码结构的设计。以避免后续迭代(一次性重构)对当前代码结构的冲击。为什么很多团队无法执行TDD?
  软件开发领域常讲没有银弹,同样TDD也不是银弹;很多开发团队无法执行TDD,我总结了几方面的内容:有些场景并不适合TDD方式
  总结而言,不符合迭代开发的或者无法进行对应的快速测试的场景不适合TDD方式开发。无法迭代开发的
  适合迭代的都是具体的需求实现,对于整体系统的设计是不适合迭代的,也不适合用用测试驱动开发。
  因为后续的重构会对之前的代码逻辑有冲击,迭代将带来的持续冲击式重构,这种常见下的测试驱动开发对开发者而言是一种灾难。
  比如复杂算法的实现,举个例子,你现在要开发一个傅里叶变化的模块,输入一些数据,得到傅里叶变换的结果。你花了一些时间,看懂了傅里叶变化的公式,对其实现也有把握,但是在写断言的时候就发现结果的验证太困难了,你可能需要借助matlab或者python来预先得到结果,然后复制结果到断言中。
  数据驱动的算法也无法用TDD来开发,例如机器学习、深度学习。因为其结果与数据相关,当数据发生变化时,算法行为也会发生变化,这就没法写测试用例了。无法快速测试的
  测试驱动开发的另外一个必要条件是每次的迭代是可以被快速验证的,如果无法快速测试,那么就不适合。存在交互边界的
  比如硬件的开发,因为存在物理的边界。TDD对团队本身有一定的要求团队对质量管理的要求和认同
  测试驱动开发只是一种敏捷开发方式,它是将测试提升到与开发同等重要的位置,以保证在敏捷的迭代开发中保持软件的质量。有些团队没有完善的软件开发质量体系和资源,没有将质量规范融入到整个开发流程中(也没有专人或团队来约束规范),甚至团队生存都存在问题,追求短平快更不会关注质量(pdai:想起一句经典台词:我都混到吃泡面了,我还在乎健康?);在这些情况下团队对质量管理缺乏认同,对开发测试的工作就变成了负担。团队对需求和任务拆分的能力
  测试驱动开发有一个很重要的前提条件是有相对可迭代开发的拆分需求,所以团队对需求的理解以及任务的开发能力极为重要,拆分任务时需要对任务的粒度和可持续性有较高要求;频繁需求的变更和拆分不到位,将让驱动测试开发陷入疲于奔命。团队对重构的理解和能力
  重构对于测试驱动开发是极为重要的,正如上面的例子看到的,在后续的用例需求开发时需要对前面的开发代码进行必要的重构,以满足当前的代码是满足相对最佳实践的;此时你可能会发现,增量写的用例需要对前面写代码大幅度的重构,而这些代码可能不是你写的,所以在团队没有对重构有统一的理解或者缺乏对重构的把控时,测试驱动开发可能会成为一种负担。团队对协作的理解和能力
  一个团队中是有很多角色的(产品负责人,PM,架构,开发,测试等),测试驱动开发不仅仅是开发者要做的事情,而需要其它角色的协作。举个简单的例子,如果在必要时候后续开发需要对之前代码进行重构,但是产品负责人或者PM无法认同,认为只是一个平行功能的开发,没有给到开发者足够的重构时间,这时便会错失好的重构时间点,对后续整体质量将埋下一个坑,而且这种技术债务有一天是要还的。TDD是否已死?
  在行业里最有名的是KentBeck、MartinFowler、David关于IsTDDDead在新窗口打开?的辩论。
  pdai在这里添加这节内容是期望网站的读者明白:无论采用何种方式开发,都是需要平衡项目,资源,团队等多种因素的;TDD过不过时都是主观的,但是它提供了一种敏捷开发的思路;作为开发而言,不断思考,不断实现自我的迭代永远不会过时。三、AMDD:通过敏捷模型拓展TDD?
  AgileModelDrivenDevelopment(AMDD)即敏捷模型驱动开发,TDD非常擅长详细的规范和验证,但是它不适合很大的问题,如总体设计、系统的使用或UI。AMDD解决了TDD没有解决的敏捷扩展问题,因此,AMDD用于更大的问题。如下内容主要翻译自ScalingTDDviaAgileModelDrivenDevelopment(AMDD)
  在上图中,每个框代表一个开发活动。
  设想(Envisioning)是预测想象测试的TDD过程之一,将在项目的第一周进行。设想(Envisioning)的主要目标是确定系统范围和系统架构。高级需求和架构建模是为成功的设想(Envisioning)而进行的。这是一个过程,没有对软件系统进行详细说明,而是探索软件系统的需求,确定了项目的总体战略。迭代0:设想(Envisioning)
  有两个主要的部分:最初需求的设想(Initialrequirementsenvisioning):确定系统的高级需求和范围可能需要几天时间。主要重点是探索使用模型、初始域模型和用户界面模型(UI)。最初架构的设想(InitialArchitecturalenvisioning):识别系统的体系结构也需要几天时间。它允许为项目设置技术方向。主要重点是探索技术图、用户界面(UI)流、领域模型和变更案例。迭代建模(Iterationmodeling)
  在这里,团队必须计划每个迭代将要完成的工作。敏捷过程用于每次迭代,即在每次迭代期间,将优先添加新的工作项。首先,将考虑更优先的工作。添加的工作项可以随时重新排序或从项堆栈中删除。团队讨论如何实现每个需求。建模用于此目的。建模分析和设计是针对将要为该迭代实现的每个需求进行的。模型风暴(Modelstorming)
  这也称为即时建模。在这里,建模课程涉及一个由23名成员组成的团队,他们在纸上或白板上讨论问题。一名团队成员将要求另一名成员与他们一起建模。本次建模课程大约需要5到10分钟。团队成员聚集在一起共享白板纸张。他们探索问题,直到找到问题的主要原因。及时,如果一个团队成员确定了他她想要解决的问题,那么他她将迅速得到其他团队成员的帮助。其他小组成员随后探讨这个问题,然后每个人都像以前一样继续。它也被称为独立建模或客户QA会议。测试驱动开发(TDD)它促进了对应用程序代码和详细规范的确认性测试。验收测试(详细需求)和开发人员测试(单元测试)都是TDD的输入。TDD使代码更简单和清晰。它允许开发人员维护较少的文档。回顾(Reviews)这是可选的。它包括代码检查和模型审查。这可以为每个迭代或整个项目完成。这是为项目提供反馈的好选择。四、TDD研究文献推荐?
  有关TDD的有效性和成本已经有很多研究了。下表是个总结
  作者年份
  重要发现
  Siniaalto,2017
  TDD不总是能提高开发效率,特别是在对TDD不熟悉的情况下。但是TDD所生产的代码具有更高的测试覆盖率。
  Neil,2017
  github上使用TDD开发的Java项目非常少,将TDD开发的项目与其他项目进行对比,并没有发现TDD开发的项目有明显的优势。
  Wilson,2016
  TDD能够生产更好质量的代码,但是开发效率不如TLD(开发完再测试)
  Davide,2016
  TDD声称的好处可能不是由于其独特的测试先行产生的。但类似于TDD所鼓励的细粒度稳步的增量式开发,可以改善开发质量
  Nagappan,2008
  TDD消除缺陷是4090,其成本在开发初期多出1535
  Sanchez,J。C,2007
  TDD产生的缺陷密度低于行业标准。TDD或许能减少代码复杂度随着软件年限而增长的程度
  Bhat,2006
  TDD的使用可以让代码质量提升,初始成本增加至少15
  Siniaalto,2006
  有些情况,TDD会大幅度提升效率,大概在213的情况下回减低生产效率(但会提升代码质量)
  George,2003
  TDD开发的代码质量更好(可以多通过18或者更多的功能测试),且多用16的开发时间。事后测试的代码测试不够充分参考文章
  https:kentcdodds。comblogwhenifollowtdd
  https:blog。csdn。netweiwei9363articledetails117805722
  https:www。guru99。comtestdrivendevelopment。html
  https:github。comhxfirefoxblogblobmasterTDDTDDE99A8FE683B3E5BD95。md
  http:agiledon。github。ioblog20131225thoughtaboutapplyingtdd
  https:www。cxybb。comarticlezanfeng119480625
  https:martinfowler。comarticlesistdddead
  https:www。jianshu。compb794d5491dd9
  原文链接:https:pdai。techmddevspecdevagiledevpraticetdd。html
  你学废了吗
  准备面试?工作遇到问题?想要积累知识?
  快搜索:7TCoding
  往期内容回顾:
  1、【干货】不可不知的需求管理过程及相关模版
  2、目标管理体系:OKR
  3、【干货】不一样的团队管理框架:初识
  4、华强版:我问你,你这接口保熟吗?
  5、能量加油站:Git操作,新手学习老手温故【附脑图】
  6、云原生:Docker实战之Docker安装(最详细)
  7、7TCoding年轻人应该知道的小秘密
  8、两步走战略,教你如何创办一个好的企业
  9、不可不知:商业运转规律的各类模型
  10、如何在企业中从01建立PMO(项目管理办公室)
  11、【干货】Scrum敏捷项目管理,看这一篇就足够了!
  12、从数据思维到业务实战的模型框架
  13、资深架构师如何确保高性能的架构
  14、【干货】财务管理流程【研发、产品、项目建议都要了解】
  15、PMO应该具备的一些能力(浅聊)
  16、PM、程序员的撸猫(国产猫粮)指南
  17、最全、最美、最精致的刘润年度演讲2022进化的力量(点击图片查看高清内容哦)
  18、作为产品总监PM你合格吗?不懂就来看,勇敢面对元无知
  19、PM:市场需求文档(MRD)
  20、monorepo让项目合作开放、透明,一篇扫盲
  21、互联网行业常见的9大典型故障(现象、原因及经验教训)
  22、【产品总监篇】年终总结这么写!
  23、【通用篇】年终总结这么写!
  24、【技术总监篇】年终总结这么写!
  25、06:年轻人应该知道的小秘密学会简化问题的方法
  26、TOGAF架构框架基础的认知
  27、【干货】市场管理流程【建议市场、研发、产品、项目都要了解】
  28、【干货】这样的竞品分析实战案例你见过吗?
  29、架构师的艺术及能力
  30、企业绩效管理(高层中层基层)
  31、谷歌工作十年中总结出的工程师十项必备软技能
  32、高级项目管理师的十八般武艺(必备技能)
  33、带你认识敏捷项目管理中不一样的用户故事
  34、2023年五大趋势:直面混乱,掌控变局
  35、知识库系列:Zookeeper和Mybatis(持续更新)
  36、知识库系列:Dubbo(附脑图持续更新)
  37、互联网知识库合集【详见脑图】
  38、98家央企及下属409家上市企业全名单(2023版)建议收藏!
  39、2022年全球程序员收入报告出炉:国内程序员人均56w年薪,谁平均了我?我拖后腿了
  40、必备的100个思维模型:13个创新模型
  更多精彩,请加入我们哦!

U牌植物油对肌肤的作用是什么保护肌肤免受自由基侵害植物油脂大多有着强力的抗氧化效果,每天早晨将护肤油涂抹在清洁过的皮肤上,稍加按摩,过几分钟后在涂抹日常使用的防护产品或底妆。随着年龄的增长,皱……A股快递企业2022年度业绩预告出炉,顺丰净利超60亿德邦增【大河财立方记者丁洋涛】截至1月30日晚,顺丰控股、圆通速递、申通快递、德邦股份、韵达股份等5家A股上市快递公司相继披露2022年业绩预告。数据显示,2022年5家公司营收普涨……(图表)经济春节假期全国揽投快递包裹量超7亿件较2019年同新华社图表,北京,2023年1月28日(图表)春节假期全国揽投快递包裹量超7亿件较2019年同期大幅增长国家邮政局监测数据显示,1月21日至27日春节假期期间,全国……口碑爆了!小黄台又出高分新作!提起游戏改编的经典影视作品你能想到什么?《生化危机》《极品飞车》《寂静岭》,还是《古墓丽影》《拳皇》《刺客信条》?《生化危机:终章》最近,一部由HBO出品,根……新的一年,说说心里话(二)写作的空档,读完了余秋雨的《借我一生》,猛然有新的领悟及与感知,继续来说说过去的一年。上文主要讲述了,沉寂一年的心态,其实这就是那个时代的烙印哈,摘取一端借我一生……铃木第一辆纯电动汽车EVX概念车印度首发,搭载比亚迪刀片电池随着电气化在全球范围内展开,铃木也在积极推进电动化事业。而在近日,在印度德里车展上,铃木第一辆纯电动汽车EVX概念车亮相。值得一提的是,新车的量产版本将于2025年开始生产。而……牛奶的好处虽多,却不适合这6类人,看看你在其中吗?生活中有很多人都有喝牛奶的习惯,人们习惯性的在早上喝一杯牛奶,既能补充营养还能提高免疫功能。牛奶的好处有很多,这也是大家常喝牛奶的原因。那么牛奶的好处具体有哪些呢?不妨让我们一……我们拼搏的十年2022生机大会我们的人生那十年经历了波澜壮阔,从失业到自谋职业,从一无所有到衣食无忧,经历了人生所有的坎坷,和看透了人性的世态炎凉,人情似纸张张薄,世事如棋局局新,不信……不再和PS5刚正面的Xbox,迎来了20周岁生日下半年发售的游戏确实不少,但如果你现在去差评的办公室问一圈最近有什么好玩的游戏,那么得到的回答多半是《极限竞速:地平线5》。这款游戏自11月4日发售之后,玩家数量就一直在……兑现天赋亦或者就此陨落(锡安威廉姆斯)2019年选秀大会前世界公认的状元秀锡安,力压莫兰特等天赋球员,大学时期的比赛便吸引了许多的NBA球员去观看,大学时期他的比赛甚至收视率比NBA比赛收视率还高,拥有巨大的体重的……关键比赛失误命中率仅33,35岁年薪2260万,康利恐被交易爵士再次止步首轮季后赛,被淘汰后爵士管理层表示将专心围绕米切尔建队,保证未来两三年处于夺冠球队行列,也是为了能够留下米切尔,因为米切尔一度被传出想要离队的流言,与另外一位主力戈……云顶之弈炼金狼归来,超高攻速强势冷门,无脑吃分阵容决定下限,装备决定上限,运营才是王道!弈士们好,我是摩昂。热补丁更新,版本环境变化较大,今天摩昂给大家带来的阵容是现在相对冷门且吃分与吃鸡强度非常高的阵容炼金挑战狼。……
豆浆VS牛奶,谁才是真正的补钙高手?春天补钙,一定避开这4个有人说,春天不补钙,错过一整年。春季因为阳光好,户外活动多,食材正当时,被认为是长高的黄金期,也常常被认为是补钙的黄金时期。01hr春季补钙事半功倍1hr时令蔬果多……快看!上海地铁高铁有萌萌的机器人出没!它们都在做什么?地铁的巡检机器人,铁路部门推出的消毒机器人和高铁商品配送机器人。。。。。。近年来,在我们身边,有不少身处幕后的智能机器人用他们各自具备的硬核科技默默地保障市民的出行,也让不少工……山东欧米奇配方分享会膨胀的空心糖饼,酥脆香甜!空心糖饼原创作者霍小小材料准备:食材用料中筋面粉300g温水160g食盐2g玉米油15g馅料:……美丽守护想打肉毒素?这些事情首先要知道哦!皱皱:哎!才30岁,眼角就开始有皱纹了,真烦心!纹纹:你才几岁,到我这40岁,额头纹也来了,更显老,真想把这些道道熨平!皱皱:听说很多明星都在用一种叫肉毒素的东西打……意康德道地食材传道之新会陈皮药材好,药才好。意康德只做道地的滋补食材。1陈皮的历史渊源1、最早记载:《神农本草经》是对陈皮(橘柚)最早记载的医书:橘柚,味辛、温。主胸中瘕热逆……医生建议这3种伤肝的蔬菜,肝不好的人最好少吃,或会损伤肝脏肝脏作为我们人体内最重要的解毒排毒的器官,被称为是人体清洁工,若是我们的肝脏受到了损伤,我们人体的健康也将受到极大的影响。尤其是近些年来,生活中越来越多的人,因为长期养成的一些……在银河系中心,科学家发现了神秘无线电信号,可能来自未知天体银河系是一个直径约20万光年的棒旋星系,我们所在的太阳系则位于银河系的一个旋臂猎户臂之上,距离银心2。6万光年。由于银河系中心有着一颗质量非常巨大的黑洞,距离银心越近的区域,恒……S12全球总决赛举办地公布将重回北美,决赛定在金州勇士队主场11月22日凌晨,拳头就2021年全球总决赛取得的战果以及2022年全球总决赛展开记者会,在这次记者会上,拳头的全球电竞相关负责人也透露了2022年世界赛举办地的一些信息,在连……人类是如何一步步了解原子的?自从原子被发现以来,几个世纪里,科学家和哲学家都对它进行了深入的研究。随着科技的进步,人类的观测能力变得越来越强,越来越微小的东西被看到,人们开始意识到还有很多东西要学习。……戚薇怀二胎后罕晒全身照,穿粉色蓬蓬裙不显孕肚,衣品却被吐槽提到戚薇的名字,想必大家并不陌生吧,与李承铉结婚之后,两人拥有一个女儿,并且目前戚薇已怀二胎,接下来将迎接一家4口的温馨场面。即使怀孕的戚薇在工作上也毫不松懈,经常在社交……愿你这一生既有随处可栖的江湖,也有追风逐梦的骁勇,开工大吉。开工大吉愿你以渺小启程,以伟大结束开工大吉!奋斗的新一年开始啦!你今天的努力,是幸运的伏笔,当下的付出,是明日的花开。即使现在还看不到成果,请不要着急……盘点中国56个绝美之地,每一处都是独一无二的存在,你去过几个在每个人的年岁里,都曾有过一段关于旅行的憧憬,一段说走就走的旅行。可是在现实里,因为种种的原因,这个美好的希冀变,成了每个午夜梦回的美好梦想。如果你还没有踏上那条梦寐的旅途,今……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网