基本信息
- 作者: (美)Steve FreemanNat Pryce
- 译者: 王海鹏
- 丛书名: 开发人员专业技术丛书
- 出版社:机械工业出版社
- ISBN:9787111304258
- 上架时间:2010-7-28
- 出版日期:2010 年6月
- 开本:16开
- 页码:1
- 版次:1-1
- 所属分类:计算机 > 软件工程及软件方法学 > 面向对象

【插图】

编辑推荐
敏捷联盟的Gordon Pask奖获得者、Mock技术的早期创始人倾力打造
测试驱动开发(TDD)实践指南
Robert C.Martin高度评价,Kent Berk作序推荐
内容简介
作译者
Nat Pryce:在帝国理工学院取得博士学位之后,Nat Pryce加入了com风潮,刚好看到泡沫破灭。从那时起,他就在许多不同的行业(包括体育新闻报道、市场营销传播、零售、电信和金融业)中当程序员、架构师、培训师和咨询师。他也曾参加学术研究项目,偶尔在大学任教。作为XP的早期采用者,他编写了一些支持TDD的开放源码库,对一些库作出了贡献,他也是伦敦XP日(London XP Day)的发起组织者之一。他也经常在国际会议上发表演讲。Nat居住在英国伦敦。
目录
译者序
序
前言
作者简介
致谢
第一部分简介
第1章测试驱动开发的要点
1.1软件开发是一个学习过程
1.2反馈是基本工具
1.3支持变化的实践
1.4测试驱动开发简介
1.5大局
1.6用户场景测试
1.7测试的级别
1.8外部品质与内部品质
第2章测试驱动开发与对象
2.1对象之网
2.2值与对象
2.3对象通信
译者序
这是一本关于测试与面向对象设计如何相互影响的书。易测试的设计就是好设计,难测试的设计是不好的设计,测试成本高的设计是昂贵的设计,无法测试的设计是不可行的设计。当我们用心聆听测试代码的反馈,它就会告诉你产品代码的功能正确性、运行效率、可靠性、API的易用性、可维护性、可移植性和可伸缩性。
这是一本关于增量式软件开发的书。我们在写程序的过程中学习,而不是学习如何写程序。软件开发者与领域专家的合作是一个学习的过程。软件一开始可能只有一个特征、一些模糊的概念,然后逐渐发展出许许多多更清晰的特征和概念,并且在使用过程中会不断发展。在我看来,增量式的开发是唯一的软件开发方式。
这本书的目的在于,它告诉我们如何进行增量式的软件开发。爱因斯坦说,例子不是一种教学方式,而是唯一的教学方式。书中提供的拍卖狙击者的例子,提供了在真实世界软件开发者所需要的细节,一个特征接一个特征地教读者利用面向对象的思想,增量式地开发灵活的、面向对象的程序。
过程为我们带来乐趣,成就只是副产品。开发的过程是否有趣?是否像打怪升级的游戏一样?每一个已实现的特征就是被你杀死的怪,你不希望被杀死的怪经常复活,向你寻仇。不好的程序是地狱,因为那里面经常复活的怪太多。这本书教我们写下清晰的特征列表,然后用验收测试来确保这些特征的实现。
本书给我最大的感悟是:如果软件是孩子,程序员就是家长,需要用心血去培育。如果软件是诗歌,程序员就是炼字师,可以用编程语言来准确反映自己的思想。值得去写的程序,就值得写好。我们应该做得更好,也可以做得更好。
“知之不如好之,好之不如乐之。”对于软件开发,作者有一种乐此不疲的态度。编程是一门艺术,在追求艺术的道路上,没有止境。
本书改变了我对代码(尤其是对测试代码)的看法。像所有好书一样,它可以改变人们对事物的看法。开卷有益,因此,我郑重地向大家推荐它。
除封面署名外,参加本书翻译工作的人员还有:王海燕、李国安、周建鸣、范俊、张海洲、谢伟奇、林冀、钱立强、甘莉萍。
王海鹏
庚寅年初春于上海
前言
这是一本实践指南,介绍了我们发现的编写面向对象软件的最好方式:测试驱动开发(testdriven development,TDD)。它描述了我们遵循的过程、追求的设计原则,以及使用的工具。它以我们数十年的经验为基础。在这些年里,我们与世界上一些最好的程序员共事,向他们学习。
本书讨论了一些问题与困惑,它们是我们在一个个项目中所见到的。如何将测试驱动开发应用到软件项目中?我从哪里开始?为什么我应该既编写单元测试,又编写用户场景测试?测试“驱动”开发是什么意思?如何测试某个难弄的特征?
本书同时也着重讨论了设计,以及设计方式对TDD方式所产生的影响。如果说我们从中学到了什么,那就是测试驱动开发作为一个整体时,效果最好。我们曾看到过一些团队虽然采用了一些基本实践(编写并运行测试),但他们仍不得要领,因为他们并没有采用背后更深层次的过程。
为什么“培育”面向对象软件
本书使用“培育”(Growing)这个词是因为它让人们感觉到开发是增量式的。我们在任何时候都有可以工作的软件,确保代码总是尽可能地具备良好的结构,并经过全面的测试。任何事情都不比交付可以工作的系统更有效。正如John Gall在[Gall03]中所写的,“能工作的复杂系统总是从能工作的简单系统演进而来的。”
“培育”也暗示了一个在好的软件中发现的生物学特点,即在每一层结构中一致的感觉。它将我们的方式与面向对象结合起来,正好与Alan Kay的观点一致,即对象像生物细胞一样彼此发送消息。
Alan Kay是Smalltalk的创始人之一,发明了“面向对象”这一术语。
为什么要以测试为“指导”
我们先写测试,因为我们发现这有助于写出更好的代码。先写一个测试迫使我们澄清自己的意图,只有无二义地描述了应该做什么以后,我们才会开始下一步的工作。先写测试的过程帮助我们发现设计是否太僵硬或没有关注要点。然后,当我们希望继续下一步工作并修复设计缺陷时,测试可以提供回归覆盖测试构成的安全网。
本书使用“指导”(Guided)这个词,是因为此项技巧仍然需要使用者的技能和经验。我们发现测试驱动开发是一种有效的设计支持工具——只要我们学会如何增量式地开发并“聆听测试”。像其他正规的设计活动一样,TDD需要理解和持续的努力才有效。
我们曾发现一些团队同时编写测试和代码(甚至有一些团队先写测试),他们的代码仍然一团糟,测试只是增加了维护的成本。他们已经起步,但还没有明白这种技巧是要让测试来指导开发。利用测试的内容,将关注点放在取得进展上,并利用测试的反馈来提升系统的品质。
什么是模拟对象
编写本书最初的动机是完整解释使用模拟对象(Mock Object)的技术,我们看到这种技术常被人误解。随着写作的深入才意识到,我们社区对模拟对象的发现和使用实际上体现了我们写软件的方式。这是大局观的一部分。
模拟对象是一些替代的实现,目的是测试对象如何与相关的对象进行交互。
本书将利用jMock库来展示模拟对象是如何工作的。更具体地说,我们将展示模拟对象应该用于TDD过程的什么位置,以及它在面向对象开发的环境中具有怎样的意义。
这本书为谁而写
这本书是为“有一定知识的读者”而写的。它的目标读者是具有专业经验的开发者,他们至少曾看过测试驱动开发。在编写时,我们假设是向一些以前未接触过这些技术的同事进行解释。
为了留出篇幅以介绍更深入的内容,我们假定读者具备有关基本概念和工具的一些知识。别的一些书对TDD进行了很好的介绍。
序言
本书展示了这样一个新观点——假如软件不是“做”出来的,不像我们做纸飞机那样,叠好后就飞出去,情况会怎样呢?假如我们像对待有价值、有产出的农作物那样(培育、剪草、收割、施肥和灌溉)对待软件,情况会怎样呢?几十年或几个世纪以来,传统的农夫知道如何让农作物高产。如果我们以同样的方式对待程序,软件开发会有什么不同呢?
我印象最深的是,本书同时提供了这种观点转变的哲学思想和实现机制。本书的作者是善于写代码的实践者,他们也善于教别人写代码。您从中可以学到如何保持高产,以及如何重新审视您的程序。
这里展示的测试驱动开发的方式不同于我所使用的方式。虽然我还不能清晰表达其中的区别,但我已从作者清楚、自信的技巧介绍中受益。方言的多样化已经为我进一步优化开发提供了思考的新源泉。本书展示了一个有条理的、一致的开发体系,其中的不同技巧相互支持。
我建议您阅读本书,通过书中的例子,了解作者如何思考编程,如何实践编程。这种体验将丰富您的软件开发方式,有助于您编程,而且同样重要的是,有助于您以不同的观点来看待您的程序。
Kent Beck
媒体评论
——Ward Cunningham
“终于有一本书用丰富的代码揭示TDD和OOD之间的共生关系。作者是测试驱动开发的先驱,在本书中介绍了原则、实践、探索法,以及他们数十年职业经验中的(最好的)轶事。每个软件手艺人都希望钻研这些工作实例的章节,研究这些高级的测试和设计原则。本书值得保存。”
——Robert C. Martin
“人们常常深入地讨论设计,但不提经验。人们常常强调测试,但只是局限于狭隘的品质定义,关注是否存在缺陷。这些方面都有价值,但每一方面都只是一个巴掌。Steve和Nat将两个巴掌放在了一起,这值得鼓掌(也是我最诚恳的评价)。他们以清晰、理智和幽默的方式,说明了一种对设计、测试、代码、对象、实践和过程的观点,这种观点是有说服力的、可以实践的,充满了深刻的见解。”
——Kevlin Henney, 《PatternOriented Software Architecture》和
《97 Things Every Programmer Should Know》的合著者
“Steve和Nat写了一本好书,与其他人分享了他们的软件手艺。这本书不只应该读,还应该研究。花足够的时间和精力来研究本书的人,将获得超级开发技能。”
——David Vydra, 发行人, testdriven.com
“本书提出了测试驱动开发的一种独特见解。它描述了TDD的另一种成熟形式——这种形式21世纪初在伦敦迅速发展,其特点是完全关注用户场景,突出强调对象间的消息机制。如果您想成为当前TDD领域的一名专家,就需要理解本书中的思想。”
——Michael Feathers
“在本书中,您会学到节奏、思考的细微差异和有效的编程实践,目的是培育经过测试的、设计良好的、大师级的面向对象应用程序。”
——Rebecca WirfsBrock