`
happmaoo
  • 浏览: 4472246 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论
阅读更多
<iframe align="top" marginwidth="0" marginheight="0" src="http://www.zealware.com/46860.html" frameborder="0" width="468" scrolling="no" height="60"></iframe>

(2006-08-12)

前几天看到一篇《都在说TDD开发,那到底TDD是什么?》,感觉这个作者根本就没明白什么叫TDD。

TDD还远达到如作者所说的“过份强调”的程度,甚至应该说还强调得不够。不可否认,“高质量的程序是程序员编写出来的,而不是测试出来的”,但是如果没有有效的测试手段,如何能够客观地判定一个程序是不是“高质量”的。

至 于认为TDD会导致程序员变成代码工人的说法更是无稽之谈。TDD的Test case只负责检查某个功能是否得到完整正确的实现,至于如何实现的细节依然是掌握在程序员手中,他们完全可以充分地发挥他们的创造力。从某种角度上说, TDD不但不是束缚,反而是一种解脱,因为有TDD作保障,程序员可以更加放心大胆地去创造。

那么TDD是否会增加工作量?表面上看是这样 的,因为需要额外的精力去编写Test case。但是只要真正实践过TDD,就会发现Test case的编写远比实现具体功能要容易得多,增加这少量的工作量可以换取如Debugging之类的工作量的大量减少,总的来说反而是减少了不必要的工作 量。

测试用例的错误和失误风险和程序的风险等效”? 这又是一个对测试的误解。Test case的本质是需求的代码表达,写出正确的Test case的基础是对需求的准确理解。而如果Test case错了,说明对需求的理解就是错误的,那么即使不写Test case直接编码的话,不论这个代码写得多么完美,它不能正确地实现需求,结果不过是一堆废品。Test case的编写恰恰能够在很大程度上防止这种需求错误的风险发生。

对于重构来说,TDD更是不可或缺的保障。每个程序员都希望能够一次就把 代码写好,但现实是残酷的,一个功能的第一次实现通常都是看上去很美的,但是面对需求的变化以及对软件的强壮性、安全性、灵活性的要求,修改代码不可避 免。既然修改不可避免,那么重构就不可避免,如果没有TDD,如何能够保证重构以后的代码所实现的功能与原来一致呢?

版本升级意味着需求的 变化,Test case必然也要跟着变化,按着TDD的思路做来,就必须保证Test case与实现代码的同步,否则就不是TDD了。相对于文档来说,写Test case同样是写代码,对于程序员来说,这种同步工作相对来说更容易被接受,所以保持同步的难度也小一些。至于说ugly的Test case与滥文档一样,这点我同意,不过如果一个程序员写的Test case很滥的话,那也就不要指望他能够写出什么sexy的实现代码了。

Thinking-driven Development的说法固然没错,但有什么事情不是Thinking-driven的呢?这种空话没有一点可操作性,说了也是白说。

很多人对一些新生事物还是充满了误解和偏见,比如这篇《我之所以站出来骂RoR》。其实不论是TDD还是RoR,都不是靠骂别人而起来的。

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1179216


分享到:
评论

相关推荐

    Manning.Test.Driven.TDD.and.Acceptance.TDD.for.Java.Developers.rar

    ATDD帮助开发者理解需求,并确保交付的软件符合预期,减少了因误解需求而导致的返工。 在Java环境中,有许多流行的测试框架支持TDD和ATDD实践,如JUnit用于单元测试,Mockito用于模拟对象,Selenium或JBehave用于...

    测试驱动开发的3项修炼:走出TDD丛林

    书中还可能涵盖了对测试驱动开发的误解和误区的分析,帮助开发者避免在实践TDD时可能出现的错误倾向,比如过分注重测试覆盖率而忽略了测试的质量,或者在不适宜的场景下盲目追求TDD而未能发挥其应有的优势。...

    code kata以及测试驱动开发TDD介绍实用PPT学习教案.pptx

    5. **避免使用缩写**:全名可以提供更好的代码可读性,减少误解。 6. **保持实体对象简单清晰**:限制类的大小和文件数量,提高代码的可读性和包的内聚性。 7. **类中的实例变量不要超过两个**:保持类的单一职责...

    软件测试应该注意的几大误解

    软件测试应该注意的几大误解软件测试最近看了网络上所谓专家写的文章,发现了一些对TDD与QA部门的误解。本文将解释部分误区,并集中讨论QA团队要在敏捷的世界里获得成功所必须解决的一些问题。对测试的误解1."你只...

    测试驱动开发

    “单元测试”一词有时会引起误解。在TDD中,单元不仅指的是单一的代码块,如方法或语句,而是指功能独立的单元。这些单元应该支持验收标准,实现需求的可追溯性和可验证性。例如,测试拍卖投标规则可能涉及多个对象...

    LTE TDD将取代WiMAX WiMAX成为主导

    2010年11月30日消息,移动WiMAX作为先进的无线网络通讯技术,其发展时代似乎也已经来临,但另一种无线网络通讯技术,LTE TDD将在不久的未来完全取代WiMAX。  LTE(Long Term Evolution,长期演进)项目是3G的演进,...

    通信与网络中的LTE TDD将取代WiMAX WiMAX成为主导

    2010年11月30日消息,移动WiMAX作为先进的无线网络通讯技术,其发展时代似乎也已经来临,但另一种无线网络通讯技术,LTE TDD将在不久的未来完全取代WiMAX。  LTE(Long Term Evolution,长期演进)项目是3G的演进,...

    测试驱动的产品开发与设计.pptx

    TDD 可能被误解为过于复杂或难以实施。然而,其价值在于它能够帮助开发者提前发现问题,减少回归错误,并且由于代码是围绕测试构建的,因此通常更容易理解和维护。Test Driven Design 指的是TDD不仅关注测试,还强调...

    关于测试的若干误解

    如果说你我之间有什么相似之处的话,那就是你可能阅读过大量文章,在其中作者主张测试驱动开发(TDD,Test-DrivenDevelopment)或者其他涵盖了广泛测试(无论是单元测试还是集成  本文中所表达的观点仅代表LiamO'...

    编程技术讲解客户端脚本语言JavaScriptUnit.ppt

    由于其原型基础的对象导向特性,JavaScript有时被误读,甚至被道格拉斯·克洛克福德(Douglas Crockford)戏称为“世界上最被误解的编程语言”。JavaScript这个名字可能来源于一个商业决策,而不是技术上的考虑,这...

    Jbehave学习[整理].pdf

    这使得系统的设计更加明确,减少了误解的可能性。 4. 合作:在项目开始阶段,客户、需求分析师、测试人员和开发人员共同参与系统行为的定义,促进了团队间的协作和沟通。这有助于确保所有人都对系统的需求有共同的...

    实践中的重构

    重构,早就不再是“奢侈...特别是当你在做TDD的时候,如果你只写测试,编代码通过,对不起,那根本不叫TDD,那叫测试先行。目前为止,我还没有见过一个程序员,包括我自己在内,写代码是一遍就写得非常整洁,无需重构的

    0 bug——CC++商用工程之道(样章)

    7. **团队协作与沟通**:良好的团队协作能减少由于误解或沟通不畅导致的bug。书中可能包含关于如何建立有效沟通机制和团队文化的建议。 8. **软件质量保证**:除了技术手段,还可能讨论了质量保证体系的构建,包括...

    The practice of programming 程序设计实践

    良好的编码风格能提高团队合作效率,减少误解和错误。 2. **设计与实现**:书中涵盖了软件设计的基本原则,如模块化、抽象、封装和继承。通过实例,作者讲解了如何从需求分析到系统设计,再到具体实现的全过程。...

    如何设计程序

    通过编写需求规格说明书,将需求转化为清晰的文字描述,有助于避免后期误解和返工。 二、问题域理解 理解问题域涉及研究相关的领域知识,确定程序需要处理的数据类型和业务逻辑。对问题域的深入理解有助于设计出更...

    初探行为驱动开发(BDD)

    通过共享同一套语言,可以减少沟通误解的可能性,确保开发结果更贴近客户需求。此外,BDD还强调使用具体的故事形式来描述系统的行为,每个故事都需要遵循一定的格式,以便后续进行验证。故事中所使用的词汇必须清晰...

    软件开发代码大全.rar

    遵循一定的编码标准,如PEP8(Python)或Google Java Style Guide,有助于减少误解和提高代码审查效率。 2. **模块化与封装**:模块化是将代码组织成小而独立的部分,封装则将数据和行为结合在一起,防止外部不必要...

    软件测试技术和方法复习大纲

    7. **TDD的开发思想**:TDD要求开发者首先编写测试代码,然后再编写能够使测试通过的功能代码。 #### 二、软件测试的基本概念 1. **软件质量定义**:软件质量通常被定义为软件满足规定和隐含需求的能力,涉及软件...

Global site tag (gtag.js) - Google Analytics