- 浏览: 419234 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (244)
- struts2 (15)
- ognl (1)
- hibernate (17)
- gwt (17)
- GROOVY (2)
- GRAILS学习 (7)
- SPRING (4)
- AJAX (2)
- JQUERY (6)
- XML (1)
- DWR (3)
- 线程 (0)
- SVN (0)
- json (1)
- anotation (0)
- 反射 (2)
- rapidframework (0)
- OA工作流 (2)
- 事务 (0)
- mysql (0)
- oracle (26)
- EXTJ (0)
- 求职 (2)
- 随笔 (22)
- 注释 (1)
- java综合 (30)
- 设计模式 (1)
- JSP SERVLET (2)
- 插件 (7)
- 应用 (3)
- HTML (5)
- flex (13)
- android (8)
- javascript (14)
- Exception (0)
- Linux (2)
- 计算机常识 (3)
- EXCEL (2)
- 正则表达式 (1)
- 开源工具 (2)
- 测试 (1)
- 生活 (7)
- 房子 (0)
- 购房大学 (4)
- UML (1)
- 服务器 (1)
- 发展 (1)
- 英语 (1)
- 项目管理 (1)
- 摘 (1)
- 网站 (1)
最新评论
-
a347911:
架构师教程:https://note.youdao.com/s ...
架构师之路--- 一个四年 JAVA 程序员的工作经历 转 -
hzxlb910:
对我帮助很大。
架构师之路--- 一个四年 JAVA 程序员的工作经历 转 -
xly_971223:
引用因此,while (!isInterrupted())也可 ...
Java 终止线程方法 -
zdglt88:
其实这个datagrid挺简单的,没有难度
Jquery easy ui 之datagrid简介 -
完善自我:
抓住重点,支持一下!
Jquery easy ui 之datagrid简介
都在说TDD开发,那到底TDD是什么?
测试驱动开发(Test-driven development)是现代计算机软件开发方法的一种。利用测试来驱动软件程序的设计和实现。测试驱动开始流行于20世纪90年代。测试驱动开发是极限编程中倡导的程序开发方法,方法主要是先写测试程序,然后再编码使其通过测试。测试驱动开发的目的是取得快速反馈并使用“illustrate the main line”方法来构建程序。
测试驱动开发的比喻。开发可以从两个方面去看待:实现的功能和质量。测试驱动开发更像两顶帽子思考法的开发方式,先戴上实现功能的帽子,在测试的辅助下,快速实现正确的功能;再戴上重构的帽子,在测试的保护下,通过去除冗余和重复的代码,提高代码重用性,实现对质量的改进。可见测试在测试驱动开发中确实属于核心地位,贯穿了开发的始终。
想了半天,确实是记不得什么时候第一次听说TDD了,我这里是要拍(拍板砖的拍)这个所谓的TDD,所以也就懒得去找TDD到底是什么时候提出来的,虽然 google一下可能在第一页就能有正确的命中(比如wiki百科,哦可惜不能访问了)。对TDD我还是了解一点点的,至少知道它被大家叫做Test Drive Development,不过我觉得过分强调这个东西真的有些无聊,甚至是相当的无聊。
程序员进行开发的动力是靠Test来Drive吗?这显然是极其荒谬的结论,因为有这样一个大家还基本能赞同的观点,那就是:高质量的程序是程序员编写出来的,而不是测试出来的。所以对于程序编写,测试如果是锦上添花,那么最终结果是非常棒的。而如果测试成为了雪中送炭,那么这个产品或项目注定了就是一坨屎。程序的质量和TDD有什么关系呢?
TDD是束缚程序员生产力的桎梏,同时TDD也是程序员推卸和逃避责任的法宝。程序员是思考型的工作者,而不是流水线上的装配工人。虽然今天在一些特定的场景里,程序员可以像标准件一样被任意的替换,但不得不说这样的程序员其实就是编码工人而已,就像拿到图纸后就知道该怎么砌砖的建筑工人一样。为什么说 TDD阻碍生产力?这很明显,编写测试用例需要时间和精力呀。当然很多人会说自测试是程序员的责任,如果不编写测试用例,不做Unit Test,怎么来保证程序员的代码质量?编程是一种还算有些创造性的工作,而不是挖一个坑种一个萝卜的机械劳动。测试用例只是对矛盾的一种转换,比如我应该让我的程序处理3种输入,结果我把这个任务转换成了:我有3个测试用例,我的程序需要通过这3个测试用例。到底程序员是在干嘛?为了测试用例而编程吗?由于测试用例也是程序员自己写的,所以测试用例的错误和失误风险和程序的风险等效。实际上程序员还是在为自己编程,为自己的思考编程。这样一来到底是自己的思考犀利敏锐,还是把思考变成了测试用例更加有效?我觉得自然的思考最有效率,而用心的思考最有效果。而隔了一层测试用例的思考,使人更加容易出错和生长惰性,因为增加了步骤和莫名的依赖,觉得通过测试用例就万事大吉。殊不知自己编写的测试用例只是思考的一种转换,一种更加难以把握重点和实质的转换,因为编程的动力已经变成Test的结果了。
关于使用TDD来重构更是骗小孩的把戏。TDD强调的就是要通过测试,别的都不再重要。任何"多余"的功能,就是 Unit Test Case没有覆盖的功能,就没有了任何实现和处理的价值,编写这样的处理代码被认为莫名其妙,因为它们不会被测试,也没有这样的Unit Test Case。作为一个真正的程序员,是不会容忍初始的代码实现是一坨屎,然后再来根据什么Test Case重构成Perfect的代码的。因为第一次的思考一般是严肃的,第一次编写的代码是最有灵犀的,它不是在后来懒心无肠就能修改出来的。反而后来的代码更多的就是为了亮绿灯而已,效率和美感荡然无存。这有点像是在污蔑真正认真重构代码的人吧?其实不是,如果你真是认真地人,为什么在开始不仔细思考,把那些编写所谓Test Case的时间用来编写好你的第一版代码,然后认真地用"心"执行几次呢?因为这样的代价其实是在debug时不可避免的,如果真要完全(注意是完全)依赖绿灯,这也就是严重的开发效率问题了。
版本升级和延续又真的能依靠TDD吗?首先我们假设升级和延续的改动是有限的,否则成了重写就不在这个讨论之列了。测试依靠测试用例,测试用例如同代码注释、开发文档,它们同样存在着过时和与实现不同步的问题,这都需要维护。而且写得ugly的Unit Test Case和滥注释滥文档是一样的,到后来根本没有用也没有任何人愿意再去维护修改趟这个浑水。真正的版本升级和延续的保障是Product Team人员的稳定。如果从设计到实现甚至测试,主要人员都很稳定地一直做下来,那么新的设计和改动实现后要不稳定都难。这是TDD能Drive的吗?一些惜墨如金的注释,一堆莫明其妙的开发文档、啰里啰唆的n多Unit Test Case,不知道新来的人面对后怎么开始他的延续工作?
所以到底什么是TDD?什么才是有效的TDD?真正的TDD应该是:Thinking Drive Development。真是郁闷,缩写还居然一样,算了,就沾点恶名吧。程序员进行直接的缜密思考,他提交的代码才会是sexy的,他的开发效率也才会是最高的,所谓磨刀不误砍柴功正是如此。而Unit Test Case、Unit Test只是开发方法有益的补充,不是主要矛盾所在。
测试驱动开发(Test-driven development)是现代计算机软件开发方法的一种。利用测试来驱动软件程序的设计和实现。测试驱动开始流行于20世纪90年代。测试驱动开发是极限编程中倡导的程序开发方法,方法主要是先写测试程序,然后再编码使其通过测试。测试驱动开发的目的是取得快速反馈并使用“illustrate the main line”方法来构建程序。
测试驱动开发的比喻。开发可以从两个方面去看待:实现的功能和质量。测试驱动开发更像两顶帽子思考法的开发方式,先戴上实现功能的帽子,在测试的辅助下,快速实现正确的功能;再戴上重构的帽子,在测试的保护下,通过去除冗余和重复的代码,提高代码重用性,实现对质量的改进。可见测试在测试驱动开发中确实属于核心地位,贯穿了开发的始终。
想了半天,确实是记不得什么时候第一次听说TDD了,我这里是要拍(拍板砖的拍)这个所谓的TDD,所以也就懒得去找TDD到底是什么时候提出来的,虽然 google一下可能在第一页就能有正确的命中(比如wiki百科,哦可惜不能访问了)。对TDD我还是了解一点点的,至少知道它被大家叫做Test Drive Development,不过我觉得过分强调这个东西真的有些无聊,甚至是相当的无聊。
程序员进行开发的动力是靠Test来Drive吗?这显然是极其荒谬的结论,因为有这样一个大家还基本能赞同的观点,那就是:高质量的程序是程序员编写出来的,而不是测试出来的。所以对于程序编写,测试如果是锦上添花,那么最终结果是非常棒的。而如果测试成为了雪中送炭,那么这个产品或项目注定了就是一坨屎。程序的质量和TDD有什么关系呢?
TDD是束缚程序员生产力的桎梏,同时TDD也是程序员推卸和逃避责任的法宝。程序员是思考型的工作者,而不是流水线上的装配工人。虽然今天在一些特定的场景里,程序员可以像标准件一样被任意的替换,但不得不说这样的程序员其实就是编码工人而已,就像拿到图纸后就知道该怎么砌砖的建筑工人一样。为什么说 TDD阻碍生产力?这很明显,编写测试用例需要时间和精力呀。当然很多人会说自测试是程序员的责任,如果不编写测试用例,不做Unit Test,怎么来保证程序员的代码质量?编程是一种还算有些创造性的工作,而不是挖一个坑种一个萝卜的机械劳动。测试用例只是对矛盾的一种转换,比如我应该让我的程序处理3种输入,结果我把这个任务转换成了:我有3个测试用例,我的程序需要通过这3个测试用例。到底程序员是在干嘛?为了测试用例而编程吗?由于测试用例也是程序员自己写的,所以测试用例的错误和失误风险和程序的风险等效。实际上程序员还是在为自己编程,为自己的思考编程。这样一来到底是自己的思考犀利敏锐,还是把思考变成了测试用例更加有效?我觉得自然的思考最有效率,而用心的思考最有效果。而隔了一层测试用例的思考,使人更加容易出错和生长惰性,因为增加了步骤和莫名的依赖,觉得通过测试用例就万事大吉。殊不知自己编写的测试用例只是思考的一种转换,一种更加难以把握重点和实质的转换,因为编程的动力已经变成Test的结果了。
关于使用TDD来重构更是骗小孩的把戏。TDD强调的就是要通过测试,别的都不再重要。任何"多余"的功能,就是 Unit Test Case没有覆盖的功能,就没有了任何实现和处理的价值,编写这样的处理代码被认为莫名其妙,因为它们不会被测试,也没有这样的Unit Test Case。作为一个真正的程序员,是不会容忍初始的代码实现是一坨屎,然后再来根据什么Test Case重构成Perfect的代码的。因为第一次的思考一般是严肃的,第一次编写的代码是最有灵犀的,它不是在后来懒心无肠就能修改出来的。反而后来的代码更多的就是为了亮绿灯而已,效率和美感荡然无存。这有点像是在污蔑真正认真重构代码的人吧?其实不是,如果你真是认真地人,为什么在开始不仔细思考,把那些编写所谓Test Case的时间用来编写好你的第一版代码,然后认真地用"心"执行几次呢?因为这样的代价其实是在debug时不可避免的,如果真要完全(注意是完全)依赖绿灯,这也就是严重的开发效率问题了。
版本升级和延续又真的能依靠TDD吗?首先我们假设升级和延续的改动是有限的,否则成了重写就不在这个讨论之列了。测试依靠测试用例,测试用例如同代码注释、开发文档,它们同样存在着过时和与实现不同步的问题,这都需要维护。而且写得ugly的Unit Test Case和滥注释滥文档是一样的,到后来根本没有用也没有任何人愿意再去维护修改趟这个浑水。真正的版本升级和延续的保障是Product Team人员的稳定。如果从设计到实现甚至测试,主要人员都很稳定地一直做下来,那么新的设计和改动实现后要不稳定都难。这是TDD能Drive的吗?一些惜墨如金的注释,一堆莫明其妙的开发文档、啰里啰唆的n多Unit Test Case,不知道新来的人面对后怎么开始他的延续工作?
所以到底什么是TDD?什么才是有效的TDD?真正的TDD应该是:Thinking Drive Development。真是郁闷,缩写还居然一样,算了,就沾点恶名吧。程序员进行直接的缜密思考,他提交的代码才会是sexy的,他的开发效率也才会是最高的,所谓磨刀不误砍柴功正是如此。而Unit Test Case、Unit Test只是开发方法有益的补充,不是主要矛盾所在。
发表评论
-
杂侃01
2011-08-19 17:27 674v1.1_110818 changes: 1.增加 ... -
IT行业的各岗位职责
2011-04-19 12:12 1793岗位:程序员 程序员( ... -
朋友,想尽一切办法来提高你的工资
2011-03-29 14:03 675朋友,您 也许,是通过马(或牛、驴)车,或面包车 也许 ... -
提取公积金支付房租
2011-02-25 14:37 968随着今年上半年本市部分地区房租呈现上扬趋势,不少房屋中介机构反 ... -
程序员的十个层次
2011-01-10 13:22 833自西方文艺复兴以来,中国在自然科学方面落后西方很多,软件领域也 ... -
架构师之路--- 一个四年 JAVA 程序员的工作经历 转
2010-12-30 22:05 8986转载自 cs0346 最终编辑 cs0346 论坛的帖子看的多 ... -
Java程序员学习之路
2010-12-30 21:36 9941. Java语言基础 谈到Java ... -
一个Java程序员必须掌握的10项技能
2010-12-30 21:30 7521、语法:必须比较熟悉,在写代码的时候IDE的编辑器对某一行报 ... -
一篇很有价值的文章
2010-12-29 13:15 741有很多网友特奇怪我为 ... -
北京市2011年公园游览年票指南
2010-12-21 12:22 1184北京市2011年公园游览年票指南 北京市公园年票将于2 ... -
程序员职场三部曲
2010-12-16 12:38 889《程序员羊皮卷》主要向程序员讲解的是程序员在求职工作中技巧与程 ... -
国务院办公厅关于2011年
2010-12-10 11:49 906国务院办公厅关于2011年 部分节假日安排的通知 国办发明 ... -
卓越网加急送货时间范围
2010-11-26 18:08 965若您订单中商品的预计发货时间为订购成功后的1-2天,我们承诺 ... -
史上最强的寻物启示------http://tui.qihoo.com/22629655/article_1630961.html?sk=91ea&src=
2010-10-09 15:52 1098在很久很久以前 有一片茂密的黑森林 森林里有一 ... -
35个非主流开源数据库 你知道吗?
2010-09-29 18:06 2192几乎每个Web开发人员都有自己喜欢的数据库,或自己最熟悉的数据 ... -
申请MSN
2010-09-29 17:21 2140申请MSN涉及以下几个问题: 如何申请以@msn.com结尾 ... -
参加TUP
2010-08-23 17:40 943周六去了一次CSDN和三星Google合作的TUP,感觉收获很 ... -
有女朋友的N大惨状 (好东西,不顶不行)
2010-07-28 11:17 765一、没认识你之前我拿 ... -
Java程序员的未来 走向混合编程时代
2010-06-29 17:59 997http://developer.51cto.com 20 ... -
有人放你在心上,有人放你在床上的理论
2010-06-24 18:34 862有人放你在心上,有人 ...
相关推荐
标题中的“重构”、“测试”、“TDD”和“Ant”是四个重要的IT概念,它们在软件开发领域中扮演着至关重要的角色。 1. **重构**:重构是改善软件设计和代码质量的过程,而不改变其外部行为。它通过消除代码异味、...
4G Long Term Evolution (LTE) 是一种移动通信标准,它采用了两种主要的双工技术:Frequency Division Duplexing (FDD) 和 Time Division Duplexing (TDD)。这两种技术都用于实现通信的上行链路(从用户设备到基站)...
Tdd软件测试中为什么要TDD?TDD测试驱动开发。在这两年中,我TDD了几个项目,但不时都有周围的人问我,为什么要TDD呢?开始的时候我就凭着感觉回答了,“用TDD写代码感觉好多了,效果也挺好的”。但随着后面更多的人...
测试驱动开发(Test-Driven Development,简称TDD)是一种软件开发方法,强调在编写实际功能代码之前,先编写测试用例。这种方法的核心理念是“先写测试,再写代码”。TDD通过引入测试来引导软件设计,使得开发过程...
### 使用PHPUnit进行TDD驱动开发 #### 一、引言 测试驱动开发(TDD, Test-Driven Development)是一种软件开发方法论,它要求在编写实际功能代码之前先编写测试用例。通过这种方式,可以确保代码的质量,并且有助...
1. **什么是TDD?** TDD是一种编程方法论,它要求开发者在写实际业务逻辑之前先编写单元测试。通过这种方式,开发者可以在开发过程中确保代码质量,减少bug,并促进代码的可维护性。 2. **Laravel中的PHPUnit** ...
### UMTS-TDD 手册知识点解析 #### 核心知识点概述 本文档主要针对的是**NS2网络仿真软件**中的**UMTS-TDD**(Universal Mobile Telecommunications System - Time Division Duplex)仿真方法进行了深入细致的介绍...
"GSM TDD 噪声分析" GSM TDD 噪声是一种常见的干扰现象,发生在 GSM 通信系统中的射频部分。这种噪声的产生是由于天线辐射出的射频能量和 PA 突发工作时带动电源的干扰。为了减少这种噪声的影响,我们可以采用一些...
单元测试与TDD实践 **一、单元测试之测试目的** 单元测试,作为软件开发过程中的重要环节,其核心目标在于确保代码的质量、可维护性和可扩展性。它通过独立测试软件中的最小可测试单元,如函数或方法,来验证其...
《Test Driven: Practical TDD and Acceptance TDD for Java Developers》是一本专注于Java开发者进行测试驱动开发(TDD)和验收测试驱动开发(Acceptance TDD)的专业书籍。这本书以PDF英文版的形式提供,旨在帮助...
TDD 技术本身没有什么特别的要求,任何组织都可以直接应用。使用 TDD 的目的是高效的开发高品质的程序。如果发现 TDD 危及这个目标(TDD 也有自身的弱点和局限),那么请适当的妥协。 实施 TDD 需要改变开发工程师...
1. **基础知识**:本书开头部分介绍了TDD的基本概念、优势以及为什么它适用于嵌入式系统。这部分内容对于初学者非常友好,即使没有TDD经验也能轻松上手。 2. **嵌入式C语言特性**:深入讲解了C语言在嵌入式环境下的...
**Ruby-TDD实战:Test Driven Development in Action** 在软件开发领域,Test-Driven Development(TDD)是一种编程实践,它强调先编写测试用例,然后编写满足这些测试的最小功能代码。Ruby作为一种动态、灵活的...
测试驱动开发(TDD)是一种软件开发方法,它要求开发者首先编写失败的单元测试用例,然后再编写足够的代码以使测试通过。接下来,开发者会对代码进行重构以改善设计,同时确保测试依然能够通过。这个过程循环进行,...
在C#编程环境中,测试驱动开发(Test-Driven Development,简称TDD)是一种软件开发方法论,它强调先编写测试用例,然后根据这些测试用例来实现功能代码。这种做法有助于确保代码的质量,减少错误,并提高开发效率。...
### TDD-CDMA在无线通信中的应用 #### 一、引言 TDD-CDMA(时分双工-码分多址)是无线通信技术中的一个重要分支,它结合了时分双工(TDD)与码分多址(CDMA)两种技术的特点,为移动通信系统提供了高效的数据传输解决...
"Wifi TDD 时间同步及分时调度方案" Wifi TDD 时间同步及分时调度方案是一种在 Wifi 网络中实现时间同步和分时调度的解决方案。该方案主要依赖于 Wifi 网络的 beacon 帧来实现时间同步和分时调度。 时间同步是指在...