范尼是德鲁伊

matthew的技术博客

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

  初次被问到这个问题,脑子有点发懵,进ThoughWorks快一年了,测试驱动开发(TDD)了快一年,实在是没有认真想过这个问题。在一次聚会上,被问到这个问题,我是这样回答的。

  “

    1.先写测试,可以快速确定我们需要做什么,保证业务的正确性。

    2.根据测试的范围,我可以快速缩小问题域,并且集中精力只做我关心的部分,不会受到其他因素的影响。

    3.测试运行的结果,以最快的反馈速度的告诉我,我的代码是否正确。

  ”

  咋一听好像挺有道理,有位同事幽幽的补充道:“你忽略了简单设计”。

  那什么是简单设计呢?简单设计不是说任何功能都以最简单的形式完成,如果真的这样,那就没有数据库了,全部存成txt多简单。而是设计在前,简单在后:在满足现阶段甚至短时间内可以预见的需求改变的基础上,以一种高内聚,低耦合,职责明确,可扩展性高,容易理解的代码设计完成。我理解的简单,是说代码理解起来很简单,添加/删除功能很简单,而不是把所有代码放在一起,写起来很“简单”的程序,改起来不简单的代码。

  那简单设计和TDD有什么关系呢?昨天参加郑大夜校的时候,和同事一起做一个之前做过的编程题目。在测试通过之后,我突然被同事无意中写出的一小段代码所吸引(因为我之前写过,对结果有预期,所以看到同事不一样的实现还是比较新鲜的),那部分代码是我的心结,因为总感觉有一种更自然,更好的方案存在,可一直摸不着头脑。回家之后,根据记忆重现了测试和代码,并且发现了之前实现的代码坏味道,在一次又一次的重构中,思路渐渐清晰。完成之后,豁然开朗。

  回想起来,我通过一次又一次重构,最终得到了简单设计。重构就像一把锋利的宝剑,把一切丑陋的代码一刀一刀砍掉,酣畅淋漓,让人大呼爽快。而在重构的背后,测试就像是坚实的盾牌,随时保证我们不会因为一时大意,破坏掉之前原有的功能,让我们放心大胆的与丑陋作斗争。宝剑重要还是盾牌重要,我想大家心里都有数,刘邦论功,萧何第一,宝贵的精神遗产呀~~

  所以,TDD能保证我们可以一次又一次的重构代码,并且逐步演进出真正的简单设计来。以后再有人问我TDD的意义何在,除了上面提到的三条外,我还会告诉它,“TDD乃简单设计之良基也”。

  

posted on 2012-03-25 22:19  范尼是德鲁伊  阅读(1223)  评论(4编辑  收藏  举报