标题：未雨绸缪——理解软件配置管理（第2版）
出版信息
《未雨绸缪——理解软件配置管理（第2版）》
董越 著  未雨绸缪——理解软件配置管理（第2版）
ISBN 978-7-121-16674-7
2012年6月出版
定价：69.00元
16开
272页
内 容 简 介
软件配置管理为软件开发提供了基础性的支持环境，它与软件开发中的所有角色都有联系，因此本书是写给所有与软件开发有关的人士看的，而不仅仅是写给软件配置管理人员的。
本书分为两篇，上篇详细介绍了软件配置管理的基本知识；下篇主要讲述了软件配置管理的一些实际问题。本书的目标是让读者用很短的时间就能掌握软件配置管理的基础知识，在参与软件开发时，具备软件配置管理方面的基本素养。
本书的一大特色是作者用诙谐生动的语言来讲述专业的技术知识。文中充满睿智的调侃，为读者营造出一种轻松的氛围，让原本比较沉闷的技术阅读成为一种愉悦的享受！
致本书读者
据说我小的时候，吃西瓜就喜欢吃尖儿。一桌西瓜刚切好，大人一不留神，就有很多块儿已经没尖儿了。这说明的第一个问题是，打小我就不是个老实本分的孩子。这说明的第二个问题是，西瓜数尖儿最好吃，最甜。如果肚子容量不大的话，应该先吃它。
我现在要做的事，就是和本书的读者们一起，去吃西瓜尖儿。软件配置管理可是个大西瓜，涉及很多方面，有很多细节在里面。作为广大读者，特别是并不以软件配置管理为生的读者，恐怕没这个闲心，钻研每一个方面的每一个细节，吃到西瓜露出青皮儿。这本书介绍的是软件配置管理的基本概念、基本思想、基本方法和基本要点，总之，是最核心的内容，框架性的内容。本书的目标是，让您用几个小时的时间，掌握软件配置管理的基础知识。
软件配置管理与软件研发中的所有角色都有关系。开发人员需要版本控制来帮忙，以避免版本混乱，工作成果丢失；测试人员需要缺陷跟踪系统来帮忙，防止自己发现的 Bug，程序员忘了改，最后连自己都忘记了；项目经理关心项目进度，这同样和软件配置管理有关。所以，不论您现在专注于什么工作，不论您将来的理想是什么，只要与软件研发相关，相信本书都会有利于您的成长！
流水先生（董越）
丁亥初秋
第2版前言
本书第1版的写作完成于2007年秋天。四年以来，软件配置管理领域最大的发展变化是，以Git为代表的分布式版本控制工具日渐流行。本书第2版添加了专门的章节（3.5节）介绍分布式版本控制工具，并在其他已有章节（第2、3、4、5、7、12、16章）中，介绍如何在不同的场景中使用这个新“装备”。
然而，引入分布式版本控制工具，只是第2版所修订内容的一小部分。读过第1版的读者在预览本版目录时会发现，本书的篇章结构发生了不少变化。比如，持续集成的内容进行了扩充，作为单独的一章（第6章）体现出来。再如，在讲解变更管理时，用一节的篇幅（10.2节）讲解了Scrum等开发方法中，以特性（Feature）为单位的开发管理。
在具体内容的修改中，替换了第1版中两三成文字，以进一步突出重点、说清本质，并帮助读者更好地学以致用。此外，第1版中使用的若干术语在本版中进行了更新。比如改称任务单元为变更集，与业界通用术语相符。
本书第2版的具体内容改变了很多，但与第1版相比，本书的叙述风格和目标读者群没有发生什么变化。本书仍然力图以生动、易懂的叙述，让广大的软件开发人员、管理人员、质量保证与流程优化人员，当然也包括配置管理人员，对软件配置管理有一个基本的了解。
感谢电子工业出版社张春雨等编辑的辛苦工作，使本书第2版得以付梓。同时感谢如下评审者认真、细致的评审：我的配置管理同行李靖雯、李晓琴、李越、罗晓辉、王晓翔、赵延涛、郑博星，他们足以保证本书的专业性；从事软件研发中不同工作的关恒、齐文、张辉、庄孝德等同事，他们帮助我从不同视角审视考量本书；以及并不从事软件研发工作的我的夫人，她负责保证本书的叙述通俗易懂，即使外行也能理解。感谢你们的帮助！
本书第1版在当当网和中国互动出版网得到了读者的较好评价，并且从出版至售罄，一直位列两网站软件配置管理书籍销量榜首。作为作者，最希望的事情就是写出的一点东西能得到读者的认可，对读者有所帮助。很高兴本书第1版初步实现了这一目标，并期望本书第2版能够给读者带来更大的收获。
董  越
2012年3月
推荐序
许多工科学生都参加过一门称之为“金工实习”的课程，会在生产车间内真实地体会车、铣、刨、磨、钻、铸、锻、焊等诸多生产工艺，同时也会领略到流水线生产的高效和有序。实际上配置管理就是保证这些工艺过程按生产大纲的安排，并行而有序地开展，最终将原材料或毛坯变为成品的关键方法。但软件毕竟和制造业产品或硬件不同，软件是“软”的，灵活性高，而且易变。因此，如何理解软件配置管理，并进而把握软件配置管理的内在规律，真正使软件配置管理起到为软件交付保驾护航的作用，的确是值得业界仔细思考和研究的一个课题。
从流程角度看，软件配置管理是整个软件开发生命周期中一个非常核心的管理过程。配置管理实际贯穿了从需求分析、架构设计、项目管理、开发、集成构建、测试，以及上线的全过程。这一过程不仅涉及宏观的项目进度控制、配置管理规范及计划、多地点开发规划等，也包括更细粒度的分支模型、构建及集成方式、变更处理流程，还包括微观的与开发人员直接相关的版本控制、差异比较与归并等。绝不夸张地讲，软件配置管理是一门“八面玲珑”的技术或艺术，而读者可以从董越先生的《未雨绸缪——理解软件配置管理》一书中切实感受到这一点。当开发人员从配置管理工具的版本树中静静欣赏自己作品的成形轨迹时，当集成人员从组件基线树把握整个应用组件的里程碑脉络时，当项目管理人员面对缺陷发展趋势以判断产品发布时机时，当构建生产人员顺利将正确版本的源代码从版本库中取出、构建并在生产系统投产时，配置管理及相关工具不仅仅是这些人员的有力助手，而且随着时间的推移它带给大家更多的将是一份信任和感动！
从人员角度看，软件配置管理人员在软件企业中起着非常重要的作用，绝不是许多人头脑中的文档管理员、档案管理员或者什么其他的人员。他们是软件企业中所有软件资产的管理员，是最洞悉软件整个开发及变更过程并参与其设计的关键人员，是能与项目经理/人员、质量保证经理/人员、软件分析/设计/开发/构建/测试人员充分沟通并与之打成一片的“公关”人员，是了解操作系统管理、网络管理、各类开发语言和环境、深谙软件过程改进理论和相关工具的技术人员。通过本书，读者可以加深对配置管理的理解，加强企业配置管理的相关工作，重视配置管理人员的培养和提高。
全书尽管只有二百余页，但却深入浅出地道出了与配置变更管理相关的多个基本概念，如版本控制、配置管理、缺陷跟踪与变更管理、构建、组件、集成、分支等。同时书中根据不同实际场景给出了业界的最佳实践，而且处处渗透了作者在软件配置管理方面的心得，例如，对分支运用的分析、对组件复用的理解和实践、对于集成过程及集成责任的清晰阐述等。并且，本书结合工具（ClearCase、ClearQuest、Subversion、Bugzilla等）简单明了地指出了当前流行的配置工具是如何实现这些最佳实践的。可以看出，《未雨绸缪——理解软件配置管理》一书是作者多年专注于软件配置管理理论和实践的结晶，书中不少观点实际上也代表了包括我在内的很多软件配置管理相关从业人员的感受和心声，是值得所有软件开发从业人员仔细阅读、细细品味及随时参考的好书！
非常感谢董越先生在紧张工作之余为大家所做的切切实实的贡献！
李纪华
2007年10月
李纪华，现任IBM中国有限公司软件部Rational软件北方区技术负责人。曾经为国内外多家大型软件研发组织提供软件咨询服务，范围包括软件需求管理、软件配置与变更管理、IT项目管理、实时系统测试等多个方面。此前在Rational澳洲亚太技术支持中心专门从事亚太地区ClearCase用户的技术支持工作。在加入Rational及IBM之前，李纪华先后在Platinum Technology中国、Computer Associates中国担任技术顾问，主要从事软件生命周期解决方案的咨询工作。在软件工程技术方面，李纪华有着多年的实践经验，目前主要专注于软件配置与变更管理、项目组合管理及企业应用现代化等领域。
前  言
据说我小的时候，吃西瓜就喜欢吃尖儿。一桌西瓜刚切好，大人一不留神，就有很多块儿已经没尖儿了。这说明的第一个问题是，打小我就不是个老实本分的孩子。这说明的第二个问题是，西瓜数尖儿最好吃，最甜。如果肚子容量不大的话，应该先吃它。
我现在要做的事，就是和本书的读者们一起，去吃西瓜尖儿。软件配置管理（Software Configuration Management，SCM）可是个大西瓜，涉及很多方面，有很多细节在里面。广大读者，特别是并不以软件配置管理为生的读者，恐怕没这个闲心去钻研每一个方面的每一个细节，吃到西瓜露出青皮儿。这本书介绍的是软件配置管理的基本概念、基本思想、基本方法和基本要点。总之，是最核心的、框架性的内容。本书的目标是，让您用几小时的时间，掌握软件配置管理的基础知识。
本书是写给所有与软件研发有关的人士的，而不仅仅是写给软件配置管理专业人员的。原因之一在于软件配置管理的特殊性。软件配置管理与软件研发中的所有角色都有关系。开发人员集中精力于编写代码，但是需要版本控制来帮忙，以避免版本混乱，工作成果丢失；测试人员集中精力于测试，但是需要缺陷跟踪系统来帮忙，防止自己发现的缺陷开发人员忘了改，最后连自己都忘记了。项目经理关心项目进度，这同样和软件配置管理有关：如果能正确地运用分支这个手段，让不同的工作（比如系统测试和开发人员继续开发）并行起来，可以大大加快项目的进展速度。还有需求管理人员、系统架构师、用户文档编写人员、质量保证人员……每个人都要面对软件配置管理，都应学习使用它，并从它那里受益，因为软件配置管理为软件研发提供了基础性的支持环境。
另一个理由是，在很多情况下，软件配置管理应该怎么做，深深地受当时特定情况的影响。而这特定的情况、特定的背景，往往是研发团队的其他成员要比软件配置管理工程师更清楚。就好像衣服穿多了还是穿少了，要听本人的意见，冷暖自知。
对于正在从事或打算从事软件配置管理工作的读者，这本书也是颇有价值的。日常的工作，可能会让我们只见树木，不见森林。而通过这本书，可以概览软件配置管理的全貌，系统地了解我们要做的事情，了解我们的使命。另一方面，本书所给出的软件配置管理的基本原理和基本方法，来自于业界的最佳实践和已经形成的解决模式。这些为解决特定研发背景下的具体问题，提供了很好的指导。我们需要做的是，考察具体问题、具体情况，融会贯通地运用软件配置管理的基础知识，产生优秀的具体解决方案，并付诸实施。
至于本书的书名，其中的“未雨绸缪”有如下三层含义。首先，记录历史，以供不时之需，这是软件配置管理的重要功能之一。其次，在软件研发中，随着软件研发规模的不断扩大，软件系统复杂性的不断增长，对软件配置管理的需求也会越来越强烈。因此，了解软件配置管理，是在为明天做准备。最后，本书帮助读者充实自己。谁不想成长呢？不论你现在专注于什么工作，不论你将来的理想是什么，只要与软件研发相关，相信本书都会有利于你的成长！
最后说一下本书的风格。就像这篇自序的风格一样，本书通俗易懂，偶尔还诙谐一下。希望读者在阅读时，能分享我写作时的愉悦。
致 谢
平日里读书时，每当看到作者列出的长长的致谢名单，我心中总是不免起疑。但这种想法不会再出现了，因为我自己终于也经历了出书的过程——这需要许许多多的帮助和支持，这需要许许多多古道热肠的人。幸运的是，我遇到了他们。
首先感谢SCMLife的创始人孙常波先生。本书的写作，缘起于他的约稿。而在写作完成后，常波又付出了大量的心血，帮忙联系出版。没有你，就没有这本书！
传诚科技的晓黎女士，IBM的浦雪（神仙姐姐）、王燕青、杨杨和朱宏，在联系出版的过程中，也搭手相帮。谢谢你们！
电子工业出版社的博文视点是本书的出版商。这本书能在博文视点出版，令我十分喜悦。感谢你们在阅读后把这本书归类为好书并决定出版，感谢你们几个月以来辛苦的工作。
本书推荐序的作者，IBM Rational的李纪华先生，在软件配置管理领域有很高的威望。能得到他百忙之中的指点，进而欣然作序推荐，我感到非常的荣幸。
本书写作完成后，得到了如下同行和（前）同事的评审。
摩托罗拉：石庆东、石莹莹、耿倩、张莹
爱立信：赵延涛
诺基亚：张晓昀
西门子：雷琼
北电：孙奕凌、朱东、周涛、陈胜利、刘晓钰、宋爱贤
雅虎：刘振飞、徐晓明、李雪江
伟创力：陆媛
新浪：付丽
华为：李靖雯
神州数码：宋京
中兴通讯：任艺
上海贝尔阿尔卡特：唐雪蕾
是你们的反馈，帮助纠正了本书初稿中的某些技术问题，补充并完善了本书的内容；是你们的反馈，让我有了把本书公诸于众的信心。真诚地感谢你们！其中，孙奕凌女士的评审格外严谨、细致，甚至在遣词用句方面都帮忙做了很多润色。在这里特别感谢你，奕凌！
最后，感谢我的母亲，感谢您所给予我的鼓励和支持。在每章初稿完成时，您总是第一个读者，并随后提出中肯的建议。我没有辜负您的期望，在您的著述出版二十年后，我的著述也将要出版了。
目  录
上篇  基本话题1
第1章  恼人不休的问题：什么是软件配置管理2
1.1  问题的引出3
1.2  有那么一类管理4
1.3  为什么称做配置管理6
1.4  其他一些比喻8
第2章  基本的版本控制：记录历史并防止混乱10
2.1  即使只有一个开发人员11
2.2  建立公共存储区12
2.3  防止版本覆盖15
2.4  行话18
第3章  当代版本控制方法21
3.1  变更集的概念22
3.2  以变更集为单位修改代码并提交24
3.3  反方向：适时更新工作区27
3.4  源代码的整体版本29
3.5  分布式版本控制32
第4章  集成：关注整体质量35
4.1  集成的概念36
4.2  保证提交的质量38
4.3  狭义集成的步骤40
4.4  在基线产生之后44
4.5  质量保证：集成前、集成中、集成后45
第5章  从源代码到运行中的程序49
5.1  管理生成转换过程和相关资产50
5.2  保证构建的可重复性51
5.3  全量构建和增量构建53
5.4  让构建更快55
5.5  安装包的版本控制57
5.6  管理测试运行环境60
第6章  迈向持续集成62
6.1  及早和经常地集成，持续集成63
6.2  化繁为简65
6.3  全程自动化67
6.4  快！快！快！69
6.5  多层集成：当团队规模扩大以后70
第7章  分支：减少等待，分头工作74
7.1  文件级分支75
7.2  产品级分支76
7.3  典型应用：实现多层集成79
7.4  温故而知新：实现隔离与共享80
7.5  分支的其他典型应用82
7.6  公共版本库中的分支84
7.7  私有版本库中的分支85
第8章  管理文档88
8.1  文档的标识和存储89
8.2  自带的说明信息91
8.3  趋势：Wiki93
8.4  趋势：数据文件和数据库95
第9章  跟踪缺陷，直到消灭98
9.1  别让发现的缺陷跑掉99
9.2  状态转换图100
9.3  准确记录，便于修复104
9.4  消灭它？立刻消灭它？106
9.5  分析统计缺陷相关数据109
9.6  关联缺陷记录与变更集112
第10章  管理变更114
10.1  管理增强115
10.2  管理特性116
10.3  瀑布模型中的变更118
10.4  影响变更管理的因素121
10.5  控制产品版本间的差异123
10.6  表达产品版本间的差异125
第11章  玄妙的学院派127
11.1  配置识别128
11.2  配置控制130
11.3  配置状态报告131
11.4  配置审计133
11.5  一些软件研发模型中的配置管理135
下篇  复杂场景中的配置管理139
第12章  用分支实现交迭140
12.1  补丁版本141
12.2  复用另一条分支上的改动142
12.3  甚至早在1.0版发布之前145
12.4  甚至为了重要的内部版本147
12.5  甚至为了每次集成149
12.6  双分支结构151
12.7  都是交迭153
第13章  用分支实现变体156
13.1  什么是变体157
13.2  用分支支持变体158
13.3  随主干继续演进160
13.4  把公共改动放到主干上163
13.5  变更管理对交迭和变体的支持165
13.6  历史版本与变体版本的命名166
第14章  用设置实现变体169
14.1  在构建时读取设置信息170
14.2  安装和运行时读取设置信息171
14.3  资源与数据172
14.4  何时使用哪种方法173
14.5  设置对交迭的支持174
第15章  用组件的组合实现变体175
15.1  雏形：平台加应用176
15.2  在不同阶段组装177
15.3  复合基线180
15.4  复合分支183
15.5  实现软件复用：分支、设置、组件相结合187
15.6  实现软件复用：架构、过程和组织188
第16章  支持多地点开发192
16.1  何时出现多地点开发193
16.2  主要困难和解决方法194
16.3  离线工作模式195
16.4  远程访问模式197
16.5  当地版本库模式199
16.6  只读模式201
16.7  多地点开发中的变更管理202
第17章  支持跨组织合作204
17.1  从开源到外包205
17.2  管理第三方资产206
17.3  本地记录第三方源代码的演进207
17.4  再加上本地的改造209
17.5  共同开发211
第18章  管理软件部署213
18.1  安装包的存储和管理214
18.2  管理安装过程216
18.3  记录运行系统配置218
18.4  管理变更请求219
18.5  管理网站220
第19章  软件配置管理实施223
19.1  不同阶段，不同挑战224
19.2  如何完成一项改进225
19.3  在一个项目的生命周期中227
19.4  平衡集权与自治231
19.5  管理众多的项目234
19.6  软件配置管理团队的组织结构235
结语  提倡务实的精神238
附录A  相关工具索引241
参考书目251
在线资源252
书网互动254