首页>参考读物>计算机科学与技术>软件与程序设计

驯服烂代码:在编程操练中悟道
作者 : 伍斌 著
出版日期 : 2014-11-08
ISBN : 978-7-111-48155-3
定价 : 69.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 271
开本 : 16
原书名 :
原出版社:
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

Kent Beck、Martin Fowler、Michael C. Feathers、Robert C. Martin、Joshua Kerievsky、Gerard Meszaros等大师们的传世著作为如何提升编程技艺和代码质量提供了思想和原则上的指导,本书则为实践和融合这些思想、原则提供了过程和方法上指导。本书通过编程操练的方式讲述了如何用TDD(测试驱动开发)的方法来驯服烂代码,通过结对编程的对话形式展示了驯服烂代码的完整过程,将驯服烂代码所需要的思想、态度、习惯、方法和技艺完全融入编程操练实践中,是目前最具实践指导意义的驯服烂代码的著作。
全书共20章,分为四个部分:第一部分(第1~10章)首先通过测试后行和测试先行两种方法完成了一个名为“码农酒店”(世界时钟)的编程操练题目,然后对这两种方法进行对比,引出了烂代码的概念,读者能非常直观看出哪一种方法更容易写出烂代码。第二部分(第11~15章)通过一个名为Trivia(答题闯关游戏)的经典编程操练题目详细讲述了驯服一段烂代码的过程,首先讲解了代码腐臭的识别和记录,然后讲解了如何通过一系列的重构来清除这些腐臭。第三部分(第16~18章)通过三个编程操练题目详述了编写真正的单元测试的过程,首先讲解了用提取接口的办法编写Stub来进行单元测试,以及用子类化并覆写方法的办法编写Mock来进行单元测试,然后讲解了如何将被测类与文件系统之间的这种不适用于单元测试的耦合,转化为被测类与字符串之间这种适合与单元测试的耦合。第四部分(第19~20章)总结了驯服烂代码的步骤及方法,首先讲解了TDD开发方法的一种实现:I-EPP-TR方法,该方法中的全面重构的概念对传统的重构概念进行了扩展,然后讨论了如何才能将前面所讨论的良好的编程方法形成习惯并固化下来。

图书特色

资深软件技术专家、匠艺程序员20余年编程、测试、管理经验和智慧的结晶,著名软件技术专家、ThoughtWorks领队咨询师张逸作序推荐

最具实践指导意义的驯服烂代码的著作之一,通过编程操练的方式完整展示了驯服烂代码的过程、思想和方法

作为一个程序员,如何才能提升编程技艺、驯服烂代码,从而写出高质量的代码?Kent Beck、Martin Fowler、Michael C. Feathers、Robert C. Martin、Joshua Kerievsky和Gerard Meszaros这些大师们从编程态度、思想、方法、技艺和习惯等方面给出了大量的建议,并以著作的方式记录下来。大师们的著作在全球范围内广为传播和传承,是人类软件开发史上的宝贵财富。
虽然大师们的著作字字珠玑、如同珍宝,但是编程技艺的提升绝不是一日之功,不仅要有大师们的指导,还需要大量的编程操练,在实践中去领会和贯通大师们的建议,从而真正实现编程技艺的提升。大师们的珠玉在前,本书则完全从实践角度切入,以编程操练的方式讲述了识别和驯服烂代码的过程、思想和方法,希望能帮助广大的程序员们真正领悟和吸收大师们的智慧。
本书的写作同样遵循和实践了驯服烂代码的原则和方法,书中所有内容和素材均来源于作者组织的多达18次的编程操练,本书的写作方式和内容组织方式也在写作过程中根据编程操练中收集到的反馈信息不断重构和优化,以确保为读者带来“高内在质量”的内容和阅读体验。


作者简介
伍斌(英文名Ben)
资深软件技术专家,匠艺程序员,拥有超过20年的软件行业工作经验,在软件开发、软件测试、敏捷项目管理和软件开发咨询等诸多方面都有深厚的造诣,专注于测试驱动开发、驯服烂代码及编程操练,积累了丰富的经验。
活跃于Agile China、Scrum Gathering、敏捷之旅、CSDN、中国软件测试大会和InfoQ等组织和社区,曾经多次在这些平台举办的各种技术大会上发表与敏捷、测试和驯服烂代码相关的主题演讲,深受欢迎。此外,他还是 “北京设计模式学习组”(http://www.bjdp.org)的组织者和开创者,这是国内首家中文公益编程操练社区,他全身心投入到社区的运营中,希望能帮到尽可能多的程序员。有《测试驱动数据库开发》和《优质代码》等译著。

个人网站:wubinben.com
微信订阅号:bjdp_org

Kent Beck、Martin Fowler、Michael C. Feathers、Robert C. Martin、Joshua Kerievsky和Gerard Meszaros等大师们的传世著作为如何提升编程技艺和代码质量提供了思想和原则上的指导,本书则为实践和融合这些思想和原则提供了过程和方法上的指导。本书通过编程操练的方式讲述了如何用TDD(测试驱动开发)的方法来驯服烂代码,通过结对编程的对话形式展示了驯服烂代码的完整过程,将驯服烂代码所需要的思想、态度、习惯、方法和技艺完全融入编程操练实践中,是目前最具实践指导意义的驯服烂代码的著作之一。
全书共20章,分为四个部分:第一部分(第1~10章)首先通过测试后行和测试先行两种方法完成了一个名为“码农酒店”大堂城市世界时钟的编程操练题目,然后对这两种方法进行对比,引出了烂代码的概念,读者能非常直观地看出哪一种方法更容易写出烂代码。第二部分(第11~15章)通过一个名为Trivia(答题闯关游戏)的经典编程操练题目详细讲述了驯服一段烂代码的过程,首先讲解了代码腐臭的识别和记录,然后讲解了如何通过一系列的重构来清除这些腐臭。第三部分(第16~18章)通过三个编程操练题目详述了编写真正的单元测试的过程,首先讲解了用提取接口的办法编写Stub来进行单元测试,以及用子类化并覆写方法的办法编写Mock来进行单元测试,然后讲解了如何将被测类与文件系统之间的这种不适用于单元测试的耦合,转化为被测类与字符串之间这种适合用于单元测试的耦合。第四部分(第19~20章)总结了驯服烂代码的步骤及方法,首先讲解了TDD开发方法的一种实现:IePpTr方法,该方法中的全面重构的概念对传统的重构概念进行了扩展,然后讨论了如何才能将前面所讨论的良好的编程方法形成习惯并固化下来。

图书前言

程序员好比运动员,要想在竞技场上获胜,需要在训练场里长期刻苦地练习技艺。
  程序员好比士兵,要想在短兵相接的白刃战中取胜,需要在练兵场上长期刻苦地练习格斗。
  程序员好比调酒师,要想用炫目的技艺为客人花式调酒,需要在业余时间长期练习抛瓶。
  运动员与和平年代的士兵有大量的时间用于训练。但绝大多数程序员所在的软件公司,在一个接着一个的项目进度的压力下,无法提供大量的时间来供程序员练习,而很多程序员又不愿意在下班后再碰代码。如此一来,程序员们就成了一直在竞技场上比赛的运动员,一直在敌人面前搏斗的士兵,和一直在客人面前拋瓶的调酒师,他们没有时间练习。
  这样不做练习的程序员,只能把在练习过程中所犯的错误都留在了公司的代码库里,成为了烂代码。已有的烂代码延长了给软件添加新功能和修复bug的时间,带来更大的进度压力,这就导致利用工作时间练习的机会更少了,进而在代码库里留下更多的练习时所犯的错误,形成了更多的烂代码。如此往复,万劫不复。
  如此说来,程序员应该像调酒师那样,上班时间努力工作,下班时间操练手艺。
  编程是一门手艺。手艺是自己的,如果在公司领导的支持下能在上班时练习固然很好,但若条件不具备,那么就在下班时自己练。其实这也不吃亏,艺多不压身。
  本书就是为程序员练习编程这门手艺而撰写的。
这是一本什么样的书?
  这是一本讨论如何用TDD(测试驱动开发)方法驯服烂代码的书。无论程序员水平是高是低,都可能写出烂代码。所以驯服烂代码是每一位程序员都会面临的工作。而如何驯服则需要亲手重构代码并加以体会才能得心应手。本书就是笔者在最近这一年半的时间里,在自己所创办的公益编程操练社区bjdp.org进行编程操练获得的体会的结晶。
这是一本描写编程过程的书。“授人以鱼,不如授之以渔。”这里,“鱼”是结果,而“渔”是过程。如此说来,过程要比结果重要。同样,获得一段重构好的整洁的代码固然很好,但是不如掌握从最初的烂代码转变到最终的整洁代码的整个过程的重构方法。
  这是一本以结对编程的对话形式来展示编程过程的书。自古以来,作为一心学艺的弟子,无不渴望师父能一对一地向自己传授绝技。就好比《西游记》中的猴王,拜到菩提祖师门下为徒,直到7年之后,才有缘深夜得到师父一对一的传授,最终获得真传。而与此类似,结对编程就是两人之间一对一进行知识传递的过程,机会难得,每时每刻都弥足珍贵。
这本书能带来什么价值?
  本书最大的价值,就是能让人在动手驯服烂代码的过程中真正体会到为什么TDD方法能让开发速度加快。具体来说理由有如下3个。
  1)专注。即在开发中只专注于编写恰好能让描述产品特性的测试代码运行通过的生产代码,而不再多写除此之外的其他代码。用TDD的测试先行进行开发,就和男人逛超市一样,他们会按照纸片上的购买清单(好比照着测试代码)拿货、掏钱、走人,精益适用,不做无用功。而用不用TDD的测试后行进行开发,就好比女人逛超市,看到有什么打折的、新款的、促销的好东西都想买(好比程序员编写了很多当下用不到的生产代码),从而造成浪费。
  2)复用。在TDD开发中编写的自动化测试代码,将来可以复用,能节省以后debug和看log的时间;不写测试而依赖手工debug或看log的做法,将来无法复用,每次都会做很多诸如设置断点、单步运行、检查变量、打开并阅读日志文件等重复性工作,从而浪费大量时间。
  3)反馈早。如果程序员能够频繁运行TDD中的测试,那么就能使软件的绝大多数bug在流入下游测试工程师之前被快速发现和修复。这种反馈会远远早于那种软件只由测试工程师来测试的情况,从而能节省下面这些人员可观的工作时间:测试工程师发现、描述、报告和跟踪bug;项目经理在各种会议中检查、梳理和分派这些bug;程序员放下手中工作来阅读测试工程师报告的bug并加以重现和修复。这些人员就能利用所节省的时间来干更有价值的事情,以加快项目进度。
我适合读这本书吗?
  本书适合愿意动手尝试用测试先行的TDD开发方法进行编程操练以提高编程技艺的任何人,包括专业的程序员、自动化测试工程师、架构师、开发经理及任何TDD开发方法的学习者,只要您具备下面的一些经验:
  能够编写、编译并运行一段简单的Java程序;
  了解或能查询到面向对象的三个基本特征的概念——封装、继承和多态;
  了解或能查询到有关设计模式和重构的信息。
这本书讲了什么内容?
  本书可分为四大部分。
  第一部分(第1~10章)阐释了烂代码的概念。其中第1~4章用测试后行的开发方法完成了一个编程题目,第5~8章用测试先行的开发方法完成了上面同样的编程题目。在第9章对比了测试后行与测试先行的开发方法后,引出了第10章有关何谓烂代码的讨论,从而令人能够看出上面两种开发方法中究竟哪一种更不容易写出烂代码。
  第二部分(第11~15章)详述了驯服一段烂代码的过程。其中第11章阅读了一段烂代码,并把阅读中所闻到的代码腐臭味用TODO记录下来。第12章编写了3个“用户意图测试”来固化代码现有的行为,并将这些测试运行通过,为下一步重构做好准备。第13章和第14章分别用釜底抽薪和抛砖引玉的手法来将一个大类分解为若干个小类,即进行重构。第15章继续重构来清除分解大类工作完成后所遗留下来的代码腐臭。
  第三部分(第16~18章)详述了编写真正的单元测试的过程。其中第16章用提取接口的办法编写Stub来进行单元测试;第17章用子类化并覆写方法的办法编写Mock来进行单元测试;第18章将被测类与文件系统之间的这种不适合用于单元测试的耦合,转化为被测类与字符串之间这种适合用于单元测试的耦合,从而通过编程操练体会什么是真正的单元测试。
  第四部分(第19~20章)总结了驯服烂代码的步骤及方法。其中第19章提出了本书有关TDD开发方法的一种实现——IePpTr方法,该方法提出了全面重构的概念,对传统的重构概念进行了扩展。第20章讨论了如何才能使前面所讨论的良好的编程方法形成习惯并固化下来。最后附录A介绍了有关编程操练的内容,附录B至附录D分别说明了如何在Windows、OS X和Linux上搭建编程操练环境。

上架指导

计算机\程序设计

封底文字

作为一个程序员,如何才能提升编程技艺,驯服烂代码从而写出高质量的代码?Kent Beck、Martin Fowler、Michael C. Feathers、Robert C. Martin、Joshua Kerievsky、Gerard Meszaros这些大师们从编程态度、思想、方法、技艺、习惯等方面给出了大量的建议,并以著作的方式记录下来。大师们的著作在全球范围内广为传播和传承,是人类软件开发史上的宝贵财富。
虽然大师们的著作字字珠玑、如同珍宝,但是编程技艺的提升绝不是一日之功,不仅要有大师们的指导,还需要大量的编程操练,在实践中去领会和贯通大师们的建议,从而真正实现编程技艺的提升。大师们的珠玉在前,本书则完全从实践角度切入,以编程操练的方式讲述了如何识别和驯服烂代码的过程、思想和方法,希望能帮助中国广大的程序员们能真正领悟和吸收大师们的智慧。
本书的写作同样遵循和实践了驯服烂代码的原则和方法,书中所有内容和素材来源于作者组织的多达18次的编程操练,本书的写作方式和内容组织方式也在写作过程中根据编程操练中收集到的反馈信息不断重构和优化,以确保为读者带来“高内在质量”的内容和阅读体验。

作者简介

伍斌 著:暂无简介

图书目录


前言
致谢
第1章 刻舟求剑的文档 1
第2章 按图索骥地编写代码 7
第3章 写main()方法测试一下 17
第4章 调试一下 24
第5章 用TDD重做编程操练题目 33
第6章 消除假数据所带来的重复代码 40
第7章 让下一个测试足够有意思 46
第8章 嗅出代码“腐臭”和新的测试点 55
第9章 测试后行 vs 测试先行 64
第10章 何谓“烂代码” 68
第11章 记录所闻到的“腐臭” 75
第12章 用测试描绘用户意图 89
第13章 分而治之——釜底抽薪 105
第14章 分而治之——抛砖引玉 118
第15章 打扫战场 134
第16章 分而测之——编写Stub及提取接口 169
第17章 分而测之——编写Mock及子类化并覆写方法 191
第18章 真正的单元测试 217
第19章 驯服烂代码的步骤:IePpTr 232
第20章 习惯出自专注、长期和用心的结对操练 238
附录A 编程操练简介 244
附录B 怎样在Windows系统中搭建编程操练环境 246
附录C 怎样在OS X系统中搭建编程操练环境 251
附录D 怎样在Linux系统中搭建编程操练环境 256

教学资源推荐
作者: Bruce Eckel, Chuck Allison
作者: John Lewis Peter J. DePasquale;Joseph Chase;
作者: Calvin Lin;Lawrence Snyder
参考读物推荐
作者: (美)Zain Naboulsi; Sara Ford 著
作者: [美]弗拉维奥·荣凯拉(Flavio Junqueira) 本杰明·里德(Benjamin Reed) 著
作者: (美)Lucas Carlson 著