图灵程序设计丛书 持续交付实战
作者:[德] 埃伯哈德 沃尔夫(Eberhard Wolff) 著,夏雪 译
出版时间: 2020年版
内容简介
《持续交付实战》是持续交付实战指南,具体内容包括:持续交付能够解决的问题以及它具体如何解决问题,PaaS云解决方案,用Gradle、Maven和Jenkins实现自动化构建和持续集成,用SonarQube执行静态代码,如何通过容量测试确保性能,探索式测试的新特性和问题,在生产环境中发布版本和运行应用程序,等等。
目录
第 一部分 基础
第 1 章 持续交付:是什么和怎么做 2
1.1 什么是持续交付 2
1.2 为什么软件发布如此复杂 2
1.2.1 持续集成带来希望 2
1.2.2 过程缓慢且有风险 3
1.2.3 变快是有可能的 3
1.3 持续交付的价值 3
1.3.1 规律性 3
1.3.2 可追溯性 4
1.3.3 退化 4
1.4 持续交付的优势 4
1.4.1 持续交付可加快上市速度 5
1.4.2 示例 5
1.4.3 实现特性并将其发布到生产环境 5
1.4.4 下一个特性 5
1.4.5 持续交付能带来竞争优势 5
1.4.6 如果没有持续交付 6
1.4.7 持续交付和精益创业 6
1.4.8 对开发过程的影响 6
1.4.9 最小化风险 7
1.4.10 更快的反馈和精益 9
1.5 持续交付流水线的生成及其结构 10
1.6 小结 12
第 2 章 提供基础设施 13
2.1 概述 13
2.2 安装脚本 14
2.3 Chef 16
2.3.1 对比Chef与Puppet 17
2.3.2 其他备选方案 18
2.3.3 技术基础 18
2.3.4 Chef Solo 23
2.3.5 Chef Solo总结 24
2.3.6 Knife和Chef Server 24
2.3.7 Chef Server总结 27
2.4 Vagrant 28
2.4.1 Chef和Vagrant实例 29
2.4.2 Vagrant总结 30
2.5 Docker 30
2.5.1 Docker解决方案 31
2.5.2 创建Docker容器 32
2.5.3 使用Docker运行示例应用程序 35
2.5.4 Docker和Vagrant 36
2.5.5 Docker Machine 38
2.5.6 Docker的复杂配置 39
2.5.7 Docker Compose 41
2.6 不可变的服务器 43
2.6.1 幂等性的缺点 43
2.6.2 不可变服务器和Docker 43
2.7 基础设施即代码 44
2.8 平台即服务 45
2.9 数据和数据库的处理 47
2.9.1 模式的处理 47
2.9.2 测试和主数据 48
2.10 小结 49
第二部分 持续交付流水线
第 3 章 构建自动化和持续集成 52
3.1 概述 52
3.2 构建自动化和构建工具 52
3.2.1 Java世界中的构建工具 53
3.2.2 Ant 54
3.2.3 Maven 54
3.2.4 Gradle 58
3.2.5 其他构建工具 60
3.2.6 选择合适的工具 60
3.3 单元测试 61
3.3.1 编写好的单元测试 62
3.3.2 测试驱动开发 64
3.3.3 整洁的代码和软件工艺 65
3.4 持续集成 65
3.4.1 Jenkins 66
3.4.2 持续集成基础设施 70
3.4.3 结论 71
3.5 度量代码质量 73
3.6 工件管理 76
3.6.1 集成到构建中 78
3.6.2 仓库的高级特性 79
3.7 小结 80
第 4 章 验收测试 81
4.1 概述 81
4.2 测试金字塔 82
4.3 什么是验收测试 84
4.3.1 自动化验收测试 84
4.3.2 不仅仅是提升效率 84
4.3.3 手动测试 85
4.3.4 客户 85
4.3.5 对比验收测试与单元测试 86
4.3.6 测试环境 86
4.4 基于图形用户界面的验收测试 87
4.4.1 图形用户界面测试的问题 87
4.4.2 针对脆弱的图形用户界面测试的抽象 87
4.4.3 使用Selenium实现自动化 88
4.4.4 WebDriver API 88
4.4.5 无须Web浏览器的测试:HtmlUnit 88
4.4.6 Selenium WebDriver API 88
4.4.7 Selenium IDE 88
4.4.8 自动化图形用户界面测试的问题 90
4.4.9 执行图形用户界面测试 90
4.4.10 将测试导出为代码 90
4.4.11 手动修改测试用例 90
4.4.12 测试数据 91
4.4.13 Page对象 91
4.5 图形用户界面测试的替代工具 91
4.5.1 PhantomJS 92
4.5.2 Windmill 92
4.6 文本化验收测试 93
4.6.1 行为驱动开发 93
4.6.2 不同的适配器 95
4.7 其他可选框架 96
4.8 验收测试策略 97
4.8.1 合适的工具 97
4.8.2 快速反馈 97
4.8.3 测试覆盖率 98
4.9 小结 98
第 5 章 容量测试 99
5.1 概述 99
5.2 如何进行容量测试 99
5.2.1 容量测试的目标 100
5.2.2 数据量与环境 100
5.2.3 只在实现结束时才进行性能测试吗 100
5.2.4 容量测试 = 风险管理 100
5.2.5 用户模拟 101
5.2.6 记录性能需求 101
5.2.7 用于容量测试的硬件 101
5.2.8 云和虚拟化 102
5.2.9 通过持续测试使风险最小化 102
5.2.10 容量测试是否明智 102
5.3 实现容量测试 103
5.4 使用Gatling实现容量测试 104
5.5 Gatling的替代工具 108
5.5.1 Grinder 108
5.5.2 Apache JMeter 108
5.5.3 Tsung 109
5.5.4 商业解决方案 109
5.6 小结 109
第 6 章 探索式测试 110
6.1 概述 110
6.2 为什么要进行探索式测试 110
6.2.1 有时手动测试会更好 110
6.2.2 由客户测试 111
6.2.3 非功能性需求的手动测试 111
6.3 该怎么做 111
6.3.1 测试任务指南 112
6.3.2 自动化的环境 112
6.3.3 以展示为依据 112
6.3.4 示例:电子商务应用程序 112
6.3.5 Beta测试 112
6.3.6 基于会话的测试 113
6.4 小结 114
第 7 章 部署:在生产环境中发布版本 115
7.1 概述 115
7.2 发布和回滚 115
7.2.1 优点 116
7.2.2 缺点 116
7.3 前滚 116
7.3.1 优点 117
7.3.2 缺点 117
7.4 蓝/绿部署 117
7.4.1 优点 118
7.4.2 缺点 118
7.5 金丝雀发布 118
7.5.1 优点 119
7.5.2 缺点 119
7.6 持续部署 120
7.6.1 优点 120
7.6.2 缺点 121
7.7 虚拟化 121
7.8 Web应用程序之外 122
7.9 小结 123
第 8 章 运维 124
8.1 概述 124
8.2 运维中的挑战 124
8.3 日志文件 125
8.3.1 应该记录什么 126
8.3.2 处理日志文件的工具 127
8.3.3 示例应用程序中的日志记录 128
8.4 示例应用程序的日志分析 129
8.4.1 用Kibana做分析 131
8.4.2 ELK——可扩展性 132
8.5 用于日志的其他技术 134
8.6 高级日志技术 135
8.6.1 匿名化 135
8.6.2 性能 136
8.6.3 时间 136
8.6.4 运维数据库 136
8.7 监控 136
8.8 Graphite指标 137
8.9 示例应用程序中的指标 138
8.10 其他监控解决方案 140
8.11 运维应用程序时的额外挑战 141
8.11.1 脚本 141
8.11.2 客户数据中心内的应用程序 141
8.12 小结 142
第三部分 持续交付的管理、组织和架构
第 9 章 引入持续交付 144
9.1 概述 144
9.2 从一开始就引入持续交付 144
9.3 价值流映射 145
9.3.1 描述事件序列的价值流映射 145
9.3.2 优化 145
9.4 其他优化措施 146
9.4.1 质量投资 146
9.4.2 成本 147
9.4.3 收益 147
9.4.4 不要在“红色构建”上检入 147
9.4.5 立即停止 148
9.4.6 “五个为什么” 148
9.4.7 DevOps 149
9.5 小结 149
第 10 章 持续交付和DevOps 150
10.1 概述 150
10.2 什么是DevOps 150
10.2.1 问题 150
10.2.2 客户视角 151
10.2.3 先锋:亚马逊 151
10.2.4 DevOps 151
10.3 持续交付和DevOps 152
10.3.1 DevOps:不只是持续交付 153
10.3.2 个体责任和自组织 153
10.3.3 技术决策 154
10.3.4 减少集中控制 154
10.3.5 技术多元化 154
10.3.6 团队间的交流 154
10.3.7 架构 155
10.4 没有DevOps的持续交付 156
10.5 小结 157
第 11 章 持续交付、DevOps和软件架构 158
11.1 概述 158
11.2 软件架构 158
11.3 针对持续交付优化架构 160
11.4 接口 161
11.4.1 伯斯塔尔法则 162
11.4.2 容错设计 162
11.4.3 状态 163
11.5 数据库 163
11.5.1 保持数据库稳定 163
11.5.2 数据库 = 组件 164
11.5.3 视图和存储过程 164
11.5.4 每个组件一个数据库 165
11.5.5 NoSQL数据库 165
11.6 微服务 165
11.6.1 微服务与持续交付 165
11.6.2 借助微服务引入持续交付 166
11.6.3 微服务需要持续交付 166
11.6.4 组织 166
11.7 新特性的处理 167
11.7.1 特性分支 167
11.7.2 特性开关 167
11.7.3 优点 167
11.7.4 特性开关的用例 168
11.7.5 缺点 168
11.8 小结 169
第 12 章 总结:收益是什么 170