Clean code that works.
这是测试驱动开发(TDD)所追求的目标。具体应该怎样做呢?TDD给出的“套路”如下:
- Quickly add a test
- Run all tests and see the new one fail
- Make a little change
- Run all tests and see them all succeed
- Refactor to remove duplication
这本书中文版正文大概就150页,却有31章,每章5页左右。简直就是以TDD的风格写的一本TDD的书,书中有3大部分。下文一一做个简述。
第一部分,资金实例,
以一个资金计算的实际例子,包括资金加,乘还有汇率转换的操作演示了如何以TDD的方式开发一个有用的应用。书中的例子是已Java写的,我用swift和XCTest也实现了一份。跟着做下来,能够获得对TDD开发很直观的体验,很有手感噢。大概在4,5年前,我第一次听闻TDD的时候,也看过这本书,(看了豆瓣里这本书标记想读的时间是2011-11-16,怎不感叹时光飞逝,一无所成。)这次重读,感觉是在读一本新书。我想起《倚天屠龙记》里张三丰教张无忌打太极拳的那个桥段。上次阅读就像是众人在一旁张三丰在打太极,而这次是跟着一旁练习,所谓“get your hands dirty”,最秒的是,测试用例本身能够第一时间告诉你做对了还是做错了。就像是老师傅给你在一旁矫正动作一样。所以,千万不要错过这种体验!很可能会改变自己看待和编写代码的方式。
第二部分 xUinit
正如作者所说,以TDD的方式编写一个xUnit单元测试库,就像是给自己的大脑做外科手术。事实上,作者Kent Beck就是JUnit的一位作者,另一位是同样大名鼎鼎的Erich Gamma(《设计模式》的第一作者。)书中用Python语言编写了一个简单的单元测试库。我原本想跳过的,后面硬着头皮看下来了,对xUnit的理解也更深一层。
对于为什么要这样做,Kent说,
There are a couple of reasons for implementing it even if there is a version already available:
- Mastery—The spirit of xUnit is simplicity. Martin Fowler said, “Never in the annals of software engineering was so much owed by so many to so little code.” Some of the implementations have gotten a little complicated for my taste. Rolling your own will give you a tool over which you have a feeling of mastery.
- Exploration—Say you are faced with a new programming language. By the time you have implemented the first 8-10 test cases, you will have explored many of the facilities you will be using in daily programming
老司机的套路果然深,让我膜拜不已。xUnit这一部分的内容,也正是作者一遍查着语言参考一边编写出来的。受此启发,我拉了Swift XCTest的库看,不过实在没有信心自己撸一个。
第三部分 模式
经过了第一和第二部分的洗礼,相信读者对TDD已经有些切身体会了。第三部分再升华一下,如果前两部分是拆解招式,第三部分就是传授心法了。此部分微言大义,都是作者的经验总结。对于初学者未免过于简略。就连重构和模式也是一笔带过。这两个主题都有一箩筐的书。好在这几年经过“重构”和“设计模式”的洗礼,看懂和接受是没问题。关键是要练习,让TDD成为自己写代码的“肌肉记忆”。
最后,做个总结,TDD,重构,设计模式。这三者有天然的联系(想想JUnit的两位作者)还有”Working Effectively with Legacy Code"《修改代码的艺术》书里对“遗留代码”的定义:“遗留代码就是那些没有编写测试的代码。”TDD是重构的基础,为重构提供了一张“安全网”,它也能倒逼产生更好的设计。设计模式为重构指明了目标。而正是通过重构的角度,才可能真正的理解设计模式,掌握TDD。此刻有种突破自己限制的感觉,这感觉来的有点晚。有种“我竟然找到了捷径,可惜身已不在起点。” “出来混,总是要还的。” 早年阅读技术书就像读小说,不求甚解。是该改变多做练习了。
这本书以TDD简洁的风格写就,作为阅读心得,自然不敢废话连篇,就此打住!
网友评论