zoukankan      html  css  js  c++  java
  • 测试驱动开发的意义何在

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

      “

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

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

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

      ”

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

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

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

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

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

      

  • 相关阅读:
    HashMap深度解析:一文让你彻底了解HashMap
    阿里十年技术大咖,教你如何分析1.7中HashMap死循环
    HashMap 底层实现、加载因子、容量值及死循环
    HashMap为什么是线程不安全的
    一文搞定HashMap的实现原理和面试
    @面试中常问的List去重问题,你都答对了吗?
    不按套路出牌,HashMap负载因子超过1会怎样?
    HashMap是如何工作的
    Jdk7与Jdk8 中的 HashMap 和 ConcurrentHashMap 全解析
    深入理解HashMap+ConcurrentHashMap的扩容策略
  • 原文地址:https://www.cnblogs.com/iammatthew/p/2417095.html
Copyright © 2011-2022 走看看