范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

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

  测试驱动开发(Test Driven Development, 简称TDD)是敏捷开发中的一项核心实践和技术,也是一种设计方法论。TDD的原理是在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么产品代码。TDD的基本思路就是通过测试来推动整个开发的进行,但测试驱动开发并不只是单纯的测试工作,而是把需求分析,设计,质量控制量化的过程。TDD首先考虑使用需求(对象、功能、过程、接口等),主要是编写测试用例框架对功能的过程和接口进行设计,而测试框架可以持续进行验证。本主要介绍TDD的基础和实践案例,以及很多团队无法使用TDD方式开发的一些思考。
  * 敏捷开发 - 开发实践:测试驱动开发(TDD)
  * 什么是测试驱动开发(TDD)
  * 如何进行TDD?
  * 什么是ATDD?和TDD是什么关系?
  * TDD实践案例
  * 第一个需求:计算两个int类型的加法功能
  * 第二个需求:如果两个int类型相加越界,则抛出异常而不是错误值
  * 进一步理解
  * TDD核心思想是什么?
  * 为什么很多团队无法执行TDD?
  * 有些场景并不适合TDD方式
  * TDD对团队本身有一定的要求
  * TDD是否已死?
  * AMDD:通过敏捷模型拓展TDD?
  * 迭代0:设想(Envisioning)
  * 迭代建模(Iteration modeling)
  * 模型风暴(Model storming)
  * 测试驱动开发(TDD)
  * 回顾(Reviews)
  * TDD研究文献推荐?
  * 参考文章  一、如何进行TDD?
  在做TDD时,一个周期(红-绿-重构)如下:  写一个测试(红)  让测试通过(绿)  优化设计(重构)
  然后重复这个周期。  什么是ATDD?和TDD是什么关系?
  通常我们指的TDD是狭义的测试驱动开发,它是基于单元测试驱动开发,即UTDD(Unit Test Driven Development 单元测试驱动开发)。由于单元测试的编写是由开发者来进行的,所以 UTDD侧重从开发者测试的角度驱动开发 。
  由于软件开发生命周期中角色并不仅仅是开发测试者,还需要考虑业务用户(在敏捷中角色是Product Owner),所以我们将测试驱动放宽到PO的角色(满足PO可接受的测试驱动开发),这便是ATDD(Acceptance Test Driven Development 验收测试驱动开发),  所以ATDD侧重从业务角度进行测试驱动开发 。
  本质上 ATDD还是基于TDD的基础上进行的 ,并且可以表述如下的4D模型
  Discuss : 各个角色一起参与,保障对需求用例(User Story)有一致的理解;避免开发完之后不满足客户需求的情况。  Distill : 需求的提取和拆分,也就是将需求分解成开发人员和测试人员都能理解,切认可的最小单元。  为了需求的理解一致,引入了一套满足Gherkins语法的需求描述语言( Gherkin是一种语法,使用 Given,when,then等关键来描述一个User Story ),通过这种满足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是否已死?
  在行业里最有名的是 Kent Beck、Martin Fowler、David关于Is TDD Dead在新窗口打开?的辩论。
  pdai在这里添加这节内容是期望网站的读者明白:  无论采用何种方式开发,都是需要平衡项目,资源,团队等多种因素的;  TDD过不过时都是主观的,但是它提供了一种敏捷开发的思路;作为开发而言,不断思考,不断实现自我的迭代永远不会过时。  三、AMDD:通过敏捷模型拓展TDD?
  Agile Model Driven Development (AMDD)即敏捷模型驱动开发,TDD非常擅长详细的规范和验证,但是它不适合很大的问题,如总体设计、系统的使用或UI。AMDD解决了TDD没有解决的敏捷扩展问题, 因此,AMDD用于更大的问题。如下内容主要翻译自Scaling TDD via Agile Model Driven Development (AMDD)
  在上图中,每个框代表一个开发活动。
  设想(Envisioning)是预测/想象测试的TDD过程之一,将在项目的第一周进行。设想(Envisioning)的主要目标是确定系统范围和系统架构。高级需求和架构建模是为成功的设想(Envisioning)而进行的。这是一个过程,没有对软件/系统进行详细说明,而是探索软件/系统的需求,确定了项目的总体战略。  迭代0:设想(Envisioning)
  有两个主要的部分:  最初需求的设想(Initial requirements envisioning) :确定系统的高级需求和范围可能需要几天时间。主要重点是探索使用模型、初始域模型和用户界面模型(UI)。  最初架构的设想(Initial Architectural envisioning) :识别系统的体系结构也需要几天时间。它允许为项目设置技术方向。主要重点是探索技术图、用户界面(UI)流、领域模型和变更案例。  迭代建模(Iteration modeling)
  在这里,团队必须计划每个迭代将要完成的工作。  敏捷过程用于每次迭代,即在每次迭代期间,将优先添加新的工作项。  首先,将考虑更优先的工作。添加的工作项可以随时重新排序或从项堆栈中删除。  团队讨论如何实现每个需求。建模用于此目的。  建模分析和设计是针对将要为该迭代实现的每个需求进行的。  模型风暴(Model storming)
  这也称为即时建模。  在这里,建模课程涉及一个由2/3名成员组成的团队,他们在纸上或白板上讨论问题。  一名团队成员将要求另一名成员与他们一起建模。本次建模课程大约需要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消除缺陷是40% ~ 90%,其成本在开发初期多出15% ~ 35%
  Sanchez,J.C,2007
  TDD产生的缺陷密度低于行业标准。TDD或许能减少代码复杂度随着软件年限而增长的程度
  Bhat,2006
  TDD的使用可以让代码质量提升,初始成本增加至少15%
  Siniaalto,2006
  有些情况,TDD会大幅度提升效率,大概在2/13的情况下回减低生产效率(但会提升代码质量)
  George,2003
  TDD开发的代码质量更好(可以多通过18%或者更多的功能测试),且多用16%的开发时间。事后测试的代码测试不够充分   #参考文章
  https://kentcdodds.com/blog/when-i-follow-tdd
  https://blog.csdn.net/weiwei9363/article/details/117805722
  https://www.guru99.com/test-driven-development.html
  https://github.com/hxfirefox/blog/blob/master/TDD/TDD%E9%9A%8F%E6%83%B3%E5%BD%95.md
  http://agiledon.github.io/blog/2013/12/25/thought-about-applying-tdd/
  https://www.cxybb.com/article/zanfeng/119480625
  https://martinfowler.com/articles/is-tdd-dead/
  https://www.jianshu.com/p/b794d5491dd9
  原文链接:https://pdai.tech/md/dev-spec/dev-agile/dev-pratice-tdd.html
  你学废了吗
  准备面试?工作遇到问题?想要积累知识?
  快搜索:7TCoding
  往期内容回顾:
  1、【干货】不可不知的需求管理过程及相关模版
  2、目标管理体系:OKR
  3、【干货】不一样的团队管理框架:初识
  4、华强版:我问你,你这接口保"熟"吗?
  5、能量加油站:Git 操作,新手学习老手温故【附脑图】
  6、云原生:Docker实战之Docker安装(最详细)
  7、7TCoding年轻人应该知道的小秘密
  8、两步走战略,教你如何创办一个好的企业
  9、不可不知:商业运转规律的各类模型
  10、如何在企业中从0-1建立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个创新模型
  更多精彩,请加入我们哦!

明年国庆9天乐,希望一切回归正常,好好旅个游这国庆7天假期才完,大家又望着明年的国庆假期了。今年国庆能出门旅行的人应该不多,倡导就地过节,而且大多数人因为担心疫情的原因,选择家里蹲7天,然后接着公司蹲7天。家里蹲状态只想说国收入1。5亿元,六合国庆假期休闲农业大火来源交汇点新闻客户端交汇点讯艾津稻园里闻稻香识稻穗,研学营里学新知,金牛湖横梁的葡萄猕猴桃园里,漫山遍野的游客在藤架下欢乐自拍今年国庆节期间,在做好疫情防控工作的前提下,六合区立足高科技苹果AR眼镜你期待苹果的AR眼镜吗?它不仅能让你完全沉浸在虚拟内容中,还能将虚拟元素添加到现实世界中苹果ARVR设备,或在未来几个月首次亮相。继年推出苹果智能手表(AppleWatch)之后,苹果公司的下一代最重要单携手FIFA呈现体育盛宴!vivo成为2022世界杯全球官方手机vivo已经正式官宣成为2022FIFA卡塔尔世界杯全球官方手机。此前,vivo手机曾多次亮相于世界足球舞台,而这一次,vivo将再度借助领先科技,助力世界杯赛事的筹备工作。据官方俗话一鸽胜九鸡,常吃鸽子肉有什么好处?炖汤时,记住2不放鸽肉不但营养丰富,且还有一定的保健功效,能防治多种疾病。俗话常说一鸽胜九鸡,主要因为鸽肉中含有的钙铁铜等元素及维生素AB族维生素维E等比鸡肉的含量高。家常吃鸽子,除了卤乳鸽之外,最十四五工业互联网政策解读输变电行业如何实现数字化转型随着5G工业互联网的深入推进,数字化转型已经不再是一个转或不转的选择题,而是时代发展的必然趋势。尤其在湖南省工业互联网十四五发展规划(以下简称规划)中数字化转型曾被多次提到,其重要重要提醒最新拉萨离藏政策通道注意事项一张图看懂出藏人员出行指南划重点首先要提前7天向所在地社区(村)提出申请,同步开展健康监测,如实填写健康监测表,由街道(乡镇)汇总提出初步意见,县(区)防疫办审核批准并出具证明,各反观全球商业,为何只有中国电商能碾压实体零售?出品联商专栏撰文联商特约专栏作者黄山岩松一我们面临的现状1电商一家独大,而且占据着绝对的垄断优势2021年中国的社会消费品零售总额是44万亿,电商企业的市场份额是25,大约是11万顶级品牌推出中国版联名款,全球限量21枚,五角星让人倍感亲切顶级腕表品牌伯爵Piaget和著名拍卖行菲利普斯Phillips共同推出了一款限量21枚的腕表,将在2022年11月28日发售其中的第00号。这款特别的腕表之所以被称之为中国限量版外媒热议货币政策专家获诺奖有些出乎意料据德国之声电台网站10月10日报道,位于斯德哥尔摩的瑞典皇家科学院周一宣布本伯南克道格拉斯戴蒙德和菲利普迪布维格为今年诺贝尔经济学奖得主。该学院表示,这个来自美国的三人组因对银行和比亚迪唐DM车主的情怀下一辆车,我还选比亚迪自2003年进入汽车市场开始,比亚迪就开始了电动汽车及产业链相关的技术研发,18年间,比亚迪汽车发展迅猛,持续迭代的产品让国内消费者刮目相看。如今,比亚迪已成为全球新能源汽车的领导
专家我反对养老金年年涨,体制内的退休金太高了近日,中国政法大学资本金融研究院张捷教授表示现在养老金体现出了社会矛盾以及分配不公的问题。张捷教授认为体制内的养老金太高了,而且年年涨,很多体制内的退休金比现在年轻人的工资还要高,开发区城管局开展燃气安全专项整治行动驻马店网讯(记者梁博涵郭磊通讯员徐瑗婧)为切实做好燃气安全生产工作,确保辖区燃气安全形势稳定。3月13日,开发区城管局召开燃气整治工作会及燃气安全知识培训会。开发区城管局党组书记局服务制胜!亘晟门窗顺利通过CTS售后服务七星认证近日,经广汇联合(北京)认证服务权威机构为期两天的严格监督审查,亘晟门窗凭借完善的售后服务体系,顺利通过CTS售后服务七星认证。此次认证,再一次向行业和客户展示了亘晟门窗和亘爱系统每日一习话坚持和加强党的全面领导视频加载中习近平新的征程上,我们必须坚持和加强党的全面领导,充分发挥党总揽全局协调各方的领导核心作用,提高党科学执政民主执政依法执政水平。要弘扬伟大建党精神,推进党的建设新的伟大工最新!32所院校复试线已出!大批院校发布调剂缺额信息!各大高校复试分数线陆续公布中,本周34所自划线院校的复试线基本会公布完毕(目前已经出了21所),大批的非自划线院校集中在国家线公布后的一周,也就是从下周开始大批集中出分数线。当然,莆田欧氏三兄弟快撑不住了斑马消费杨柘赌性强敢加杠杆以小博大,极短时间内成为行业黑马,是第一代闽系房企创富的典型画像。在各种不可预知的风险里,它们加码规模,也不断发债融资,打地鼠般压住可能出险的坛子。这同时如何在手机上将dwf转成dwg?可以试试这几个方法如何在手机上将dwf转成dwg?CAD有很多不同的格式和版本,为了实现统一,我们往往会对格式进行转换,如果您需要将DWF格式的CAD图纸转换成DWG格式,在手机上也可以实现。以下是截至目前,盘点支持高频PWM调光的华为手机,共10款1华为Mate50E搭载骁龙778G4G处理器,采用台积电6nm的工艺制程,性能和功耗表现达到一个完美的平衡,无论日常还是游戏,表现都非常不错正面是一块6。7英寸的AMOLED柔性华为手机,岌岌可危!苹果赢了,国产输了?3月23日,华为P60系列发布。首发索尼IMX888传感器,搭配f1。44。0可变光圈方案,加上华为自研的XMAGE影像,毫无疑问,这会是一款影像实力强劲的手机。但顶级的影像,不代1986年,一男子在供销社看酒,用56元买7瓶茅台,如今能买套房吗1986年,很多人的日子并不好过。对于老百姓来说,几乎都是靠天吃饭。也就是说,天上下雨,老百姓会有饭吃天上不下雨,很有可能会挨饿。但就算如此,不少人还有这样的兴趣爱好喝酒。那个年代身高不足1米5,英国小女子与她的100个中国孩子的传奇故事90多年前,日军侵华期间,一位其貌不扬身材矮小的英国小妇人冒死将100多名儿童从日军占领区转移到安全地方,期间她们翻山越岭,历经了千辛万苦,谱写了一段可歌可泣的故事。她的名字叫格拉