`
yangzb
  • 浏览: 3502562 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

顿悟测试驱动开发

    博客分类:
  • PM
阅读更多

很早就听闻过测试驱动开发,在加入ThoughtWorks之前,在参加ThoughtWorks University之前。但是一直都不得其法,没有登堂入室。这次从印度参加了“有史以来最好的一届”的TWU,顿悟了测试驱动开发(以下简称TDD),算是最大的收获。
其 实TDD很简单,只要你不把它当测试。没错,就这么简单。把TDD当测试来写,你想着的就是如何找出已有代码的错误。想象着的是一副从迷宫中拯救出受困公 主的图景。这个时候你就会受困于该如何去测与测什么的问题。假若你不把TDD当测试来写,顿时就会豁然开朗,拨云见日。
我认为TDD的本质在于, 通过写测试来写代码。也就是在每一行产品代码落笔之前,先写一个测试来给这行代码找一个存在的理由。在参加TWU期间,一位名叫Garret Smith的培训师(Coach)反复和我们强调任何一行代码都要有测试。而且给我们举了一个实际例子:公司的英国办公室的一位同事编写一个软件专门用来 对付无测试的代码。方式就是一行行地删除产品代码,如果测试仍然能够通过,这行代码就被删除了。这个例子给我的印象很深刻,因为我觉得它一语道破了天机。 TDD其实就这么简单,让你的产品代码不能随便被别人“删除”。
当用这个视角去实践TDD的时候。测试的名字就会很细节化。具体到描述什么条件时 以什么参数调用什么方法时会有什么返回值。回头一想,这些测试对应着是什么呢?其实就是javadoc文档!那么TDD又是什么一个过程呢?就是先写文档 再写代码的过程。这么一说来,TDD就很自然了。你先想到一个很简单的功能要实现,有很多的代码要写。从一堆要写的代码中选择出最简单的部分(比如边界的 情况)来写。把这部分代码的外部行为想好,写出对应的测试来,并给测试取一个能够当文档使的名字。
知道了TDD的本质与单元测试的本质之后,再来 看一下我认为唯一关键的一个实践,那就是Mock。没有Mock的单元测试就很可能不是单元测试,也许是集成测试,也许是功能测试,总之不是TDD中所需 要的那种能够驱动你开发的测试。任何牵涉到两个有行为的类之间交互的测试,都要Mock一个测另外一个,不然就会对象之间的互相影响就会使得测试测不准, 无法确知问题所在,也无法让你的测试能够清晰地表达意图。
也许以前有一些书籍或者人讲过TDD只适合测算法,单元测试要做到黑盒,写Mock要适 度之类的话。我目前的认识是这些见解容易让人把单元测试真当测试来看了。其实矫枉过正也无妨,就把TDD测试不当测试吧。总结一下就是TDD是确保你的代 码不被别人意外“删掉”的开发方式,单元测试是你产品代码的文档,Mock是编写单元测试时最重要的技术,用于隔离测试对象行为。

分享到:
评论

相关推荐

    瞬间·顿悟作文.doc

    作者提到“人生的钥匙永远留在你的手上”,这与IT行业的自主学习和自我驱动精神相契合。在IT领域,个人的成长和进步很大程度上取决于自我学习和对新技术的探索,就像握在手中的钥匙,你可以选择打开知识的大门,去...

    顿悟编程(转)

    该文档讲述了作者学习编程以来的所有心得体会,编程世界里数据和代码的关系

    树莓派驱动开发实战,基于Raspberry Pi 3B+平台学习Linux驱动开发的记录与分享

    基于Raspberry Pi 3B+平台学习Linux驱动开发的记录与分享,旨于对Linux内核模块机制的熟悉、常见接口的Linux驱动实现、常用模块的原理掌握。原则上,每个驱动模块我都会编写对应的教程(因为我相信掌握知识最有效的...

    应急管理(提示顿悟).pdf

    应急管理(提示顿悟).pdf

    SQLServer2000万能JDBC驱动

    SQLServer2000万能JDBC驱动

    甘肃省甘谷县2020学年高二语文下学期第一次月考试题新人教版.doc

    1. 阿基米德式“顿悟”的独特机制:顿悟是一种突发性的思维突破,通常与大脑的非寻常工作方式有关。在科学研究中,这种现象被认为与大脑右半球颞叶的前上颞回区域的活动密切相关。当人们经历“顿悟”时,这个区域会...

    Stable Diffusion六脉神剑,小白的福音,看了立刻顿悟入门.pdf

    ### Stable Diffusion六脉神剑详解 #### 一、概览 Stable Diffusion作为一种前沿的人工智能技术,被广泛应用于图像生成领域。对于初学者而言,掌握这项技术的入门并非易事。本文将深入剖析Stable Diffusion的六大...

    SQLserver2005最新JDBC驱动

    SQL Server 2005是微软公司开发的一款关系型数据库管理系统,它在企业级应用中广泛使用,提供了高效的数据存储、管理和分析能力。而JDBC(Java Database Connectivity)则是Java平台上的一个标准接口,用于连接Java...

    epiphany-dv-archive:顿悟设计验证基础架构

    顿悟设计验证基础架构 ##目录结构 目录 内容 docs 安装指南和运行方向 伊根 指令(程序)生成器 en 内存映射事务生成 比较基因 将测试输出与预期结果进行比较 主显节 构建被测设备 剧本 各种DV构建和运行脚本 ##...

    甘肃省甘谷县高二语文下学期第一次月考试题新人教版 试题.doc

    研究者通过功能磁共振成像和脑电图技术观察到,当人们经历“顿悟”时,大脑右半球的前上颞回区域活动明显增强,并且在“顿悟”前会有特定的高频脑电波出现。这一发现提示我们,“顿悟”可能与大脑的非寻常工作模式...

    新冠病毒疫情与企业的未来:高管的顿悟揭示出后疫情时代的机遇精品报告2020.pdf

    根据提供的文件内容,我们可以从中提炼出以下几个重要的知识点: 1. **后疫情时代的商业环境变化**: - 新冠病毒疫情引发了全球范围内的商业环境巨变,迫使企业重新审视其商业策略和运作方式。...

    创新能力培养4课后测试答案.doc

    Wallas提出的创造过程理论是理解创新思维的重要框架,他认为创造过程包括准备期、酝酿期、顿悟期和验证期四个阶段。准备期是积累知识和信息的阶段,个体在此期间搜集相关数据,整合新旧知识。酝酿期则是将问题放在脑...

    创新能力的开发.doc

    总之,创新能力的开发不仅关乎个人的成长,也直接影响到科技和经济社会的进步。每个人都应认识到自己潜在的创造力,并通过学习和实践创新思维方法,不断提升自己的创新能力,为个人发展和集体进步贡献力量。

    逻辑思维及形象思维的区别及联系.doc

    【逻辑思维与形象思维的区别】 逻辑思维是一种基于概念、判断和推理的思维方式,它强调抽象和概括,旨在揭示事物的本质和规律。逻辑思维的核心在于它的系统性和严谨性,通过归纳和演绎、分析和综合等方法,从已知...

    潜力激活与创造力开发试卷四[参照].pdf

    20. **比奈量表**:法国心理学家比奈和他的学生开发了认知能力测试,以评估不同年龄段的智力得分。 21. **绩效考核制度创新**:通过创新绩效考核制度,可以激励员工突破常规,提高创新水平。 22. **思维模式的影响...

    九十九段精彩的人生感悟(八).doc

    人生顿悟:找到事情去做,让生活充满活力。 【72】金钱虽重要,但不能成为人生的全部。我们不能成为金钱的奴隶,因为它可能束缚我们的自由。过度关注金钱可能会导致心理压力,甚至可能损害个人的幸福感。人生的目标...

    创新能力的开发.pdf

    创新能力的开发是提升个人和组织竞争力的关键因素。创造力并不仅仅属于少数天才,而是每个人内在的能力。陶行知先生强调,每个人都有创造潜力,只要有适当的环境和方法,就能激发这种潜能。 创造性思维是创新的核心...

Global site tag (gtag.js) - Google Analytics