从加入TW的第一天Pair开始就在项目中实践TDD。前一段时间阅读了Kent Beck的<<TDD by Example>>,之后对书中的内容进行了总结
。这次,同事yuheng
给咱们两个项目组以Code Kata的形式进行了一次TDD培训。通过这次实践结合理论的培训,自己进一步加深了对TDD的理解,可谓收获颇丰。
为什么要TDD?TDD有什么优缺点?
优点:
1. TDD可以让设计的接口清晰,更大程度地保证的模块内部的高内聚性和模块间的低耦合性
2. 提高系统的测试覆盖率,避免系统先开发后不可测试的现象。
3. 小步前进,快速反馈。
问题:
1. TDD驱动出来的实现是否会缺少对整个系统架构的设计,缺少全盘统一规划?
TDD与系统架构,系统设计并不矛盾,并不是说用了TDD就不能有系统架构。可以针对系统的业务需求规划系统架构,再在这个基础上进行TDD开发。但一定要避免过度设计。
TDD的过程中维护TODO List
Tasking是一个分而治之的过程。从大的方面来说,一个业务系统的开发可逐步划分成:系统,Release, Master Story, Story. 而TDD过程中维护的TODO List主要是针对
一个Story开发过程中的任务切分。同《TDD》中描述的一样,在Story开始时,我们应该对它作一个任务列表,随着任务的向前推进不断地更新任务状态,也随时可以往列表中添加新的任务。
测试用例设计
TDD的过程中应该合理的设计测试用例。设计测试用例的方法包括:等价类划分,边界值,因果图,正交方法,Pairwise方法等。
从外向内还是从内向外TDD
两种方案分别适用于不同的场景。
从外向内是从系统或模块的最外层接口出发,逐步驱动出内部的设计。之后再TDD驱动内部各个模块的实现。
从内向外通常会对系统进行架构设计,划分各个模块的职责。然后再TDD驱动各个模块的实现。最后将各个模块进行集成。
条件允许的情况下,个人倾向于从外向内进行TDD。它的优点在于能保证驱动出的各个模块能顺利集成,满足最终系统的需求。但是对于一些大型系统,很难在一开始就会有最外层的集成环境,所以只能先系统架构进行模块划分。
从核心功能开始,优先实现系统的业务价值高的核心功能。
Mock方法
首先,要弄清楚一些mock相关的名词,如mock, stub, spy, dummy, fake等。
使用Mock方法时要划分"System under test" (SUT) 的边界,避免测试边界外的功能。
分享到:
相关推荐
单元测试 TDD EASYMOCK 的一般用法说明 实例
华为LTE TDD系统原理培训PPT文档
TDD测试驱动开发,准备的资料,我自己用的,公司只能上CSDN社区
Laravel开发-tdd 时分双工
GSM TDD noise 分析,但愿对GSM RF感兴趣的您有所帮助
C语言的TDD参考示例代码,主要包含了书中所参考的源代码
使用phpunit 一步一步使用tdd开发模式,减少bug数,提高项目质量
GSM TDD 板振说明及分析方法、解决方法总结
极限编程+TDD开发
3GPP采用“求同存异”的原则进行L1E FDD和TDD的标准制定工作.将两种制式的协议实现在相同的规范中描述,并尽可能保证其协议实现相同,如遇到无法融合的差异,则仅针对差异部分进行分别描述。标准制定的这种指导思想...
java-tdd-training-exercises Odd-e Java TDD 培训练习
Test Driven: Practical TDD and Acceptance TDD for Java Developers (PDF英文版)
TDD 测试
抑止TDD noise 的措施及解决方案
TDD实战 - Test Driven Development in Action
测试驱动开发的艺术Test.Driven.TDD.and.Acceptance.TDD.for.Java.Developers
关于TDD的认识和理解,非得要那么的字吗?我恶心了
tdd_training_bootstrap 目录结构和构建文件以引导我的 TDD 培训。
我的博客 学习TDD(4)--实例2:基于ZooKeeper的服务器注册和探测类[实战ServerRegister]及 学习TDD(5)--实例2:基于ZooKeeper的服务器注册和探测类[实战ServerDetector] 的配套代码