标题：浮现式设计
基础信息
原书名： Emergent Design: The Evolutionary Nature of Professional Software Development
原出版社： Addison-Wesley Professional  《浮现式设计:专业软件开发的演进本质》作者： (美)Scott L. Bain
译者： 赵俐 华洁
出版社：人民邮电出版社
ISBN：9787115259783
上架时间：2011-8-25
出版日期：2011 年8月
开本：16开
页码：278
内容简介
随着软件的不断进化和成熟，软件开发过程变得越来越复杂，越来越依赖各种方法学和开发方法。要想让软件兑现它的承诺，提供长期稳定的回报，软件开发必须足够 成熟，成为一门真正的专业。本书阐明了构建下一代软件的方法。作者把当今最重要的开发原则汇集成了一个统一的、流线化的、实用的软件开发方法，他汲取了模 式、重构和测试驱动开发的精华，阐述了如何在整个软件生命周期中高效地开发、管理变更以及持续交付健壮、可靠且经济高效的系统。 
本书反映了对系统 开发的自然流程的深刻理解，并帮助开发人员顺应这个流程，而不是反其道而行之。Bain向我们介绍了一次只做一个步骤的自然而生的设计的原则和实践，展示 了如何随着时间的推进逐步促进软件系统的自然进化，使系统更好地工作并提供更大价值。为了演示这种方法，书中提供了大量代码示例，最后还提供了一个完整的 案例分析。
作者简介
拥有30年从业经验的资深计算机技术专家，主要从事开发、工程和设计。他还曾负责设计、提供和管理认证培训课程，从事最终用户的技能培训，既有课堂授课，也 有远程教育。过去8年来，Scott一直在华盛顿州普捷湾畔的Net Objectives公司工作，负责培训课程以及有关设计模式、重构、单元测试、测试驱动开发的咨询工作。Scott与Net Objectives的CEO Alan Shalloway一起为敏捷环境中的设计模式集成做出了卓越的贡献。
译者简介
赵俐  从事软件开发相关工作14年,6精研软件工程、测试、敏捷设计、C#等领域。2008年开始与图灵公司合作，曾翻译出版《领域驱动设计与模式实战》、《调试九法：软硬件错误的排查之道c》、《领域驱动设计：软件核心复杂性应对之道》、《一页纸IT项目管理》。
媒体评论
“这本书就是一座智慧的金矿！本书蕴藏的丰富的智慧来自软件工程领域多年经验的累积。它集合了大量软件开发的最佳实践，并将其运用于自然而生的设计的理念之中。本书是软件开发人员的必读书籍！我给开发小组领导者的建议是：那些没读过这本书的程序员，到年末统统开掉！” 
——Amazon
“这本书的不少代码示例是用Java写的，也有一些是C#，它们浅显易懂、直指要害。本书写作风格独特，Bain轻松随意的叙述手法让枯燥的技术问题看起来妙趣横生，他甚至拿自己现实生活中的小事作类比，读来让人忍俊不禁。” 
——Truewill
图书目录
《浮现式设计:专业软件开发的演进本质》 
第1章　软件开发这个职业1 
1.1　人类制作软件已经有多久的历史了1 
1.2　软件开发是一种什么样的活动2 
1.3　软件开发缺少了什么4 
1.4　谁说了算6 
1.5　独特性6 
第2章　从衣橱到探月8 
2.1　软件开发中的模式和专业化8 
2.2　andrea的衣橱9 
2.3　探月13 
2.3.1　因素的连锁变化16 
2.3.2　不同的因素导致不同的设计16 
2.3.3　还有更多环境因素17 
2.3.4　成本和获益18 
2.3.5　火星探险18 
2.4　模式的价值19 
2.5　小结20 
第3章　软件开发的本质21 
3.1　失败率过高21 
.3.2　成功的定义22 
3.3　standish group23 
3.4　做了错误的事情24 
3.5　做事的方式错了25 
3.6　随着时间的推移，软件开发也有所改善27 
3.7　一个原因：土木工程的类比27 
3.8　放弃希望29 
3.9　有时等待和拖延也是必要的30 
3.10　桥是硬的，软件是软的30 
3.11　我们在变化的海洋中游泳31 
3.12　接受变化31 
3.13　拥抱变化32 
3.14　利用变化32 
3.15　更好的类比：不断演进的系统34 
3.16　小结37 
第4章　代码的演进：初级阶段38 
4.1　用对象结构来代替过程逻辑38 
4.2　面向对象和模式的起源39 
4.3　一个示例：简单条件和proxy模式40 
4.4　下一步：多路径条件选择43 
4.5　为什么要采用对象结构45 
4.6　从多个条件中选择一个46 
4.7　小结46 
第5章　使用和发现模式48 
5.1　根据上下文进行设计：我做的另一个 
木匠活48 
5.2　模式引出了另一个看问题的角度55 
5.3　模式提供了一种讨论设计的语言55 
5.4　本书中的模式56 
5.5　小结56 
第6章　软件开发金字塔58 
6.1　构成专业的元素58 
6.2　一种形象的表示60 
6.3　小结60 
第7章　注重软件质量61 
7.1　封装62 
7.2　内聚62 
7.2.1　方法内聚63 
7.2.2　视角层的内聚65 
7.2.3　类内聚66 
7.2.4　内聚到何种程度才足够67 
7.3　耦合67 
7.3.1　有意耦合与意外耦合68 
7.3.2　耦合类型69 
7.4　冗余73 
7.5　可测试性77 
7.6　可读性78 
7.7　软件的病症79 
7.7.1　内聚性较差的信号79 
7.7.2　意外耦合或不合逻辑耦合的 
信号80 
7.7.3　冗余的信号81 
7.8　小结81 
第8章　注重原则和智慧结晶83 
8.1　使用与创建分离83 
8.1.1　fowler的三层视角83 
8.1.2　另一种视角84 
8.1.3　使用的视角85 
8.1.4　一个单独的视角：创建86 
8.1.5　最后考虑构造细节87 
8.1.6　回到现实88 
8.2　开闭原则89 
8.2.1　类级的开闭原则90 
8.2.2　方法级的开闭原则91 
8.3　依赖倒置原则92 
8.4　gof的建议93 
8.4.1　设计方法的接口93 
8.4.2　设计类的接口94 
8.4.3　gof：优先使用对象聚合而非类 
继承95 
8.5　gof：在设计中思考什么应该变化并 
封装会发生变化的概念98 
8.6　小结100 
第9章　注重实践101 
9.1　统一编码风格101 
9.1.1　注释102 
9.1.2　命名类、方法和变量103 
9.1.3　编码标准的好处104 
9.2　意图导向编程105 
9.3　封装构造函数107 
9.3.1　原则与实践110 
9.3.2　做出决定110 
9.4　公共性—可变性分析111 
9.5　实践与自由114 
9.6　小结115 
第10章　注重纪律：单元测试116 
10.1　测试的经济学116 
10.1.1　单元测试117 
10.1.2　先写测试119 
10.2　junit框架120 
10.2.1　junit基础知识121 
10.2.2　junit示例122 
10.2.3　rule.java：先编码，再测试122 
10.2.4　rulecontainer.java：先测试， 
再编码128 
10.2.5　消除冗余：@before和@after135 
10.2.6　自动化批量测试137 
10.2.7　异常和单元测试139 
10.3　模拟对象141 
10.3.1　mockobject框架142 
10.3.2　伪对象145 
10.3.3　依赖注入和endo-testing 
技巧146 
10.3.4　endo-testing147 
10.4　小结148 
第11章　注重纪律：重构149 
11.1　重构质量糟糕的代码150 
11.2　重构质量优秀的代码151 
11.3　结构变化与功能变化152 
11.4　重构可帮助你做出选择153 
11.5　模式可以成为重构的目标154 
11.6　避免重构：预构154 
11.7　重构技巧155 
11.8　重构遗留代码162 
11.9　小结164 
第12章　测试驱动开发165 
12.1　何谓测试驱动开发165 
12.1.1　测试驱动与先写测试165 
12.1.2　从单元测试的角度来设计166 
12.2　测试与质量167 
12.2.1　测试与内聚167 
12.2.2　测试与耦合168 
12.2.3　测试与冗余169 
12.3　测试驱动开发与模式169 
12.3.1　strategy模式169 
12.3.2　乌龟站在乌龟上，一直 
向下……170 
12.3.3　模拟对象/模拟乌龟171 
12.4　模拟对象172 
12.5　模拟乌龟174 
12.6　测试decorator模式174 
12.7　小结178 
第13章　模式与因素179 
13.1　在演进的设计中做决策179 
13.2　christopher apexander与他所提出的 
“因素”180 
13.2.1　信号处理器示例180 
13.2.2　pkzip示例184 
13.2.3　测试与因素186 
13.3　更多选择，更多因素187 
13.4　小结190 
第14章　浮现式设计：案例分析191 
14.1　问题领域：mwave公司191 
14.2　团队192 
14.3　最简单的能够正常运作的设计194 
14.4　新需求：更复杂的机器196 
14.5　顺便介绍一下198 
14.6　更多好消息199 
14.7　小结：设计是一次漫长而奇特的 
旅行200 
第15章　结束语：展望2020年202 
附录a　演进路径204 
附录b　示例中用到的模式简介213 
附录c　有用幻觉之原理274 
参考书目279