`
阅读更多
一直觉得,近年来,真正有意义的技术或者思想只有两个:Refactor(重构)和TDD(Test Driven Development,测试驱动开发)。有趣的是,这两个都是从SmallTalk流传出来的。

单元测试的重要性自不必提。今天和大家分享一下在学习TDD中感受到的几点心得。

1、先写测试,后实现代码

We are thinking about how the class and its methods are used instead of how to implement it, 
which 
is an important distinction. This is why many people refer to test-driven development as 
much a design technique 
as a testing technique.

2、只实现当前测试中所需的最小功能的代码,尽管有时并不符合逻辑

There is a balance to archieve between anticipating futher tests and implementation and being 
totally ignorant of the next text. In the beginning, you should focus on the test. You
're writing and 
not thinking about the other tests. As you become familiar with the technique and the task, you 
can increase the size of the steps. You should always keep in mind that larger steps and harder 
to debug than smaller steps.

3、测试代码中尽量避免冗余

Before we decide with test to implement next, we need to make sure that there is no code 
duplication. Use 
private instant variable and Use SetUp & TearDown Property. Notice to move     
duplication variables.

4、随着测试的深入,不得不逐渐的修改代码,甚至是对结构的大规模修改。与此同时。代码本身也逐渐靠近实际的逻辑要求。但是,任何时候都不需要也不应该修改先前的测试代码,并且应该保证其的成功运行。

You should notice that we made big changes to the entire implementation, and no tests were 
broken afterward. This 
is a good example of building confidence in the code that we have test 
for.We are assured that, base on our tests, the code is no worse that is previously.

5、延迟实现   Delaying Implementatin Decisions

We did not do this because we are trying to let the tests drive the need for functionality instead 
of us thinking we know what 
is needed and then writing tests that verify than thinking. It is a 
difference that 
this test demonstrats very clearly.

其实,TDD的关键在于RD自身出发点的转换。一般情况下,我们习惯于考虑如何实现功能,用什么样的数据结构、用什么算法、怎样分层、怎样传递值、……而在作TDD的时候,我们必须转换为只注重功能的本身而不是实现的方法或细节。或许有些难以理解,特别是面对不合逻辑的实现代码时。其实,正如前文所说,如果把TDD看作是一种设计技术而不是测试技术,也许我们会很好的理解这些。

有一种说法叫做“不能让RD测试自己的代码”。这样说的原因是RD只关注与程序的结构和实现,不能从功能的角度从外界考虑程序的流程。也许,只有置身事外,才能做好TDD的测试和开发。
分享到:
评论

相关推荐

    TDD之Swing一个另类的计算器实现心得

    标题中的"TDD之Swing一个另类的计算器实现心得"表明了这篇博文是关于使用测试驱动开发(Test-Driven Development, TDD)方法来构建一个基于Java Swing的计算器应用的心得体会。在TDD中,开发者先编写测试用例,然后...

    测试驱动开发的3项修炼-走出TDD丛林

    书中还分享了许多关于TDD的实践心得和经验总结: - **培养良好的编码习惯**:如遵循命名规范、保持代码简洁等,这些习惯有助于提高代码质量。 - **加强团队合作**:鼓励团队成员之间的交流和合作,共同解决问题,...

    C# 学习心得(最新)

    11. **单元测试与持续集成**:TDD(Test-Driven Development)和持续集成是现代软件开发中的重要实践,C#有NUnit、xUnit等单元测试框架,以及TeamCity、Jenkins等持续集成工具。 12. **.NET Core与跨平台**:随着...

    程序员心得

    以下是关于敏捷开发的26个心得所涵盖的核心原则: 1. **单一任务完成原则**:开发过程中,应专注于一个用例的完整实现,确保其功能、测试用例和文档都完备后再进行下一个用例的开发,避免并行任务导致的浪费。 2. ...

    elegant-TDD:TDD 是一种工作方法,其核心要义有二:提升反馈速度、自动化的回归测试

    TDD 练习心得对TDD的认识走过几个阶段,先是狂热好辨,中间有段低落,现在对它充满信心,唯恐练习不足。跟养成任何一个习惯一样,一开始总是有种种不适,觉得这也不会,那也不顺,这是习惯养成第一阶段,此时唯一...

    C++技术心得

    在深入探讨"C++技术心得"之前,我们先要理解C++这一编程语言的核心特性。C++是1983年由Bjarne Stroustrup在C语言的基础上发展起来的,它结合了过程化编程、面向对象编程和泛型编程,使得程序员能够更高效地构建大型...

    编程之法 面试和算法心得

    此外,它可能还会介绍软件工程的最佳实践,如代码重构、测试驱动开发(TDD)和持续集成(CI)。 对于面试部分,书中的内容可能包括如何准备面试,例如如何自我介绍、如何回答行为面试问题以及如何有效地展示自己的项目...

    编程之法 面试和算法心得.zip

    对于软件开发过程,书中或许讨论了版本控制(如Git)、设计模式、软件工程原则以及测试驱动开发(TDD)等重要概念,这些都是现代软件开发中的核心实践。理解并能应用这些知识,不仅可以提升个人的编程效率,也有助于...

    敏捷实践的秘密(来自软件界实践者的经验心得)

    《敏捷实践的秘密(来自软件界实践者的经验心得)》这一资料集揭示了敏捷开发的核心理念和实际操作中的技巧。通过团队建设、技术探析、敏捷实践和敏捷测试等多个角度,我们可以深入理解如何在项目中成功地实施敏捷。...

    java的一些学习心得

    21. 测试驱动开发:采用TDD(Test Driven Development)方法,先写测试再编写代码,可以确保代码的质量。 22. 学习新技术:关注云计算、人工智能、大数据等领域的新技术,如Kubernetes、Spark、Hadoop等,拓宽视野...

    TD-LTE个人总结

    #### TDD与FDD双工技术概述 - **TDD时分双工**:一种在相同频率信道上利用不同时间片段进行双向通信的技术。适用于需要灵活配置上行与下行链路的应用场景。 - **FDD频分双工**:一种在不同频率信道上进行双向通信的...

    C语言测试心得

    在深入探讨"C语言测试心得"这个主题之前,我们先来理解一下C语言的基本概念。C语言是一种强大的、低级别的编程语言,由贝尔实验室的Dennis Ritchie于1972年开发。它以其简洁的语法、高效性能和对底层硬件的直接访问...

    测试驱动开发.pdf测试驱动开发.pdf

    本书以朴实和幽默的语言风格呈现,就像结对编程中的伙伴一样,耐心地分享作者的心得体会。对于希望提高编程和软件开发质量的读者来说,本书是一本珍贵的学习资源。 书中强调了TDD的以下几个核心要点: 1. 写测试比...

    Java技术_开发心得_两年开发经验_(文章汇总...热)

    这个压缩包文件名为"Java技术文章",显然包含了作者对于Java编程语言在实际应用中的深入理解和心得体会。以下是基于这些信息提炼出的一些Java技术相关的知识点: 1. **Java基础知识**:作为开发者,对Java的基础...

    关于敏捷开发的26个心得.docx

    测试驱动开发(TDD)** - **实践要点**:在编写代码之前先编写测试用例。 - **关键价值**:确保代码的质量和功能性,减少缺陷。 **10. 清理无用代码** - **实践要点**:定期审查代码库,移除不再需要或不产生价值...

    JAVA基础加强 --学习心得一(JAVA中常用英文单词简写释义).docx

    10. **TDD (Test-Driven Development)**:TDD是一种软件开发方法,强调先编写测试用例,然后编写满足这些测试的代码。 11. **HTTP (Hypertext Transfer Protocol)**:HTTP是互联网上应用最为广泛的一种网络协议,...

    JAVA基础加强 --学习心得一(JAVA中常用英文单词简写释义).pdf

    15. **TDD (Test-Driven Development)**:TDD是一种软件开发方法,强调先编写测试,再编写实现代码以通过测试。 16. **HTTP, FTP, TCP/IP, SMTP**:这些都是网络协议,HTTP用于网页传输,FTP用于文件传输,TCP/IP是...

    LTE实训报告.docx编程资料

    该实训侧重于TDD-LTE(时分双工长期演进)网络,并以华为的eNodeB设备DBS3900作为主要实验平台。通过本次实训,学生可以: 1. **熟悉LTE网络的整体结构**:包括EPC(演进分组核心)、eNodeB以及用户设备之间的连接...

Global site tag (gtag.js) - Google Analytics