TDD,我来了!
刚收到这本书的时候,匆匆翻了几页,觉得这本书的实用性会很强。当时稍稍有点忧虑,因为自己在遇到这本书之前,脑子里对测试驱动开发是没有多少概念的,这么强的实践性会不会给一个初入此门的人带来很多阅读上的障碍呢?待我慢慢地看完这本书,虽然很多细节性的实践方法还不能够有更深的领悟,但对于一个初学者来说,这本书是非常值得一读的而且还是能够一窥TDD的精彩。Lasse深入浅出地道出了测试驱动开发的真谛,字里行间传达出从他自己丰富的软件开发经验中提取的测试驱动开发实践之道。
其实在刚开始翻看这本书的时候,我还有一个想法,如果我能够在边阅读,边实践书中的一些基本原则和方法,可能效果会更好。比如通过TDD的方式去实践一些小的项目,等养成了稳定的TDD思维习惯之后,自己的开发工作就会潜移默化地收到TDD的影响,到时候会有更深的体会。读这样一本实践性很强的书,更适合“边做边学”的方式。可惜由于时间有限,读一遍的时候我没有这么做,只能在平时的过程中努力地去实践现在学到的。
测试驱动开发是极限编程中倡导的程序开发方法,方法主要是先写测试程序,然后再编码使其通过测试。看上去很简单的一个过程,却与传统的开发格格不入,惯性的力量导致开始时很难从传统过程的思维方式中摆脱出来。也许是上述的原因,促使Lasse花了一定的篇幅在第一章详细阐述TDD的好处。同时本章还介绍了ATDD,和TDD相比,ATDD更多的是针对系统的开发,而TDD针对的则是组件的构造。Lasse断言只要能认真做到这两种TDD,就能保证用户满意的高质量代码。而ATDD的详细介绍,将在最后一章来铺开,着实吊我胃口。
第二章和第三章,Lasse开始聊如何去实践TDD。Lasse用了一个简单的例子来说明这个问题。可惜的是,这个例子看起来似乎太简单了,开发一个模板引擎。通过这样一个简单的例子,Lasse将完整的一个TDD流程展现给了我们。第三章Lasse仍然使用这个模板引擎的例子,展示了小步重构在TDD中的作用。读到这儿,我就有点小的抱怨,这个例子似乎太简单,真的能承担诠释TDD的重担吗?
紧接着,第四章Lasse分析了TDD的一些原则和模式。看来前两章的那个例子,只是一个引子,真正的技巧在这里。到现在我还没有很深的体会,但我感觉得出来,这些使用的技巧都是Lasse多年开发经验的提炼。Lasse采用了一些简单的小例子,来阐明其中的很多道理,使人一目了然,如:为何要避免static关键字以及singleton模式,为何低耦合会使代码更容易测试等等。至于如何在遗留的代码上继续前行,我想这是一个很有意思的话题,但Lasse并没有详细铺开。
到这里,本书的第一部分就结束了。第二部分的侧重点在于如何将单元测试应用到具体的技术中。第五章讲的是如何将TDD应用到Web组件中。第六章,如何将TDD应用到数据访问中,这是另一个复杂的领域,特别在不允许直接对文件系统或数据库进行测试的场景中。第七章则是与时间相关的组件和线程的单元测试。Lasse解释了如何用虚设的系统时间测试日志输出。关于多线程的测试,我觉得如有更多例子,效果可能会更好,至少我觉得还不过瘾。第八章侧重于Swing UI组建的单元测试。如果你从事Swing有关的开发,你应该要好好读一读。Lasse给出了很多不错的例子来描述如何做这些测试。
本书的第三部分很值得一读。如我前面说的,第三部分Lasse描述了ATTD(验收驱动测试开发)的概念和实践过程,讲述了用户故事,分析了ATTD的好处,讨论了如何使用Fit来构建测试,同时还介绍了利用ATTD工具验收测试的方法。最后还讨论如何将TDD应用到当下的项目开发中,具有实际意义。
作为一个初学者,虽然我还不能完全消化这本书的精髓,但我相信这是一本好书,值得推荐,多读。
PS:
其实网上版本还有一个第13章(印刷版没有的),讲的是有关EJB组件的单元测试。
Chapter 13. Test-driving EJB components
(This is an online bonus chapter, not found in the printed text.)
For years, the most difficult code to test has been EJB code. The recent EJB 3 specification has improved this situation in many respects, but is not yet used everywhere. Libraries like MockEJB allow us to apply many of the same techniques to EJBs we apply to POJOs, even under the older EJB 2 specification. Session-bean, entity-bean, message-bean, and timer-service testing are covered with many examples.
来源:http://www.javalobby.org/articles/tdd-david/
其实在刚开始翻看这本书的时候,我还有一个想法,如果我能够在边阅读,边实践书中的一些基本原则和方法,可能效果会更好。比如通过TDD的方式去实践一些小的项目,等养成了稳定的TDD思维习惯之后,自己的开发工作就会潜移默化地收到TDD的影响,到时候会有更深的体会。读这样一本实践性很强的书,更适合“边做边学”的方式。可惜由于时间有限,读一遍的时候我没有这么做,只能在平时的过程中努力地去实践现在学到的。
测试驱动开发是极限编程中倡导的程序开发方法,方法主要是先写测试程序,然后再编码使其通过测试。看上去很简单的一个过程,却与传统的开发格格不入,惯性的力量导致开始时很难从传统过程的思维方式中摆脱出来。也许是上述的原因,促使Lasse花了一定的篇幅在第一章详细阐述TDD的好处。同时本章还介绍了ATDD,和TDD相比,ATDD更多的是针对系统的开发,而TDD针对的则是组件的构造。Lasse断言只要能认真做到这两种TDD,就能保证用户满意的高质量代码。而ATDD的详细介绍,将在最后一章来铺开,着实吊我胃口。
第二章和第三章,Lasse开始聊如何去实践TDD。Lasse用了一个简单的例子来说明这个问题。可惜的是,这个例子看起来似乎太简单了,开发一个模板引擎。通过这样一个简单的例子,Lasse将完整的一个TDD流程展现给了我们。第三章Lasse仍然使用这个模板引擎的例子,展示了小步重构在TDD中的作用。读到这儿,我就有点小的抱怨,这个例子似乎太简单,真的能承担诠释TDD的重担吗?
紧接着,第四章Lasse分析了TDD的一些原则和模式。看来前两章的那个例子,只是一个引子,真正的技巧在这里。到现在我还没有很深的体会,但我感觉得出来,这些使用的技巧都是Lasse多年开发经验的提炼。Lasse采用了一些简单的小例子,来阐明其中的很多道理,使人一目了然,如:为何要避免static关键字以及singleton模式,为何低耦合会使代码更容易测试等等。至于如何在遗留的代码上继续前行,我想这是一个很有意思的话题,但Lasse并没有详细铺开。
到这里,本书的第一部分就结束了。第二部分的侧重点在于如何将单元测试应用到具体的技术中。第五章讲的是如何将TDD应用到Web组件中。第六章,如何将TDD应用到数据访问中,这是另一个复杂的领域,特别在不允许直接对文件系统或数据库进行测试的场景中。第七章则是与时间相关的组件和线程的单元测试。Lasse解释了如何用虚设的系统时间测试日志输出。关于多线程的测试,我觉得如有更多例子,效果可能会更好,至少我觉得还不过瘾。第八章侧重于Swing UI组建的单元测试。如果你从事Swing有关的开发,你应该要好好读一读。Lasse给出了很多不错的例子来描述如何做这些测试。
本书的第三部分很值得一读。如我前面说的,第三部分Lasse描述了ATTD(验收驱动测试开发)的概念和实践过程,讲述了用户故事,分析了ATTD的好处,讨论了如何使用Fit来构建测试,同时还介绍了利用ATTD工具验收测试的方法。最后还讨论如何将TDD应用到当下的项目开发中,具有实际意义。
作为一个初学者,虽然我还不能完全消化这本书的精髓,但我相信这是一本好书,值得推荐,多读。
PS:
其实网上版本还有一个第13章(印刷版没有的),讲的是有关EJB组件的单元测试。
Chapter 13. Test-driving EJB components
(This is an online bonus chapter, not found in the printed text.)
For years, the most difficult code to test has been EJB code. The recent EJB 3 specification has improved this situation in many respects, but is not yet used everywhere. Libraries like MockEJB allow us to apply many of the same techniques to EJBs we apply to POJOs, even under the older EJB 2 specification. Session-bean, entity-bean, message-bean, and timer-service testing are covered with many examples.
来源:http://www.javalobby.org/articles/tdd-david/
有关键情节透露