新書推薦:
《
清洁
》
售價:HK$
66.7
《
组队:超级个体时代的协作方式
》
售價:HK$
79.4
《
第十三位陪审员
》
售價:HK$
55.2
《
微观经济学(第三版)【2024诺贝尔经济学奖获奖者作品】
》
售價:HK$
159.9
《
Python贝叶斯深度学习
》
售價:HK$
91.8
《
文本的密码:社会语境中的宋代文学
》
售價:HK$
69.0
《
启微·狂骉年代:西洋赛马在中国
》
售價:HK$
80.5
《
有趣的中国古建筑
》
售價:HK$
68.8
|
編輯推薦: |
遗留代码是指因为种种原因格外难以修正、改进以及使用的代码,这样的代码有很多,每天我们都会因为遗留代码而损失时间、金钱和机遇,软件产业通常轻视可维护性,所以到*后企业花在维护代码上的成本比一开始编写代码的成本还高。本书针对这一现状,总结了9条构建易维护代码、解决遗留代码的zui佳原则,是敏捷开发的具体实战指南。 本书不仅仅是关于如何构建更好的软件,更是关于如何构建更好的软件产业。书中囊括了作者身为专业开发者三十年所学的精华。如果你想要优化软件交付流程,但是感觉到裹足不前、无能为力,那么这本书正适合你。
|
內容簡介: |
《修改软件的艺术 构建易维护代码的9条*实践》会帮你降低构建与维护软件的成本。如果你是软件开发者,将学到一套实践方法以构建易修改的代码,因为在应用当中代码经常需要修改。对于和软件开发者合作的管理者来说,本书会向你展示为何引入这9个基本的实践方法,会使你的团队更加有效地交付软件而不至于让软件演变成遗留代码。
|
關於作者: |
David Scott Bernstein 敏捷教练,曾为IBM、微软、Yahoo等企业提供敏捷实践指导。他的公司To Be Agile (tobeagile.com)指导团队进行测试先行、结对编程以及重构等极限编程实践。
|
目錄:
|
第一部分 遗留代码危机
第 1 章 有些事情不对劲2
1.1 什么是遗留代码3
1.2 顺流直下4
1.3 孤注一掷6
1.4 为什么瀑布模型不管用7
1.4.1 食谱与配方7
1.4.2 开发和测试分离8
1.5 当流程变成体力劳动8
1.6 坚如磐石的管理9
1.7 此处有龙10
1.8 评估未知11
1.9 一个充满外行人的产业12
1.10 回顾13
第 2 章 逃出混乱14
2.1 混乱报告14
2.1.1 成功的15
2.1.2 遇到困难的15
2.1.3 失败的(有缺陷的)15
2.2 驳斥斯坦迪什咨询集团16
2.3 项目为何会失败17
2.4 失败的代价21
2.4.1 这里十几亿,那里十几亿21
2.4.2 不同的研究,同样的危机22
2.5 总结23
第 3 章 聪明人,新想法25
3.1 走进敏捷25
3.2 小即是好26
3.3 实现敏捷27
3.4 艺术与技能的平衡28
3.5 敏捷跨越鸿沟29
3.6 追求技术卓越30
3.7 总结31
第二部分 延续软件生命(和价值)的9种实践方法
第 4 章 9个实践34
4.1 专家知道什么35
4.2 守-破-离36
4.3 首要原则37
4.4 关于原则38
4.5 关于实践38
4.6 原则指导实践39
4.7 未雨绸缪还是随机应变40
4.8 定义软件中的好40
4.9 为什么是9个实践42
4.10 总结43
第 5 章 实践1:在问如何做之前先问做什么、为什么做、给谁做44
5.1 不要说如何44
5.2 将如何变为什么45
5.3 要有一个产品负责人46
5.4 故事描述了做什么、为什么做、给谁做48
5.5 为验收测试设立明确标准50
5.6 自动化验收标准50
5.7 让我们付诸实践51
5.7.1 产品负责人的7个策略51
5.7.2 编写出更好用户故事的7个策略52
5.8 总结53
第6 章 实践2:小批次构建55
6.1 更小的谎言56
6.2 学会变通56
6.3 控制发布节奏58
6.4 越小越好59
6.5 分而治之60
6.6 更短的反馈回路62
6.7 提高构建速度63
6.8 对反馈做出响应64
6.9 建立待办列表65
6.10 把用户故事拆分为任务66
6.11 跳出时间盒子思考66
6.12 范围控制67
6.13 让我们付诸实践69
6.13.1 度量软件开发的7个策略69
6.13.2 分割用户故事的7个策略70
6.14 总结71
第7 章 实践3:持续集成72
7.1 建立项目的心跳73
7.2 理解完成、完整完成和完美完成的区别73
7.3 实践持续部署74
7.4 自动化构建75
7.5 尽早集成,频繁集成76
7.6 迈出第一步76
7.7 付诸实践77
7.7.1 构建敏捷设施的7个策略77
7.7.2 消除风险的7个策略79
7.8 总结80
第8 章 实践4:协作81
8.1 极限编程82
8.2 沟通与协作83
8.3 结对编程84
8.3.1 结对的好处85
8.3.2 如何结对编程86
8.3.3 和谁结对87
8.4 伙伴编程88
8.5 穿刺,群战,围攻89
8.5.1 穿刺89
8.5.2 群战89
8.5.3 围攻89
8.6 在时间盒子中对未知进行调研90
8.7 定期代码审查和回顾会议91
8.8 加强学习和知识分享92
8.9 诲人不倦且不耻下问92
8.10 让我们付诸实践93
8.10.1 结对编程的7个策略93
8.10.2 高效回顾会议的7个策略94
8.11 总结95
第9 章 实践5:编写整洁的代码97
9.1 高质量的代码是内聚的98
9.2 高质量的代码是松散耦合的99
9.3 高质量的代码是封装良好的100
9.4 高质量的代码是自主的102
9.5 高质量的代码是没有冗余的104
9.6 让代码特质指导我们105
9.7 今天的代码质量提高会为将来带来速度的提升106
9.8 让我们付诸实践107
9.8.1 提高代码质量的7个策略107
9.8.2 编写可维护代码的7个策略108
9.9 总结109
第10 章 实践6:测试先行110
10.1 测试的种类111
10.1.1 验收测试 = 客户测试111
10.1.2 单元测试 = 开发者测试111
10.1.3 其他测试 = 质量保证测试112
10.2 质量保证112
10.2.1 测试驱动开发不能取代质量保证113
10.2.2 单元测试不是万能的113
10.3 编写优质测试114
10.3.1 这不是测试115
10.3.2 以行为作为单元115
10.4 TDD可以提供迅速的反馈116
10.5 TDD可以为重构提供支持116
10.6 编写可测试的代码117
10.7 TDD也会失败118
10.8 如何将TDD引入团队119
10.9 成为测试感染者119
10.10 让我们付诸实践120
10.10.1 进行优质验收测试的7个策略120
10.10.2 进行优秀单元测试的7个策略121
10.11 总结122
第11 章 实践7:用测试描述行为123
11.1 红条、绿条、重构124
11.2 一个用测试先行来描述行为的实例125
11.2.1 编写测试125
11.2.2 存根代码126
11.2.3 实现行为127
11.3 引入限制条件128
11.3.1 编写测试和代码存根129
11.3.2 实现行为129
11.4 我们创建了什么130
11.5 测试就是标准132
11.6 测试需要完整133
11.7 让测试独一无二134
11.8 用测试来覆盖代码134
11.9 bug是缺失的测试135
11.10 用模拟对象来测试工作流135
11.11 建立防护网136
11.12 让我们付诸实践136
11.12.1 使用测试作为标准的7个策略136
11.12.2 修复bug的7个策略137
11.13 总结139
第12 章 实践8:最后实现设计140
12.1 可变性的阻碍140
12.2 可持续性开发142
12.3 编码与清理143
12.4 软件被阅读的次数比编写次数多143
12.5 意图导向编程144
12.6 降低圈复杂度145
12.7 将创建和使用分离146
12.8 演化式设计147
12.9 让我们付诸实践147
12.9.1 进行演化式设计的7个策略148
12.9.2 清理代码的7个策略149
12.10 总结150
第13 章 实践9:重构遗留代码151
13.1 投资还是借贷152
13.2 变成铁公鸡153
13.3 当代码需要修改时153
13.3.1 对已有代码添加测试154
13.3.2 通过重构糟糕代码来培养良好习惯154
13.3.3 推迟那些不可避免的155
13.4 重构技巧155
13.4.1 图钉测试155
13.4.2 依赖注入156
13.4.3 系统扼杀156
13.4.4 抽象分支156
13.5 以支持修改为目的重构157
13.6 以开闭原则为目的重构157
13.7 以提高可修改性为目的重构158
13.8 第二次做好158
13.9 让我们付诸实践159
13.9.1 助你正确重构代码的7个策略159
13.9.2 决定何时进行重构的7个策略161
13.10 总结162
第14 章 从遗留代码中学习163
14.1 更好,更快,更廉价164
14.2 不在不需要的事情上花钱166
14.3 循规蹈矩167
14.4 提升整个软件行业168
14.5 超越敏捷169
14.6 将理解具象化170
14.7 成长的勇气171
参考文献174
|
|