-
TDD的实施细节应该怎样做10
哈哈,标题党了。其实是我求细节操作。
以前也有看过一些TDD的资料,但一直没有在实际的项目中实践过。最近可能有一个新的项目,不是特别大,想采用Scrum和TDD小试身手。先介绍一下我们以前项目的开发流程:
1.拿下项目,需求调研分析,编写需求用例(如果客户没有要求,需求规格说明书都不写)
基本上需求用例就是说明什么人,做什么事情,怎么做,达到什么目的,有什么要求这些。
2.然后分析领域对象,分析业务流程和场景。并最终生成数据库物理模型。
3.概要设计,其实也没什么,就是数据库结构,还有用例描述加一些时序图。
4.根据需求用例,编写测试用例。
5.开发人员进行开发,有时项目紧的时候,单元测试都不写(这个项目没有明文要求),主要靠开发人员个人意愿。
6.根据周期定期进行打包测试。我一般会每周build两次,亲自操作一下业务流程,有问题提出修改。这个过程测试人员未参与。
7.测试人员进入,按模块完成的先后顺序,持续的测试修改。
以前的项目基本上是采用领域驱动的方式进行一步步开发的。现在打算采用TDD方式,现有一些细节疑问,打算请教一下实施了TDD的各种牛。
1.TDD方式是不是不用写需求说明书了?
2.分析领域对象,分析业务流程和场景。并最终生成数据库物理模型。这一步是不是在TDD之前完成?
3.不写概要设计,由需求用例直接跳入TDD开发?
4.测试用例是不是需求用例的细化和规范?
5.TDD中的test是基于单元测试,还是基于需求测试?
6.如果是单元测试,自然由开发人员完成。如果TDD是基于需求测试,那么开发人员是否需要测试人员配合?
最后一个问题是:大家有结对编程的习惯吗?在实践过程中结对是否高效?反正我是觉得结对不会太高效的,主要是基于项目人员的配置本来就有成本在那里,而且人员水平也不一样。我的观点是一个经验丰富的带一两个新手共同开发一个模块,但并不需要结对的方式。
ok,问题完了。等大家拍砖。
问题补充humaeks 写道个人的几点愚见,有点零乱:
1. 首先明确unit test和功能测试不一样,参与的人也不一样。
2. 设计完了再入TDD阶段,写UT的过程其实也是校验测试的过程,如果测试不好写,就需要review设计。这里插播一下,既然考虑采用DDD,应该先出来CDM,然后java OO与CDM对应,剩下才是设计物理模型和持久层
3. 传统意义上的TDD指的是unit test。背后很重要的一个思想是先写测试有助于写出clean code that works, 或者说是just enough的代码,实践上需要权衡。对程序员的编程技巧要求高,在我的团队成员中,从零到真的能写出“单元”测试,需要每天抽一小时1 on 1 code review一个月以上。
需要程序员有逻辑拆分以及一些coding技巧,看implementation patterns / clean code 这两本书会有帮助,但关键还是每天的code review给及时反馈。
4. 100%覆盖是不切实际的东西,尤其是初次尝试TDD,可以采用以点带面的方式,让部分成员先尝试到TDD带来的好处,然后在团队中传播;
5. 成员水平不一样可以采取结对方式提升人员水平,但成本回收周期长,基本不会对本项目(3月内的项目)产生benefit,但遇到有好苗子要坚决培养,否则日后还是会死,留不留得住人,就是另外一个管理topic了。
仅供参考。
1.unit test和功能测试肯定是不一样的。我问的是xp和tdd需不需要写需求规格说明书。
2.我要说的是TDD,不是DDD.你的意思是不是先DDD完了,再进入TDD?
3.但我好像看以前某些牛说TDD中的Test Driver不是unit test driver,而是需求test driver.当然如果要tdd,unit test肯定是必需的了,测试-->重构-->设计,然后反复。
4.这个基本上同意。
5.成员水平不一样可以采取结对方式提升人员水平,对于你这个观点,我不同意。我记得几年前,有人讨论过水平不一样,结对更加容易流产。
问题补充:<div class="quote_title">gigix 写道</div><div class="quote_div"><div class="quote_title">peterwei 写道</div><div class="quote_div">5.成员水平不一样可以采取结对方式提升人员水平,对于你这个观点,我不同意。我记得几年前,有人讨论过水平不一样,结对更加容易流产。</div> <br /><div class="quote_title">peterwei 写道</div><div class="quote_div">我的观点是一个经验丰富的带一两个新手共同开发一个模块,但并不需要结对的方式。 </div> <br />你明明没做过,哪儿来的这么多观点呢?</div> <br />是不是一定要亲自做过,才能有这个观点呢?我们权且不论这个观点是对还是错。这只是我的一个想法,而且也是经过实践的,只不过不是结对的方式。另外我也非常希望你能给我一些TDD细节方面的见议。再问一下,你觉得老抛的观点怎么样? <br />
问题补充:<div class="quote_title">humaeks 写道</div><div class="quote_div">1. tdd是编程技巧和风格,与规格说明书不是同一级别的东西,那个应该是scrum或者整个agile development所关注的; <br />2. tdd是编程技巧,DDD是设计方式,按软件生命周期,需求、设计(大设计)、编码、测试,每个小迭代里面还是按这个走的,至少在我当前的开发流程里面是这样,可能我对这个的理解不深; <br />3. 需求test driven是对的,关键看需求如何拆分,是逻辑代码段的需求,还是系统功能需求。抽象一点来说,tdd背后是一种风格,指在所有事情开始之前,先考虑验收,实际上很老的软件工程理论就说了测试应该在需求阶段就介入,并根据需求规格编写对应的验收测试。TDD只是把这种风格带到coding环节; <br />4. <br />5. mentoring很累,很容易流产,所以必须看苗子,另外就是个人魅力和忽悠。 <br /> <br />继续,个人愚见而已。</div> <br />看来我们的想法已经统一了。就是不知道对不对。2011年1月13日 10:14
6个答案 按时间排序 按投票排序
-
采纳的答案
TDD是手法
Scrum是管理
现在我对Scrum还是没办法全作.
TDD很简单.
1.不启动tomcat测试
2.不启动DB写逻辑
3.所有的程序员必须可以口述所写的东西.
4.每个逻辑只写在一个类里不需要页面配合.
5.非hibernate的话可以连数据库写DAO
6.真实的对应自己的需要.而不是什么套路.
7.每个会出错的文件对应一个测试,
每次出现了错误你会点测试,那个按钮.改成你想要的样子,你要是能顺利改成可以过了的程序会有一种爽快感,有了test的限制后,就了有种没有限制的世界,如果你还能发现更理性的代码写法.会更爽快.
上了正轨之后几乎没有人会退回去
结对只要你的公司能支付的起工资
你的工作不是拷贝代码
效果非常不错.
当然楼上说的人品是个问题.但我遇到不能结对的人只占很少的一部分
DDD需要更多的上层支持更.
很有可能技术不是问题.
人是很关键的
如果压力很大的话不建议进行这种尝试
其它的一些设计,需求,计划的一些实践很困难......没有成功过2011年1月13日 10:14
-
稍稍再补充一点,所有的这些都是方法论。研究方法论的方式就是实践,实践的时候能把握住方法论的constraint和它能产生benefit的原因,然后根据本身团队情况来进行调整。千万不要想着一步到位。
2011年1月13日 14:50
-
1. tdd是编程技巧和风格,与规格说明书不是同一级别的东西,那个应该是scrum或者整个agile development所关注的;
2. tdd是编程技巧,DDD是设计方式,按软件生命周期,需求、设计(大设计)、编码、测试,每个小迭代里面还是按这个走的,至少在我当前的开发流程里面是这样,可能我对这个的理解不深;
3. 需求test driven是对的,关键看需求如何拆分,是逻辑代码段的需求,还是系统功能需求。抽象一点来说,tdd背后是一种风格,指在所有事情开始之前,先考虑验收,实际上很老的软件工程理论就说了测试应该在需求阶段就介入,并根据需求规格编写对应的验收测试。TDD只是把这种风格带到coding环节;
4.
5. mentoring很累,很容易流产,所以必须看苗子,另外就是个人魅力和忽悠。
继续,个人愚见而已。2011年1月13日 14:33
-
peterwei 写道5.成员水平不一样可以采取结对方式提升人员水平,对于你这个观点,我不同意。我记得几年前,有人讨论过水平不一样,结对更加容易流产。peterwei 写道我的观点是一个经验丰富的带一两个新手共同开发一个模块,但并不需要结对的方式。
你明明没做过,哪儿来的这么多观点呢?2011年1月13日 10:14
-
个人的几点愚见,有点零乱:
1. 首先明确unit test和功能测试不一样,参与的人也不一样。
2. 设计完了再入TDD阶段,写UT的过程其实也是校验测试的过程,如果测试不好写,就需要review设计。这里插播一下,既然考虑采用DDD,应该先出来CDM,然后java OO与CDM对应,剩下才是设计物理模型和持久层
3. 传统意义上的TDD指的是unit test。背后很重要的一个思想是先写测试有助于写出clean code that works, 或者说是just enough的代码,实践上需要权衡。对程序员的编程技巧要求高,在我的团队成员中,从零到真的能写出“单元”测试,需要每天抽一小时1 on 1 code review一个月以上。
需要程序员有逻辑拆分以及一些coding技巧,看implementation patterns / clean code 这两本书会有帮助,但关键还是每天的code review给及时反馈。
4. 100%覆盖是不切实际的东西,尤其是初次尝试TDD,可以采用以点带面的方式,让部分成员先尝试到TDD带来的好处,然后在团队中传播;
5. 成员水平不一样可以采取结对方式提升人员水平,但成本回收周期长,基本不会对本项目(3月内的项目)产生benefit,但遇到有好苗子要坚决培养,否则日后还是会死,留不留得住人,就是另外一个管理topic了。
仅供参考。2011年1月13日 10:14
相关推荐
本手册将重点讲解如何在NS2中进行UMTS-TDD系统的多层仿真,并涵盖了一些关键概念和技术细节。 #### 详细介绍 ##### NS2网络仿真软件简介 **NS2**(Network Simulator 2)是一款广泛应用于学术界和工业界的开源...
总之,TDD和FDD在频段划分方面具有明显的不同之处,这些差异不仅影响着频谱资源的分配,还直接关系到网络的设计、实施及UE的操作方式。随着5G网络的发展,对于频段划分的研究也将继续深入,以满足不断增长的数据传输...
这份协议的两个版本,即36.211-890_TDD_0912.doc和36.211-890_FDD_0912.doc,分别针对TDD和FDD模式提供了详细的技术规范,是理解和实施LTE TDD/FDD网络的关键参考资料。它们将深入解析这些技术细节,帮助工程师优化...
在现代通信技术中,时分双工(Time Division ...这份“使用时分双工(TDD)降低相邻信道干扰的方法和系统.pdf”文档很可能会详细阐述这些技术的实施细节,对于理解TDD在实际应用中的优势和挑战具有很高的参考价值。
标题中的"TDD_Projeto_Vaquinha"指的是一个基于.NET平台的项目,它采用了测试驱动开发(Test-Driven Development, TDD)的方法。TDD是一种软件开发实践,开发者在编写实际代码之前先编写测试用例,确保每添加新的...
在本项目"nodejs-tdd-clean"中,我们探索了如何使用Node.js开发软件时遵循测试驱动开发(TDD)原则以及实施清洁架构。这个项目是针对JavaScript开发者的,它展示了如何通过TDD来保证代码质量,并利用清洁架构来保持...
**测试驱动开发(TDD)概述** 测试驱动开发(Test-Driven Development,简称TDD)是一种软件开发方法,强调在编写任何实际代码之前先编写...然而,实施TDD也需要权衡其成本和收益,确保在实际项目中找到最佳的平衡点。
对象完成此作业后,您应该了解: 类如何为其对象定义方法完成此任务后,您应该能够: 创建一个实例方法调用实例方法细节可交付成果一个包含所有提供的入门文件的Git存储库已完成,可以使该程序正常工作。要求通过...
书中还涵盖了如何编写有效的单元测试、测试的组织和管理,以及如何在团队中推广和实施TDD文化。 测试驱动开发的一个关键优势是它有助于降低复杂性。通过先写测试,开发者可以更明确地理解需求,并逐步构建出满足...
通过阅读本书,开发者不仅能掌握TDD的技术细节,还能理解其背后的原则和哲学,从而提升个人和团队的开发效率和软件质量。 总之,《测试驱动开发 with Python》是一本深入浅出的TDD指南,适合有一定Python基础并希望...
Jeff Langr并不仅限于讲述TDD本身,还深入探讨了在C++这一复杂的编程环境中,如何有效地实施TDD。特别值得一提的是,作者对于在多线程环境下进行TDD的讨论,这对于需要处理并发和多线程的现代C++开发者来说,无疑是...
通过研究这个项目,开发者可以学习到如何在Node.js环境中有效地组织代码,遵循Clean Architecture原则,以及如何实施TDD来提高代码质量和可维护性。对于想要提升自己JavaScript API开发技能的开发者来说,"clean-...
面向对象的钱 描述 使用一组提供的类框架,创建通过所有测试的Currency和Money类。... 在Money上使用标准数学运算符( + , - , * , / )编写测试,然后实施所需的方法。 要编写这些测试,请查看现有测试并进行修
同时,TDD的实施也对教师提出了更高要求,教师需要更有效地批改作业,可能需要借助自动化测试工具来减轻工作负担,并指导学生如何利用搜索引擎和在线资源解决问题。 总的来说,将测试驱动开发思想引入C++程序设计...
测试过多,加上实施细节,以及对模拟的错误使用 分支仅修复(一些)六角形错误。 测试中需要进行许多模糊的更改,证明它们在重构期间没有太大帮助 分支这种方式拆分测试: 域逻辑(应用程序/域文件夹):中型单元...
它不仅系统地介绍了敏捷开发的核心理念和TDD的具体实施方法,还通过一个实际的Java项目示例,让读者能够更加直观地理解这些概念的应用场景。无论是对于想要深入了解敏捷开发和TDD的Java开发者,还是希望提升自己项目...
报告中关于双工方式的部分涵盖了TDD(时分双工)模式下的正交频分复用(OFDMA)和单载波频分多址(SC-FDMA)的技术细节。这些技术可以提高频谱效率,并支持高速数据传输。报告中提出了两种方法:一种是采用多种固定...