`
hyj1254
  • 浏览: 340068 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

tdd的粒度

TDD 
阅读更多
   发现这个问题目前还处于空白状态,搜了很久没看见讨论。希望管理员不要把它移到问答区,大家发帖子或多或少都会有些疑问,没疑问的帖子还会有讨论价值吗。
   进入正题。一个系统的功能结构都是树形的,底层的最简单,越往上就越复杂,因为它对底层功能的集成越来越多。刚开始时的测试都是针对底层编写的,这很轻松,基本上没问题;可当需要编写高层功能时,问题就来了:要不要写测试?
1、写。这就是每一层都写测试,层级越多就意味着底层的代码重复测试的次数也越多,tdd强调频繁运行测试,这不是很浪费时间?这还不够严重,假如该层集成的某些功能不是自己写的,无法保证其可靠性,这又该如何?其实问题可以总结为:我希望“A依赖于B,但A的测试只会因为A的问题而出现问题,跟B无干”。结论是,层级越高的功能,测试越难编写,越受限制。
2、不写。只针对所有的底层代码编写testCase。那高层的代码怎么办,连testCase都没有可靠性从何谈起?
   从个人的实践来看,这个问题很实际。
分享到:
评论
13 楼 抛出异常的爱 2011-06-02  
yizhilong28 写道
测试代码的维护确实是件很头疼的问题,特别是团队有人是TDD,有人根本就没单元测试。

没有测试 的代码删了它..........
这点成本魄力没有别谈团队管理
12 楼 yuan 2011-06-01  
yizhilong28 写道
测试代码的维护确实是件很头疼的问题,特别是团队有人是TDD,有人根本就没单元测试。

在一个并不是每个人都写测试的团队里,可以每次checkout代码的时候马上先跑一下测试。如果测试不通过,查log找引起问题的人讨论,如果是需求变更,就修改相应的测试(描述这个新的需求);如果是个bug就改bug。
11 楼 yizhilong28 2011-06-01  
测试代码的维护确实是件很头疼的问题,特别是团队有人是TDD,有人根本就没单元测试。
10 楼 seemoon 2011-05-31  
从测试价值最大的地方开始,团队能力越高,测试范围越大。但是现在国内很多团队只是t,没有d(riven),要靠个人摸索,不到上万行测试代码,都是扯谈。
9 楼 niva 2011-05-31  
用大师的话说,就是“高层不依赖于底层,他们共同依赖于抽象”,说白了就是把底层多实现个接口,然后去Mock,这样你就可以独立于底层,来进行测试了。

不过就我的实际体验来讲,大部分时候高层确实没有什么好测的,多数是对底层的组织、委派,Mock起来也是非常的麻烦,测试代码要写一大堆,Mock工具有时候也很不爽,很难按照自己的意愿来Mock,更杯具的是,一旦需求发生意料之外的变化,许多测试代码都要重新写,所以我现在实在不愿意为高层写测试代码,宁可做些手工测试,出了问题debug一下,可能是我功力不够深吧。
8 楼 bastengao 2011-05-25  
unitTest + mock
7 楼 piao_bo_yi 2011-05-25  
LZ希望“A依赖B,但A的测试只会因为A的问题而出现问题,跟B无干”实际上,很难完全做到。可以用MOCK解决部分问题。但如果你正在使用带副作用的编程语言(如JAVA),则很难做到完全的隔离。完全的隔离意味着很多细小的函数(仅仅是为了测试而做的重构)。最容易隔离的情形是业务逻辑和从周围取数据的隔离。但对于A和B都是业务逻辑层的情形,一般是隐含了B正确的假设。所以测试一般能测出来问题,但是是哪个模块出问题,可能还是得亲自调试一下。具体的平衡得自己把握。
6 楼 BruceXX 2011-05-19  
使用mock来对高层做单元测试,最初的时候底层的东西我们是用单元测试来模拟,高层用集成测试来模拟,但是集成测试的配置环境很容易变动,所以后期我们直接用mock来做高层的test
5 楼 skypengyc 2011-05-18  
现在都用TDD的开发方法在开发项目吗?
4 楼 hyj1254 2011-05-14  
yuan 写道
可以试着把每层隔离开来,让高层不依赖底层,单独测试,mock、stub就是用来干这个的。

谢谢,这么做确实可以达到效果。
3 楼 yuan 2011-05-12  
假如集成进来的某个库不是你自己写的,那么只要测试那个被集成进来的库的接口是否被正确调用了即可,不必再深入到那个库里面去连库一起测。

当然,那个库最好是自己有一套完全的测试代码,否则它不可靠。
2 楼 yuan 2011-05-12  
可以试着把每层隔离开来,让高层不依赖底层,单独测试,mock、stub就是用来干这个的。
1 楼 抛出异常的爱 2011-05-11  
hyj1254 写道
   发现这个问题目前还处于空白状态,搜了很久没看见讨论。希望管理员不要把它移到问答区,大家发帖子或多或少都会有些疑问,没疑问的帖子还会有讨论价值吗。
   进入正题。一个系统的功能结构都是树形的,底层的最简单,越往上就越复杂,因为它对底层功能的集成越来越多。刚开始时的测试都是针对底层编写的,这很轻松,基本上没问题;可当需要编写高层功能时,问题就来了:要不要写测试?
1、写。这就是每一层都写测试,层级越多就意味着底层的代码重复测试的次数也越多,tdd强调频繁运行测试,这不是很浪费时间?这还不够严重,假如该层集成的某些功能不是自己写的,无法保证其可靠性比如其依赖的模块也是未知的,这又该如何?结论是,层级越高的功能,测试越难编写,越受限制。
2、不写。只针对所有的底层代码编写testCase。那高层的代码怎么办,连testCase都没有可靠性从何谈起?
   从个人的实践来看,这个问题很实际。

1.KISS
2.越复杂越容易出错,越容易出错需要测试,
3.重构成简单易懂东西,把关系变成简单关系

相关推荐

    node-tdd:使用Node和TDD启动测试应用程序

    10. **最佳实践**:探讨Node.js和TDD的最佳实践,如代码组织、测试结构、测试的粒度控制等。 通过以上知识点的学习和实践,你将能够使用Node.js和TDD构建出高质量、可维护的应用程序。记得,TDD不仅是一种技术工具...

    TDD在Unity3D游戏项目开发中的实践

    关于TDD测试驱动开发的...待测试代码完成之后,我们再将目光转移到逻辑代码,根据测试的要求,完成逻辑代码,使之能够通过经过拆分后粒度已经很小的测试。这样做有什么好处呢?要将任务拆分成可测试的各个测试用例,这

    LTE-TDD/FDD 协议栈 R9

    - **更精细的资源分配**:通过更小的时间和频率粒度,更有效地利用无线资源。 - **更低的延迟**:通过优化协议栈的各个层次,实现更低的端到端传输延迟。 - **增强型VoLTE**:提高了语音通话的质量和稳定性。 - *...

    TDD

    在实际应用中,开发者需要根据项目需求和团队习惯来平衡测试的粒度和数量。 总的来说,TDD是一种有效的开发实践,可以帮助开发者写出更高质量、更易维护的代码。虽然它需要花费更多的时间在测试上,但长期来看,...

    测试引起的设计损坏或TDD为何如此痛苦

    其次,TDD倾向于创建大量细粒度的类和接口,这可能导致过度设计,使得系统结构过于分散,难以理解和管理。此外,测试驱动的方式可能会限制创新思维,因为开发者可能会受限于已有的测试框架,而不去探索更高效的设计...

    tdd-ex4-java

    你可能需要关注代码的命名、函数的粒度、类的职责以及模块之间的依赖关系,使用设计模式如单一职责原则(SRP)、开闭原则(OCP)等来改进代码结构。 "不要忘记使用自动化测试保护自己免受回归"这部分提示,你需要确保在...

    测试驱动开发 测试驱动开发 测试驱动开发 测试驱动开发

    - **保持测试粒度小**:每个测试用例应专注于一个独立的功能点,避免过多依赖。 - **隔离测试**:确保每个测试独立运行,不受其他测试的影响。 - **持续集成**:结合持续集成(CI)工具,如Jenkins或Travis CI,自动...

    电信设备-多载波时分双工移动通信系统分配无线资源的方法.zip

    9. **未来发展趋势**:随着5G和未来6G的发展,MC-TDD系统将进一步优化,例如引入更精细的资源粒度、更灵活的帧结构,以及基于AI的智能资源分配。 综上所述,多载波时分双工移动通信系统中的无线资源分配是一项复杂...

    4、5G高负荷预警小区及4、5G预警场景定义说明.docx

    5G高负荷预警小区算法同样基于15分钟粒度的数据,但考量的指标包括上行空分PRB利用率(EU0522)、下行空分PRB利用率(EU0523)以及PDCCH(Physical Downlink Control Channel,物理下行控制信道)信道CCE(Control ...

    py-tdd-by-example:使用 Python 的 Kent Beck 在“Test Driven Development by Example”中给出的示例演练

    在这个存储库中,我试图将提交的粒度与 Kent 在书中描述的“微小”步骤相匹配,给出在任何普通存储库中都会在提交之间的空间中发生的过程的历史记录。 这并不是一个使用 TDD 开发的应用程序的提交历史应该是什么...

    课程论文_管登荣_MF16320201

    描述中提到的几点内容似乎涉及软件开发过程中的某些实践和策略,特别是强调了细粒度设计的成本、自动化代码生成的效果以及测试优先方法对设计的影响。 在标签部分,虽然没有给出具体信息,但从内容来看,这篇论文...

    Growing_Object-Oriented_Software,_Guided_By_Tests_(2009)

    而“microscope”则代表了单元测试本身,它允许开发者以微小的粒度观察代码的执行和行为。 书中还提出,软件开发应当借鉴科学实验的方法,通过重复性的实验来确保开发过程的可控性和软件产品的稳定性。作者们强调了...

    D上行干扰检测数据采集指导书PEACV.pdf

    PEAC平台目前仅支持60分钟粒度的话统分析。 4. 反向频谱数据(CHR):首先通过话统数据分析筛选出可能受到干扰的小区,然后使用MML命令GET CELLRICDATA远程启动基带数据采集,采集至少10分钟后获取内部CHR数据。在...

    refactor clean code design pattern书单

    Martin(Uncle Bob)的《Clean Code》一书深入探讨了如何写出高质量的代码,强调了代码应具有良好的命名、函数和类的粒度控制、注释的适当使用等原则。 3. **设计模式**:设计模式是解决软件设计中常见问题的通用...

    4-5G高负荷预警小区及4-5G预警场景定义说明.docx

    - **5G TDD(2.6G:1TR、2TR、4TR)、5G TDD(2.6G:8TR)**: - 持续5分钟内,如果小区RRC连接最大数超过400,并且(上行PRB利用率大于90%且上行速率低于0.5Mbps)或(下行PRB利用率大于90%且下行速率低于10Mbps)...

    电信设备-时分双工移动通信系统中上下行资源的分配方法和装置.zip

    5G NR进一步增强了TDD系统的灵活性,引入了更细粒度的资源分配单位,如-mini-slot和符号级别的资源分配。此外,还支持更复杂的帧结构和自定义的配比,以适应多样化的业务场景和边缘计算等新技术。 综上所述,时分...

    chai-moment:柴的日期断言,由瞬间驱动

    时刻 由支持的日期和格式化日期字符串的匹配器使用另请参阅和。浏览器端包括在彩灯和彩灯之后的彩灯: [removed][removed][removed][removed][removed][removed]... 使用tdd样式的断言时,如果不使用列出的粒度之一,

    45G帧结构整理.pptx

    - **RE (Resource Element)**:物理层资源的最小粒度,一个RE由一个子载波和一个OFDM符号组成。 - **RB (Resource Block)**:频域最小调度单位,包含12个连续的子载波,在时域上持续一个时隙。 不同带宽下的RB数目...

Global site tag (gtag.js) - Google Analytics