新書推薦:
《
分析性一体的涌现:进入精神分析的核心
》
售價:HK$
125.4
《
火枪与账簿:早期经济全球化时代的中国与东亚世界
》
售價:HK$
79.4
《
《全面与进步跨太平洋伙伴关系协定》国有企业条款研究
》
售價:HK$
101.2
《
银行业架构网络BIAN(全球数字化时代金融服务业框架)(数字化转型与创新管理丛书)
》
售價:HK$
101.2
《
金托邦:江湖中的沉重正义
》
售價:HK$
62.1
《
易经今解:释疑·解惑·见微
》
售價:HK$
90.9
《
东欧史(全二册)-“中间地带”的困境
》
售價:HK$
227.7
《
虚拟资本:金融怎样挪用我们的未来
》
售價:HK$
79.4
|
編輯推薦: |
作为开发人员,你可能会从另一个团队接手一个项目,而且该项目是基于现有代码库的,拥有很多设计模式、使用假设、基础设施和工具。幸运的是,有一些方法可以为遗留项目注入新的活力,这样你就可以维护、改进和扩展它们,而不必顾及它们的局限性。 这是一本以经验为主导的指南,能使遗留软件项目脱胎换骨。它涵盖了重构、质量度量学、工具链和工作流、持续集成、基础设施自动化以及组织文化等内容。在技术层面,读者将学习如何给代码模块化引进依赖注入,如何定量地衡量软件质量,以及如何实现基础设施的自动化。在策略层面,读者将能学到的实践有:软件是应该重写还是应该重构,团队的组织架构应该是什么样的,以及如何让管理层意识到软件质量的重要性。本书的核心议题包括解析和模块化棘手的代码结构、集成和自动化测试、替换过时的构建系统,以及用Vagrant和Ansible 之类的工具实现基础设施自动化。 本书主要内容 ● 重构遗留代码库。 ● 持续审查和持续集成。 ● 遗留基础设施的自动化。 ● 给老代码加新测试。 ● 单体应用的模块化。 本书面向的读者对象是熟悉面向对象语言(如Java 或C#)的开发人员和团队领导。
|
內容簡介: |
正如本书作者所言,大多数开发人员的主要时间都是花费在与现有的软件打交道上,而不是编写全新的应用程序。相信开发人员或多或少都遇到过与遗留系统相关的问题或者困惑,本书致力于帮开发人员回答这些问题,更重要的是,帮开发人员避免把自己当前开发的系统变成别人将来要面临的遗留问题。 本书篇幅不长,但涵盖的内容很广,例证丰富,有大量的示例代码(主要使用Java或C#编写),深入浅出地介绍了工作在遗留系统中会遇到的各种问题及应对方法。书中不仅包含技术性的内容如何选择构建项目的工具,如何自动化构建基础设施,如何决定并进行重构或重写等,也包含非技术性的内容应该建设什么样的团队文化,如何引入代码评审等活动,如何进行团队知识的传播、改进沟通方式等。
|
關於作者: |
作者简介 Chris Birchall 是伦敦《卫报》的高-级开发工程师,致力于为网站提供支持的后台服务。此前,他做过很多不同的项目,包括日本zui大的医疗门户网站、高性能日志管理软件、自然语言分析工具和许多移动网站。他拥有剑桥大学计算机科学专业的学士学位。 译者简介 张喻,ThoughtWorks咨询师,热爱技术,热衷编程。目前主要从事后端API的开发、部署、维护等相关工作,在整洁代码、敏捷实践和软件开发高效团队方面有丰富的理论和实践经验。 张耀丹,ThoughtWorks咨询师,曾长期参与大型遗留系统的开发与改进,在Java服务器端技术、大型系统架构演进、微服务转型、DevOps和云计算方面有丰富的经验。 禚娴静,ThoughtWorks咨询师,乐于知识分享与传播。拥有多年企业和互联网应用的开发实战经验,专注于敏捷实践、软件架构和持续交付领域,在.NET技术栈和微服务架构演化等方面有丰富的积累。
|
目錄:
|
目录
第一部分 开始
第1章 了解遗留项目中的挑战3
1.1遗留项目的定义3
1.1.1遗留项目的特征4
1.1.2规则的例外5
1.2遗留代码6
1.2.1没有测试和无法测试的代码6
1.2.2不灵活的代码8
1.2.3被技术债务拖累的代码8
1.3遗留基础设施9
1.3.1开发环境10
1.3.2过时的依赖10
1.3.3异构环境11
1.4遗留文化12
1.4.1害怕变化12
1.4.2知识仓库13
1.5小结14
第2章找到起点15
2.1克服恐惧和沮丧15
2.1.1恐惧16
2.1.2沮丧18
2.2收集软件的有用数据19
2.2.1bug和编码标准违例20
2.2.2性能20
2.2.3错误计数23
2.2.4对常见的任务计时23
2.2.5常用文件24
2.2.6度量可度量的一切25
2.3用FindBugs、PMD和Checkstyle审查代码库25
2.3.1在IDE中运行FindBugs26
2.3.2处理误报29
2.3.3PMD和Checkstyle32
2.4用Jenkins进行持续审查34
2.4.1持续集成和持续审查34
2.4.2安装和设置Jenkins35
2.4.3用Jenkins构建和审查代码36
2.4.4还能用Jenkins做些什么37
2.4.5SonarQube39
2.5小结39
第二部分 通过重构改善代码库
第3章准备重构43
3.1达成团队共识44
3.1.1传统主义者44
3.1.2反传统主义者46
3.1.3一切都在于沟通47
3.2获得组织的批准48
3.2.1使它变得正式48
3.2.2备用计划:神秘的20%计划49
3.3选择重构目标50
3.4决策时间:重构还是重写51
3.4.1不应该重写的情况52
3.4.2从头重写的好处55
3.4.3重写的必要条件56
3.4.4第三种方式:增量重写57
3.5小结58
第4章重构59
4.1有纪律的重构59
4.1.1避免麦克白的悲剧59
4.1.2把重构和其他的工作分开60
4.1.3依靠IDE61
4.1.4依靠版本控制系统64
4.1.5Mikado方法65
4.2常见的遗留代码的特征和重构66
4.2.1陈旧代码66
4.2.2有毒的测试68
4.2.3过多的null70
4.2.4不必要的可变状态73
4.2.5错综复杂的业务逻辑74
4.2.6视图层中的复杂性79
4.3测试遗留代码83
4.3.1测试不可测试的代码83
4.3.2没有单元测试的回归测试86
4.3.3让用户为你工作88
4.4小结89
第5章重搭架构90
5.1什么是重搭架构90
5.2将单体应用程序分解为模块92
5.2.1案例研究日志管理应用程序92
5.2.2定义模块和接口94
5.2.3构建脚本和依赖管理95
5.2.4分拆模块96
5.2.5引入Guice97
5.2.6Gradle来了98
5.2.7结论98
5.3将Web应用程序分发到服务99
5.3.1再看一下Orinoco.com99
5.3.2选择一个架构100
5.3.3继续采用单体架构101
5.3.4前后端分离103
5.3.5面向服务架构106
5.3.6微服务108
5.3.7Orinoco.com应该做什么109
5.4小结109
第6章大规模重写111
6.1决定项目范围112
6.1.1项目目标是什么112
6.1.2记录项目范围113
6.2从过去学习114
6.3如何处理数据库115
6.3.1共享现有数据库116
6.3.2创建一个新数据库119
6.3.3应用程序间通信124
6.4小结125
第三部分 重构之外改善项目工作流程与基础设施
第7章开发环境的自动化129
7.1工作的第一天129
7.1.1搭建用户活动仪表盘开发环境130
7.1.2出了什么问题132
7.2一个好的README文件的价值134
7.3用Vagrant和Ansible对开发环境进行自动化135
7.3.1Vagrant介绍135
7.3.2为用户活动仪表盘项目搭建Vagrant136
7.3.3用Ansible进行自动配置137
7.3.4添加更多的角色139
7.3.5移除对外部数据库的依赖141
7.3.6工作的第一天再来一次142
7.4小结143
第8章将自动化扩展到测试环境、预生产环境以及生产环境144
8.1自动化基础设施的好处145
8.1.1保证环境一致性145
8.1.2易于更新软件145
8.1.3易于搭建新环境145
8.1.4支持追踪配置更改146
8.2将自动化扩展到其他环境146
8.2.1重构Ansible脚本以处理多种环境146
8.2.2为Ansible角色和playbook搭建库150
8.2.3让Jenkins负责152
8.2.4常见问题154
8.3移到云上155
8.3.1不可变基础设施156
8.3.2DevOps156
8.4小结157
第9章对遗留软件的开发、构建以及部署过程进行现代化158
9.1开发、构建以及部署遗留软件的困难158
9.1.1缺乏自动化158
9.1.2过时的工具160
9.2更新工具链160
9.3用Jenkins实现持续集成与自动化163
9.4自动发布和部署165
9.5小结172
第10章停止编写遗留代码173
10.1源代码并不是项目的全部173
10.2信息不能是自由的174
10.2.1文档174
10.2.2促进沟通175
10.3工作是做不完的176
10.3.1定期进行代码评审176
10.3.2修复一扇窗户176
10.4自动化一切177
10.5小型为佳178
10.6小结180
|
|