第1章 引言 1
第一部分 语言 4
第2章 最有趣的语言 4
2.1为什么语言很重要 5
2.2一些有趣的语言 5
2.2.1 Clojure 5
2.2.2 CoffeeScript 10
2.2.3 Erlang 14
2.2.4 Factor 18
2.2.5 Fantom 21
2.2.6 Haskell 26
2.2.7 Io 30
2.3总结 33
第3章 面向对象程序设计:对象优于类 34
3.1对象优于类 35
3.2类关注与对象关注 36
3.2.1角色的角色 36
3.2.2职责分离 42
3.2.3测试的角度 45
3.2.4代码库里的线索 46
3.3“对象关注”的语言 47
3.3.1 Ruby 47
3.3.2 JavaScript 53
3.3.3 Groovy 56
3.3.4 Scala 58
3.4要点回顾 58
3.5总结 59
第4章 使用面向对象语言进行函数式编程 60
4.1集合 60
4.1.1转换思维 60
4.1.2拥抱集合 63
4.1.3勿忘封装 64
4.1.4惰性求值 65
4.2“一等公民”和高阶函数 67
4.3状态最小化 69
4.4其他理念 70
4.5总结 73
第二部分 测试 76
第5章 极限性能测试 76
5.1问题描述 76
5.1.1分离性能测试的传统方式 76
5.1.2极限编程和敏捷软件开发 77
5.1.3分离性能测试的不足 78
5.2另辟蹊径 78
5.2.1独立的多功能团队 79
5.2.2描述需求 80
5.2.3设定计划与排定优先级 81
5.2.4实现性能故事 82
5.2.5展示与反馈 83
5.3极限性能测试实践 83
5.3.1性能负责人 83
5.3.2自动化部署 84
5.3.3自动化分析 85
5.3.4结果仓库 85
5.3.5结果可视化 86
5.3.6自动化测试流程 86
5.3.7健全性测试 87
5.3.8持续性能测试 88
5.3.9规范的性能提升 88
5.4这对我们有何帮助 89
5.4.1更好的性能 89
5.4.2更低的复杂度 89
5.4.3更高的团队效率 90
5.4.4更合理的优先级排定 90
5.4.5开启持续交付 90
5.5总结 90
第6章 测试驱动JavaScript 91
6.1 JavaScript的复兴 91
6.2当前JavaScript的处理方式与问题 92
6.3分离关注点 92
6.4测试方式 100
6.4.1倾向于交互测试,而非集成测试 100
6.4.2在具体用例中使用HTML夹具编写集成测试 100
6.4.3使用验收测试验证所有组件的集成 101
6.5持续集成 101
6.6工具 101
6.6.1单元测试 102
6.6.2语法检查 102
6.6.3 mock框架 102
6.7总结 102
第7章 构建更好的验收测试 103
7.1快速测试 103
7.1.1基于用户行程的测试 103
7.1.2并行执行测试集 104
7.1.3考虑使用多种测试驱动器 105
7.1.4将测试分开运行 107
7.1.5等待页面元素显示时要小心 107
7.2有弹性的测试 107
7.2.1单独选择页面元素 108
7.2.2等待页面元素显示时要小心(再次强调) 109
7.2.3在测试中设置测试依赖的数据 110
7.2.4测试集成点 110
7.3易于维护的测试 111
7.3.1使用页面模型 111
7.3.2结构一致的测试集 112
7.3.3测试代码产品代码一视同仁 113
7.3.4切勿受限于工具 113
7.4付诸实践 114
7.4.1一地团队 114
7.4.2维护测试,人人有责 115
7.4.3故事启动 115
7.4.4结对测试开发 115
7.4.5故事展示 116
7.5总结 116
第三部分 软件开发问题 118
第8章 现代Java Web应用 118
8.1过去的状况 118
8.1.1有状态的服务器 119
8.1.2依赖容器 119
8.1.3违反HTTP规范 120
8.2无状态服务器 120
8.2.1集群 120
8.2.2 cookie救世 121
8.2.3区分用户特定的数据 121
8.2.4安全cookie 122
8.3容器是可选的 123
8.3.1容器外测试 123
8.3.2我们真的需要容器吗 125
8.4按新鲜程度分区 125
8.4.1缓存:可扩展网站的秘密武器 125
8.4.2选择缓存的内容 126
8.4.3按新鲜程度分区简介 126
8.4.4反向代理和内容发布网络简介 128
8.5 POST重定向到GET 129
8.6总结 130
第9章 驾驭集成难题 131
9.1持续集成方法 132
9.1.1稳定基准 132
9.1.2集成stub 133
9.1.3构建流水线 134
9.1.4监控器 134
9.2定义集成契约 135
9.3度量和可见性 135
9.4总结 136
第10章 实践中的特性开关 137
10.1简单特性开关 138
10.2可维护的特性开关 138
10.2.1依赖注入 139
10.2.2注解 140
10.3分离静态资源 141
10.4阻止意外泄露 142
10.5运行时开关 142
10.6不兼容依赖 143
10.7特性开关的测试 143
10.8删除完成特性的开关 144
10.9总结 144
第11章 交付创新 145
11.1价值流向 146
11.2新方法 147
11.2.1协作文化 147
11.2.2敏捷产品调研与发现 149
11.2.3快速启动 153
11.2.4持续设计,持续交付 155
11.3总结 156
第四部分 数据可视化 158
第12章 一图胜千言 158
12.1闻闻咖啡 158
12.2可视化设计原则 159
12.3可视化设计流程 160
12.3.1定义领域任务 160
12.3.2任务抽象 161
12.3.3数据抽象 161
12.3.4可视化编码 163
12.3.5评估与完善 167
12.4可视化设计模式 168
12.4.1探索随时间变化的数据 168
12.4.2探索相关性 170
12.4.3探索层次与“局部到整体”关系 170
12.4.4探索连结和网络 172
12.5工具和框架 173
12.5.1可视化程序库 173
12.5.2图型化工具 174
12.6总结 174
参考文献 176
索引 178