admin 发表于 2023-2-16 18:55:10

TDD、BDD、DDD简介

<div id="article_content" class="article_content clearfix">
      <link rel="stylesheet" href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/kdoc_html_views-1a98987dfd.css">
      <link rel="stylesheet" href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-6e43165c0a.css">
                <div id="content_views" class="htmledit_views">
                  <p>1. TDD</p>
<p>TDD指的是Test Drive Development&#xff0c;很明显的意思是测试驱动开发&#xff0c;也就是说我们可以从测试的角度来检验整个项目。大概的流程是先针对每个功能点抽象出接口代码&#xff0c;然后编写单元测试代码&#xff0c;接下来实现接口&#xff0c;运行单元测试代码&#xff0c;循环此过程&#xff0c;直到整个单元测试都通过。这一点和敏捷开发有类似之处。</p>
<p>TDD的好处自然不用多说&#xff0c;它能让你减少程序逻辑方面的错误&#xff0c;尽可能的减少项目中的bug&#xff0c;开始接触编程的时候我们大都有过这样的体验&#xff0c;可能你觉得完成得很完美&#xff0c;自我感觉良好&#xff0c;但是实际测试或者应用的时候才发现里面可能存在一堆bug&#xff0c;或者存在设计问题&#xff0c;或者更严重的逻辑问题&#xff0c;而TDD正好可以帮助我们尽量减少类似事件的发生。而且现在大行其道的一些模式对TDD的支持都非常不错&#xff0c;比如MVC和MVP等。</p>
<p>但是并不是所有的项目都适合TDD这种模式的&#xff0c;我觉得必须具备以下几个条件。</p>
<p>首先&#xff0c;项目的需求必须足够清晰&#xff0c;而且程序员对整个需求有足够的了解&#xff0c;如果这个条件不满足&#xff0c;那么执行的过程中难免失控。当然&#xff0c;要达到这个目标也是需要做一定功课的&#xff0c;这要求我们前期的需求分析以及HLD和LLD都要做得足够的细致和完善。</p>
<p>其次&#xff0c;取决于项目的复杂度和依赖性&#xff0c;对于一个业务模型及其复杂、内部模块之间的相互依赖性非常强的项目&#xff0c;采用TDD反而会得不尝失&#xff0c;这会导致程序员在拆分接口和写测试代码的时候工作量非常大。另外&#xff0c;由于模块之间的依赖性太强&#xff0c;我们在写测试代码的时候可能不采取一些桥接模式来实现&#xff0c;这样势必加大了程序员的工作量。</p>
<p> 2. BDD</p>
<p>BDD指的是Behavior Drive Development&#xff0c;也就是行为驱动开发。这里的B并非指的是Business&#xff0c;实际上BDD可以看作是对TDD的一种补充&#xff0c;当然你也可以把它看作TDD的一个分支。因为在TDD中&#xff0c;我们并不能完全保证根据设计所编写的测试就是用户所期望的功能。BDD将这一部分简单和自然化&#xff0c;用自然语言来描述&#xff0c;让开发、测试、BA以及客户都能在这个基础上达成一致。因为测试优先的概念并不是每个人都能接受的&#xff0c;可能有人觉得系统太复杂而难以测试&#xff0c;有人认为不存在的东西无法测试。所以&#xff0c;我们在这里试图转换一种观念&#xff0c;那便是考虑它的行为&#xff0c;也就是说它应该如何运行&#xff0c;然后抽象出能达成共识的规范。如果你用过JBehave之类的BDD框架&#xff0c;你将会更好的理解其中具体的流程。这里我推荐一篇具体阐述的文章。亲身体验行为驱动开发。</p>
<p>另外&#xff0c;关于TDD和BDD之间的关系&#xff0c;还可以参考这篇文章: 虚拟座谈会&#xff1a;代码测试比率、测试驱动开发及行为驱动开发</p>
<p> 3. DDD</p>
<p>DDD指的是Domain Drive Design&#xff0c;也就是领域驱动开发。这是一种非常好的思想&#xff0c;在我们刚开始学习程序&#xff0c;甚至刚开始学习三层架构的时候&#xff0c;我们曾经面临过很多疑惑&#xff0c;比如如何来实现我们的数据层&#xff1f;后来我们开始学习MVC&#xff0c;MVP等架构&#xff0c;如何设计Model层又成了我们的新问题。我们见过太多这种情况&#xff0c;Model变成了单纯的数据容器&#xff0c;也就是我们经常说的贫血模式。DDD实际上也是建立在这个基础之上&#xff0c;因为它关注的是Service层的设计&#xff0c;着重于业务的实现&#xff0c;因此不可避免的以贫血模式为基础而存在。但是它最大的特别是将分析和设计结合起来&#xff0c;不再使他们处于分裂的状态&#xff0c;这对于我们正确完整的实现客户的需求&#xff0c;以及建立一个具有业务伸缩性的模型&#xff0c;是有很大帮助的。<br> ————————————————<br> 版权声明&#xff1a;本文为CSDN博主「何雨峰」的原创文章&#xff0c;遵循CC 4.0 BY-SA版权协议&#xff0c;转载请附上原文出处链接及本声明。<br> 原文链接&#xff1a;https://blog.csdn.net/u013395071/article/details/31349377</p>
                </div>
      </div>
      <div id="treeSkill"></div>
页: [1]
查看完整版本: TDD、BDD、DDD简介