- 浏览: 36679 次
最新评论
一直觉得,近年来,真正有意义的技术或者思想只有两个:Refactor(重构)和TDD(Test Driven Development,测试驱动开发)。有趣的是,这两个都是从SmallTalk流传出来的。
单元测试的重要性自不必提。今天和大家分享一下在学习TDD中感受到的几点心得。
1、先写测试,后实现代码
2、只实现当前测试中所需的最小功能的代码,尽管有时并不符合逻辑
3、测试代码中尽量避免冗余
4、随着测试的深入,不得不逐渐的修改代码,甚至是对结构的大规模修改。与此同时。代码本身也逐渐靠近实际的逻辑要求。但是,任何时候都不需要也不应该修改先前的测试代码,并且应该保证其的成功运行。
5、延迟实现 Delaying Implementatin Decisions
其实,TDD的关键在于RD自身出发点的转换。一般情况下,我们习惯于考虑如何实现功能,用什么样的数据结构、用什么算法、怎样分层、怎样传递值、……而在作TDD的时候,我们必须转换为只注重功能的本身而不是实现的方法或细节。或许有些难以理解,特别是面对不合逻辑的实现代码时。其实,正如前文所说,如果把TDD看作是一种设计技术而不是测试技术,也许我们会很好的理解这些。
有一种说法叫做“不能让RD测试自己的代码”。这样说的原因是RD只关注与程序的结构和实现,不能从功能的角度从外界考虑程序的流程。也许,只有置身事外,才能做好TDD的测试和开发。
单元测试的重要性自不必提。今天和大家分享一下在学习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.
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.
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.
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.
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.
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的测试和开发。
发表评论
-
入职第一天
2004-07-12 20:20 544很喧闹的一天新人训。当然,可以说是激情四射,或者说是嘈杂无聊。 ... -
迎接部门训
2004-07-13 18:07 501今天开始迎接部门的专业训了,C#、SQL Server、数据库 ... -
生活的颜色
2004-07-14 18:57 570一个诚实的裁判就这样慷慨赴义了,很多很多黑暗中的裁判们却还好端 ... -
历史的沉思
2004-07-16 12:43 631很久以前的一篇文章, ... -
选择的未来
2004-07-17 15:11 480先提一个问题:做一个技术员,技术能力重要还是业务知识重要?再提 ... -
统一的困惑
2004-07-19 20:45 524RUP(Rational统一过程)的基本开发方式是迭代。需求迭 ... -
开发的效率
2004-07-21 17:44 524面对多人协同开发的分层系统,有两种开发方式:其一、一人负责一到 ... -
模型或模式
2004-07-22 23:27 634不论是吵吵嚷嚷的软件工程、XP建模,还是死灰复燃的MDA、一心 ... -
对象的效率
2004-07-28 21:22 531面向对象带来方便的同时亦带来很多的问题。类的继承在扩展的同时也 ... -
泪写的文章
2004-07-29 20:20 505今天我又哭了。一个月前,我还觉得哭于我是很遥远的事情。甚至,我 ... -
期待的精彩
2004-07-31 11:08 525好久好久没有看到国足这么酣畅的胜利了,好久好久没有体会到看球的 ... -
转载的文章
2004-08-01 10:50 496今天转载一篇吧,记录一段可笑的过往。 别了,Dr.Dobb's ... -
近期的任务
2004-08-06 12:54 5701、Test Driven Development2、Java ... -
上海印象一
2004-08-09 22:28 552车一进入上海,扑面而来的就是一片一片的高楼,黑压压地便压了过来 ... -
上海印象二
2004-08-10 21:19 510上海当然是天堂,但也是仅对一部分人一部分地区。对大多数人大部分 ... -
转载的文章
2004-08-13 23:38 444O/R Mapping中的继承~ http://www.cnb ... -
生日的祝福
2004-08-15 10:49 699今天是agate的生日。尽管这句话已经被用得很俗,不过我还是想 ... -
等爱的狐狸
2004-08-27 18:16 556“对我来说,你还只是一个小男孩,就像其他千万个小男孩一样。我不 ... -
飞翔的寓言
2004-08-30 20:58 500我才发现梦想与现实间的差别逆着风让自己体验每一个感觉就像是寓言 ... -
客户端回调
2004-09-07 12:30 669Client Callback 是ASP.NET 2.0新增 ...
相关推荐
标题中的"TDD之Swing一个另类的计算器实现心得"表明了这篇博文是关于使用测试驱动开发(Test-Driven Development, TDD)方法来构建一个基于Java Swing的计算器应用的心得体会。在TDD中,开发者先编写测试用例,然后...
书中还分享了许多关于TDD的实践心得和经验总结: - **培养良好的编码习惯**:如遵循命名规范、保持代码简洁等,这些习惯有助于提高代码质量。 - **加强团队合作**:鼓励团队成员之间的交流和合作,共同解决问题,...
11. **单元测试与持续集成**:TDD(Test-Driven Development)和持续集成是现代软件开发中的重要实践,C#有NUnit、xUnit等单元测试框架,以及TeamCity、Jenkins等持续集成工具。 12. **.NET Core与跨平台**:随着...
以下是关于敏捷开发的26个心得所涵盖的核心原则: 1. **单一任务完成原则**:开发过程中,应专注于一个用例的完整实现,确保其功能、测试用例和文档都完备后再进行下一个用例的开发,避免并行任务导致的浪费。 2. ...
TDD 练习心得对TDD的认识走过几个阶段,先是狂热好辨,中间有段低落,现在对它充满信心,唯恐练习不足。跟养成任何一个习惯一样,一开始总是有种种不适,觉得这也不会,那也不顺,这是习惯养成第一阶段,此时唯一...
在深入探讨"C++技术心得"之前,我们先要理解C++这一编程语言的核心特性。C++是1983年由Bjarne Stroustrup在C语言的基础上发展起来的,它结合了过程化编程、面向对象编程和泛型编程,使得程序员能够更高效地构建大型...
此外,它可能还会介绍软件工程的最佳实践,如代码重构、测试驱动开发(TDD)和持续集成(CI)。 对于面试部分,书中的内容可能包括如何准备面试,例如如何自我介绍、如何回答行为面试问题以及如何有效地展示自己的项目...
对于软件开发过程,书中或许讨论了版本控制(如Git)、设计模式、软件工程原则以及测试驱动开发(TDD)等重要概念,这些都是现代软件开发中的核心实践。理解并能应用这些知识,不仅可以提升个人的编程效率,也有助于...
《敏捷实践的秘密(来自软件界实践者的经验心得)》这一资料集揭示了敏捷开发的核心理念和实际操作中的技巧。通过团队建设、技术探析、敏捷实践和敏捷测试等多个角度,我们可以深入理解如何在项目中成功地实施敏捷。...
21. 测试驱动开发:采用TDD(Test Driven Development)方法,先写测试再编写代码,可以确保代码的质量。 22. 学习新技术:关注云计算、人工智能、大数据等领域的新技术,如Kubernetes、Spark、Hadoop等,拓宽视野...
#### TDD与FDD双工技术概述 - **TDD时分双工**:一种在相同频率信道上利用不同时间片段进行双向通信的技术。适用于需要灵活配置上行与下行链路的应用场景。 - **FDD频分双工**:一种在不同频率信道上进行双向通信的...
在深入探讨"C语言测试心得"这个主题之前,我们先来理解一下C语言的基本概念。C语言是一种强大的、低级别的编程语言,由贝尔实验室的Dennis Ritchie于1972年开发。它以其简洁的语法、高效性能和对底层硬件的直接访问...
本书以朴实和幽默的语言风格呈现,就像结对编程中的伙伴一样,耐心地分享作者的心得体会。对于希望提高编程和软件开发质量的读者来说,本书是一本珍贵的学习资源。 书中强调了TDD的以下几个核心要点: 1. 写测试比...
这个压缩包文件名为"Java技术文章",显然包含了作者对于Java编程语言在实际应用中的深入理解和心得体会。以下是基于这些信息提炼出的一些Java技术相关的知识点: 1. **Java基础知识**:作为开发者,对Java的基础...
测试驱动开发(TDD)** - **实践要点**:在编写代码之前先编写测试用例。 - **关键价值**:确保代码的质量和功能性,减少缺陷。 **10. 清理无用代码** - **实践要点**:定期审查代码库,移除不再需要或不产生价值...
10. **TDD (Test-Driven Development)**:TDD是一种软件开发方法,强调先编写测试用例,然后编写满足这些测试的代码。 11. **HTTP (Hypertext Transfer Protocol)**:HTTP是互联网上应用最为广泛的一种网络协议,...
15. **TDD (Test-Driven Development)**:TDD是一种软件开发方法,强调先编写测试,再编写实现代码以通过测试。 16. **HTTP, FTP, TCP/IP, SMTP**:这些都是网络协议,HTTP用于网页传输,FTP用于文件传输,TCP/IP是...
该实训侧重于TDD-LTE(时分双工长期演进)网络,并以华为的eNodeB设备DBS3900作为主要实验平台。通过本次实训,学生可以: 1. **熟悉LTE网络的整体结构**:包括EPC(演进分组核心)、eNodeB以及用户设备之间的连接...