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

最近感悟:TDD与设计

阅读更多
   TDD到底是什么,它是怎么做到演进出一个优良的设计的?这些疑问驱使着自己不断地思考,并看了很多讨论,下面是自己的一点心得。
   testCase反映的应该只是需求,不能把设计掺杂进来,设计不是它考虑的问题,它只提出你要做什么,至于怎么做,它不管。TDD是需求驱动,在读kent的《tdd》时这样的想法若隐若现,没想到还真有人也这么说,与偶暗合。
   设计,由重构来负责。每次让testCase测试通过后,就应该试图进行重构,恰当的重构能够带来恰当的设计。
   另外,参考如下帖子:http://www.iteye.com/topic/6551。我的理解是,如果需要算法优化,则需要进一步进行tdd,增加需求即算法优化,编写testCase、编码、测试通过。得出来的结果甚至完全推翻了之前的算法,这点光靠重构是无论如何也做不到的。这篇帖子的主要议题是,tdd需不需要先验的宏观构思,在它的指引下进行tdd。我的观点是,不需要,但必须把它的目的转化为testCase,或是需求。为什么要这个宏观构思?比如这篇帖子,它就是要解决效率问题,那就编写一个测试效率的testCase,然后由它驱动着自己寻找最优算法;而不是一开始就按该算法的套路编码,这就不是测试驱动了。所谓宏观构思其实也是一种需求迫使它出现在你的脑海里,既然如此,就把这需求也暴露出来。
   现在仍有一个问题没有解决,kent说过,编写独立的测试能够实现“高内聚、低耦合”,这一点我还没有领悟。假如做到了这点,而重构又及时而恰当,那测试驱动的功力应该就到位了吧。
0
1
分享到:
评论

相关推荐

    Test Driven: Practical TDD and Acceptance TDD for Java Developers (PDF英文版)

    3. 更好的设计:TDD迫使开发者思考代码的结构,往往引导出更好的设计决策。 4. 明确需求:ATDD促进了与利益相关者的沟通,确保开发团队对需求有清晰的理解。 学习《Test Driven: Practical TDD and Acceptance TDD ...

    RIP TDD原文搬运

    6. **分离接口与实现的思考(Separate interface from implementation thinking)**:TDD鼓励先设计测试,这有助于保持接口设计的独立性,避免因实现的考虑而污染设计。在没有TDD的情况下,需要找到一种方式在快速...

    tdd-tutorial:TDD教程

    3. 在Java中使用TDD: - **JUnit**:JUnit是Java最常用的单元测试框架,用于编写和运行测试用例。了解断言、测试注解(如@Test、@Before、@After)以及如何组织测试类是关键。 - **Mockito**:Mockito允许我们创建...

    TDD-CDMA技术及在4G中的应用.ppt

    3. 智能天线技术:TDD-CDMA 技术可以与智能天线技术结合,提高系统容量和抗干扰能力。 4. 多用户检测技术:TDD-CDMA 技术可以与多用户检测技术结合,提高系统吞吐量和灵活性。 TDD-CDMA 技术的系统模型可以分为下行...

    test.driven.tdd.and.acceptance.tdd.for.java.developers

    在《Test-Driven and Acceptance TDD for Java Developers》这本书中,作者Lasse Koskela可能介绍了如何将模型驱动的方法与测试驱动开发(TDD)相结合,以便于Java开发者能够更有效地构建高质量的应用程序。...

    LTE TDD 与FDD区别

    **LTE TDD 与 FDD 知识点详解** **一、引言** 1. **移动通信技术发展趋势**:随着科技的进步,移动通信系统呈现移动化、宽带化和IP化的趋势,市场竞争日益激烈。为了应对WiMAX、Wi-Fi等新老无线宽带接入技术的挑战...

    react-tdd-workshop:TDD与React研讨会

    React TDD工作坊 WIP-这是我的 欢迎来到我的React TDD研讨会! 入门 npm i npm test 观看模式: 1号航站楼: npm start 2号航站楼: npm run test:watch 这个研讨会是关于什么的? 我们将使用React + Jest + ...

    TDD测试驱动开发

    TDD通过引入测试来引导软件设计,使得开发过程更加结构化,减少错误,并提高代码质量。 1. **TDD的基本流程** TDD遵循红-绿-重构三步走的模式: - **红**:首先编写一个失败的测试用例,确保测试框架运行正常,...

    TDD读书报告

    - **极限编程的影响**: 尽管TDD最初与极限编程紧密相连,但它也可以作为一个独立的技术应用于各种开发场景。 #### 三、TDD的使用原理 - **基本思想**: 在编写功能代码之前编写测试代码,仅编写使测试通过的功能...

    spring-boot-tdd-example:tdd学习spring入门demo

    在这个名为"spring-boot-tdd-example"的项目中,我们将深入探讨如何结合TDD原则与Spring Boot进行开发,这将对初学者提供宝贵的实践经验。 1. **Spring Boot基础知识**:Spring Boot是Spring框架的一个扩展,旨在...

    TDD_dice:TDD骰子卷

    在这个名为"TDD_dice"的项目中,我们看到的是一个使用Ruby语言来实现的TDD示例,特别是与掷骰子相关的功能。这个项目可能是为了演示如何通过TDD的方式来构建可靠和可预测的代码。 首先,让我们深入理解TDD的核心...

    tdd-start:TDD첫

    - **更好的设计**:通过先写测试,开发者被迫思考代码的接口和预期行为,这往往会导致更简洁、更具可读性的设计。 - **更高的代码覆盖率**:TDD强调编写测试,这通常意味着更多的代码被覆盖,提高了发现潜在问题的...

    TDDwithMockObjectsAndDesignPrinciples:TDD与模拟对象

    TDD与良好的设计原则密切相关,如SOLID原则: 1. 单一职责原则(SRP):每个类应只有一个单一的职责。 2. 开闭原则(OCP):软件实体应对扩展开放,对修改关闭。 3. 里氏替换原则(LSP):子类型必须能够替换它们的...

    tdd:tdd 与 qunit

    tdd 与 qunit。 在这个例子中,我们使用 requirejs javascript 加载器将单元测试拉到我们的项目中,这是一个带有 HST 的简单加法机。 测试通过加载和访问。 测试本身位于 js/tests 文件夹中。 被测hst的计算在js/lib...

    tdd-part-1:TDD 第 1 部分

    5. **持续集成**:与TDD配合使用时,持续集成工具(如Jenkins或Travis CI)可以帮助自动化测试,确保每次代码提交后都能立即发现潜在问题。 6. **设计原则**:TDD 促进了良好的设计原则的应用,如单一职责原则(SRP...

    String-Calculator:TDD练习-软件工程

    在实际的软件开发中,TDD不仅能帮助我们发现并修复问题,还可以促进团队间的沟通,因为它要求代码的设计和实现都要以测试为出发点。在String-Calculator-master这个压缩包中,包含了完成这个练习的所有源代码和测试...

    String-Calculator:TDD分配

    标题中的“String-Calculator:TDD分配”指的是一个编程项目,其中的任务是实现一个字符串计算器,并遵循测试驱动开发(Test-Driven Development, TDD)的方法。TDD是一种软件开发过程,它要求开发者首先编写测试,...

    class-3980:TDD wJUnit

    TDD强调"测试先行",有助于提高代码质量,减少缺陷,并促进设计的改进。在Java领域,JUnit是一个广泛使用的单元测试框架,它使得编写和运行测试用例变得简单易行。现在我们深入探讨TDD与JUnit在Java开发中的应用。 ...

Global site tag (gtag.js) - Google Analytics