第1章 SaaS与敏捷开发介绍 1
1.1 简介 3
1.2 SaaS,软件即服务 3
1.3 面向服务的架构(SOA) 6
1.4 云计算 9
1.5 漂亮的代码与遗留代码 11
1.6 软件质量保证:测试 12
1.7 生产力:简明、综合、复用和工具 14
1.8 软件开发过程:计划和文档过程 16
1.9 软件开发过程:敏捷宣言 21
1.10 本书导览 25
1.11 如何阅读本书 27
1.12 谬论和陷阱 29
1.13 结束语:软件工程不只是单纯的编程 30
1.14 深入学习 31
1.15 建议的练习 33
第一部分 软件即服务 35
第2章 SaaS应用的架构 37
2.1 100000英尺:客户端-服务器架构 39
2.2 50000英尺:通信——HTTP和URI 41
2.3 10000英尺:表示方法——HTML和CSS 45
2.4 5000英尺:3层体系结构和横向扩展 48
2.5 1000英尺:模型-视图-控制器架构 51
2.6 500英尺:模型的活动记录 53
2.7 500英尺:路由、控制器与REST 55
2.8 500英尺:模板视图 59
2.9 谬论和陷阱 60
2.10 结束语:模式、架构和长寿命的API 61
2.11 深入学习 62
2.12 建议的练习 63
第3章 SaaS架构:针对Java编程者的Ruby简介 65
3.1 概述以及Ruby的三大支柱 67
3.2 一切都是对象 71
3.3 每一个操作都是一个方法调用 72
3.4 类、方法和继承 75
3.5 所有的编程都是元编程 79
3.6 块:迭代器、函数式习语和闭包 81
3.7 mix-in和鸭子类型 85
3.8 用yield构造自己的迭代器 87
3.9 谬论和陷阱 90
3.10 结束语:惯用语言使用 91
3.11 深入学习 92
3.12 建议的练习 93
第4章 SaaS架构:Rails简介 97
4.1 Rails基础:从0到CRUD 99
4.2 数据库和迁移 104
4.3 模型:ActiveRecord基础 106
4.4 控制器和视图 111
4.5 调试:当出现错误时 117
4.6 表单提交:new和create 120
4.7 重定向和flash 122
4.8 完成CRUD:编辑/更新和销毁 125
4.9 谬论和陷阱 129
4.10 结束语:SOA的设计 130
4.11 深入学习 131
4.12 建议的练习 132
第5章 SaaS框架:Rails高级功能 135
5.1 去除MVC中的重复:partial、校验和过滤器 137
5.2 单点登录和第三方认证 143
5.3 关联和外键 148
5.4 间接关联 152
5.5 关联的REST路由 156
5.6 可复用作用域的组合查询 159
5.7 谬论和陷阱 161
5.8 结束语:语言、生产力和美观 162
5.9 深入学习 163
5.10 建议的练习 164
第6章 SaaS的客户端框架:JavaScript简介 165
6.1 JavaScript:大图景 167
6.2 面向Ruby程序员的客户端JavaScript介绍 170
6.3 函数和构造器 175
6.4 文档对象模型jQuery 178
6.5 事件与回调 182
6.6 AJAX:异步的JavaScript和XML 187
6.7 测试和调试JavaScript与AJAX 192
6.8 单页面应用和Json API 200
6.9 谬论和陷阱 204
6.10 结束语:JavaScript的昨天、今天以及明天 208
6.11 深入学习 210
6.12 建议的练习 212
第二部分 软件开发:敏捷开发与计划文档模式 215
第7章 需求:行为驱动设计用户故事 217
7.1 行为驱动设计与用户故事简介 219
7.2 SMART用户故事 221
7.3 任务点、速率和Pivotal Tracker 223
7.4 敏捷开发的成本估计 226
7.5 Cucumber和Capybara介绍 227
7.6 运行Cucumber和Capybara 229
7.7 低精度用户界面模型和故事板 231
7.8 优化Rotten Potatoes 234
7.9 显式的和隐式的需求、命令式的和声明式的情景 239
7.10 计划文档的视角 242
7.11 谬论和陷阱 248
7.12 结束语:BDD的利与弊 250
7.13 深入学习 252
7.14 建议的练习 253
第8章 软件测试:测试驱动开发 257
8.1 背景:RESTful应用程序接口和Ruby gem 259
8.2 FIRST、 TDD以及RSpec入门 261
8.3 TDD周期:红色-绿色-重构 264
8.4 更多的控制器spec和重构 268
8.5 夹具和工厂 272
8.6 面向模型的TDD 275
8.7 为互联网建立桩 278
8.8 覆盖率概念、单元测试与集成测试 284
8.9 其他测试方法和术语 287
8.10 计划文档的视角 288
8.11 谬论和陷阱 291
8.12 结束语:TDD与传统的调试方法 293
8.13 深入学习 294
8.14 建议的练习 295
第9章 软件维护:使用重构和敏捷方法改进遗留软件 297
9.1 代码“遗留””的原因以及敏捷开发的用处 299
9.2 探索遗留代码库 302
9.3 使用鉴定测试来创建基准事实 306
9.4 注释 309
9.5 度量、代码味道及SOFA 310
9.6 方法级别的重构:使用嫁接替代依赖 314
9.7 计划文档的视角 320
9.8 谬论和陷阱 324
9.9 结束语:持续的重构 325
9.10 深入学习 326
9.11 建议的练习 328
第10章 项目管理:Scrum、结对编程和版本控制系统 331
10.1 团队规模:两个匹萨大小的团队以及Scrum 333
10.2 结对编程 335
10.3 敏捷设计和代码评审 337
10.4 两个匹萨大小团队的版本控制:合并冲突 337
10.5 有效地使用分支 341
10.6 报告和修复代码:五个R 344
10.7 计划文档的视角 346
10.8 谬论和陷阱 354
10.9 结束语:团队、合作以及四十年的版本控制 355
10.10 深入学习 356
10.11 建议的练习 358
第11章 SaaS类的设计模式 361
11.1 模式、反模式及SOLID类架构 363
11.2 正好够用的UML 368
11.3 单一责任原则 370
11.4 开闭原则 372
11.5 里氏代换原则 377
11.6 依赖注入原则 379
11.7 迪米特法则 383
11.8 计划文档的视角 387
11.9 谬论和陷阱 388
11.10 结束语:框架包含了设计模式 389
11.11 深入学习 390
11.12 建议的练习 392
第12章 SaaS非功能性需求:性能、发行、可靠性和实用安全 393
12.1 从开发到部署 395
12.2 量化响应性 397
12.3 持续集成和持续部署 399
12.4 发行和功能标记 401
12.5 量化可访问性 405
12.6 监控和查找瓶颈 406
12.7 用缓存来提高渲染和数据库性能 408
12.8 避免滥用数据库查询 412
12.9 安全:在应用程序中保护用户数据 415
12.10 计划文档的视角 420
12.11 谬论和陷阱 422
12.12 结束语:性能、可靠性、安全和有漏洞的抽象层 425
12.13 深入学习 426
12.14 建议的练习 430
第13章 后记 433
13.1 SaaS、SOA、Ruby和Rails的视角 434
13.2 回顾过往 434
13.3 展望未来 437
13.5 最后的话 438
13.5 深入学习 439
附录 A 使用本书配套软件 441
A.1 Beta版本的指导 443
A.2 本书配套软件概览 443
A.3 在VirtualBox中使用bookware的虚拟机 444
A.4 在Amazon的EC2上使用bookware的虚拟机 445
A.5 编辑代码:编辑器和UNIX生存技巧 446
A.6 开始使用Git进行版本控制 447
A.7 开始学习GitHub或ProjectLocker 448
A.8 使用Heroku部署到云端 452
A.9 谬论和陷阱 454
A.10 深入学习 455